반응형

Collaborative Filtering 기초


/* 2017.7.5 by 3months */



 Movie

 Alice

 Bob

 Carol

 Dave

 x1(romance)

x2(action)

 Love at last

 5

 5

 0

 0

?

?

 Romance Forever

 5

 ?

 ?

 0

 ?

?

 Cute puppies of love

 ?

 4

 0

 ?

?

?

 Nonstop car chases

 0

 0

 5

 4

 ?

 ?

 Swords vs. karate

 0

 0

 5

?

 ?

 ?


앞서 contents based approach에서 movie와 user로 이루어진 위와 같은 평점 테이블에서 x1, x2를 알아내기 어렵다는 것을 알았다. (왜냐하면 이 영화가 얼마나 로맨틱한지 얼마나 액션 영화인지 일일이 보고 평가를 내리는 것은 어렵기 때문이다.) 그런데 각 유저들의 feature에 대한 파라미터들을 이미 알고있다고 가정하면 어떨까? 예를 들어 parameter(alice) = [0 5 0], parameter(bob) = [0 5 0], parameter(carol) = [0 0 5], parameter(dave) = [0 0 5] 라고 하자. 그러면 Love at last의 feature은 대략 x0=1, x1 = 1, x2 = 0 라는 것을 알 수 있다. Alice를 예로 들어보면 [0 5 0][1 1 0] = 5 이라서 love at last의 rating이 5가 된다. 이처럼 각 유저들의 parameter들을 안다면 같은 방식으로 다른 영화들의 feature 값을 알아낼 수 있다.





그러므로 위와 같은 optimization 과정을 통해 콘텐츠의 feature vector인 x(i)를 알아낼 수 있다.


정리하면 contents based approach는 콘텐츠의 feature를 통해 유저의 파라미터를 알아내서 이를 통해 rating을 예측하는 것이고, 앞서 설명한 방식은 이와 반대로 유저의 파라미터를 통해 콘텐츠의 feature를 알아내서 이를 통해 rating을 예측하는 것이다. 이는 마치 닭이먼저냐 달걀이 먼저냐와 같은 문제가 된다. 유저의 파라미터를 알면 콘텐츠의 feature를 알 수 있고, 콘텐츠의 feature를 알면 유저의 파라미터를 알 수 있다. 실제로 할 수 있는 것은, random 하게 유저의 파라미터(theta)를 설정하는 것이다. 그리고 이를 통해 콘텐츠의 feature (x)를 추정하고 이를 통해 다시 theta를 설정하고, 다시 x를 설정하는 과정을 반복적으로 수행한다. 이것이 바로 collaborative filtering의 기초적인 아이디어이다.



반응형