본문 바로가기
Computer Science/Web Information System

[웹정보] ch09 Recomeder Systems 2

by na1-4an 2024. 6. 13.

9.2.1 Netflix Prize 설명

  • training data: 1억개의 평가,  48만명의 사용자, 17,770개의 영화(2000-2005)
  • test data: 각 사용자의 마지막 몇 개의 평가 (280만개)
  • 평가 기준: RMSE - 당시 넷플릭스의 RMSE는 0.9514 -> 이것보단 낮아야 함!

Utility matrix

movies - users matrix

 

우승한 BellKor 추천 시스템

아래와 같이 multi-scale modeling을 함!

 

* 참고로 Global과 Local이 뭐냐면

만약 Joe라는 사람이 다른 사람들 평균에 비해 0.2stars씩 낮춰서주는 경향이 있다고 하자.

Global view로 보면,

모든 영화에 대한 모든 사람들의 rating 평균은 3.7 stars

sixth sense 영화는 다른 영화들 평균보다 0.5 stars만큼 높음

그러면 Joe는 sixth sense영화를 4 stars(3.7 + 0.5 - 0.2)를 줄 것으로 예측됨.

Local view로 보면,

Joe가 sign이라는 영화를 안좋아하는데 sixth sense 영화와 포스터가 비슷해보임.

Joe는 3.8stars(4 - 0.2)를 줄것임. 

 

 

9.2.1 Netflix Prize 제시된 모델

(1) Basic Collaborative filetering - 0.94

   : item-item CF를 진행!

    즉, 사용자가 좋아하는 영화와 비슷할 수록 높은 similarity를 주자!

    k개의 가까운 이웃을 고르고 rating을 계산.

 

기본 CF

기본 CF 구할 때 rating

 

bias 추가된 CF

평균에서 얼마나 떨어져 있는가!를 고려하기 위해 bias를 넣음 (u는 모든 사용자와 모든 영화의 평균 평점)

하지만 이 방법에는 3가지 문제점이 있다!

  • 어떤 similarity 측정방법을 사용해야 할지 모르겠다
  • 사용자 간의 상호의존성을 무시
  • similarity를 가지고 가중 평균하는 데에는 한계가 있음(similarity가 믿을만 하냐..)

😊solution: s대신에 w를 사용하자!

 

 

(2) CF + Biases + learned weight - 0.91

weighted sum이 이 추가된 CF 

  • N(i;x) - 사용자 x가 rating한 영화 중, 영화 i와 비슷한 영화 모음
  • wij - 강도!
  • w는 user로 부터는 독립적이다.

❓w를 어떻게 set하지❓

  에러를 잘 낮춰주는 w가 좋다!

  그러면 이걸 역추적해보자!

우리는 왼쪽의 RMSE를 낮춰야 함. 즉, 오른쪽의 SSE를 낮춰야 함.

 

최 적 화? Optimization?

→ 사용자가 아직 보지 않은 titem에 대해 추천해야 함!

  하지만 이는 어려운 일임.

  그래서 알려진 rating에서 잘 작동하는 시스템을 구축해 이를 적용하는 것이 중요!

  그러면.. w 계산은 어떻게 해..

"objective fuction"을 정의해서 최적화 문제로 풀자!!

SSE의 predicted rating을 아래처럼 치환함.

J를 minimize하는 w를 구하자!

 

w update ? 

Gradient Descent! 

w가 거의 안바뀔 때 stop!

item i를 고정시키고, 모든 j에 대해서 반복하며 ▽J(w)/ ▽w를 구함.

 

 

(3) Latent Factors - 0.90

넷플릭스 데이터에서 SVD 사용하기!

넷플릭스 데이터에 SVD 적용시키기!
따라서 우리는 위의 식을 최소화해야 한다!

 

해결해야하는 문제점

 1) factor의 개수

     factor의 개수(k)가 많아야 고려할 수 있는 요소가 많아지지만.. 

    너무 많으면 과적합 문제 생김..

2) rating 되어있지 않은 문제가 있음.

    ragularization으로 정규화를 시켜 0으로 되어있는 값을 없앰.

 

Stochastic Gradient Descent vs.Gradient Descent

GD는 모든 train data의 gradient를 계산해야 하지만!

SGD는 1개에 대해서만 gradient를  계산해서 업데이트함.

그래서 SGD가 훨씬!! 빨라!!

그래도 GD는 신중하다!

 

 

(4) Latent factors + Biases - 0.89

 

 

(5) Latent factors + Biases + Time - 0.76

시간도 고려하자!

time-dependence한 파라미터 적용!

 


참고하시라고라