SW-PRODUCT/개발-데이터분석

Netflix Prize와 SVD++

굴돌 2017. 7. 1. 20:38


그동안 대충 얻어들은 귓동냥으로 아이템추천은 Matrix Factorization 방법을 써야 하고

고전적인 방법으로는 SVD가 있는데 실제로는 좀 다른 방법을 사용하게 되고,

어쨌든 쿵짝쿵짝하면 유저의 평점을 예측할 수 있다.

그래서 인테넛에 굴러다니는 함수를 돌리면 예측된 결과를 보여준다.

근데 실제 돌려보면 잘 안된다...

왜 안되는진 모르겠다.


정도 수준이었는데... 시간 난김에 뒤져보고 아주 기본적인 부분부터 정보를 찾게 됐다...;;


Netflix Prize

  2006년 8월에 시작해서 2009년 6월 26일에 "BellKor's Pragmatic Chaos" 팀이 Netflix가 쓰던 Cinematch의 RMSE보다 10% 이상 개선함으로써 30일간의 Last Call이 걸렸는데 딱 7월 25일에 "The Ensemble"이라는 팀이 10% 넘게 개선한 결과를 제출함으로써 이 두 팀간에 최종 평가를 통해 2019년 9월 18일에 "BellKor's Pragmatic Chaos"가 우승함으로써 막을 내리게 됐다.

출처: https://en.wikipedia.org/wiki/Netflix_Prize


그 간의 스토리를 한글로 재밌게 풀어서 쓴 포스트가 있으니 재미삼아 읽어보면 좋다.

http://www.shalomeir.com/2014/11/netflix-prize-1/


재밌는것은, 내가 그토록 햇갈려했던 것들이 FunkSVD 한 단어로 모두 풀렸다는 것이다.


Quora링크[1]에는 수학에서의 SVD와 추천에서의 SVD가 어떻게 다른지, Matrix Factorizaion은 뭐가 다른건지, SVD++는 또 뭐하는건지에 대한 설명이 잘 나와있다.


요약하자면,


수학에서의 SVD는  다. 이건 Deterministic하다.[2]


FunkSVD는 Netflix Prize 초반인 2006년 12월에 Simon Funk(본명은 Brandyn Webb)라는 사람이 올린 블로그글에 있는 방식으로써, 추천에서의 SVD 혹은 Matrix Factorization은 이걸 의미한단다.[3]

이 방식은 Sigma 벡터를 날려버리고, 이런저런 아이디어를 더해서 Gradient Descent(GD)기법으로 Optimazation을 한것이다. 신경망 설명에서 하는 Optimization과 개념은 같고 Loss Function이 다르다.

FunkSVD에 대해서는 코사레 강의[4]에서 상세하게 설명해주는데, 7일무료수강이 가능하니 공짜로 들어볼 수 있다.


그리고 또 한가지 햇갈렸던 ALS(Alternating Least Squares)는 Gradient Descent를 그대로 적용하면 속도가 느린데 이걸 하나씩 업데이트하는 식으로 학습속도를 빠르게 해줬다는 것 같다...[5]


그리고 SVD++는 최중우승팀의 맴버였던 Yehuda Koren이 공개한 논문[6]에 있는 방식으로써... Quora글에 블라블라 설명이 있긴한데 뭔소린지 잘 모르겠다..;; 포인트는, FunkSVD의 Loss Function을 기반으로 해서 블라블라한 텀이 예측쪽과 레귤러레이젼 쪽에 하나씩 더해져있다.


그리고 Quora 글에서는 사실 SVD++는 "Asymmetric SVD"의 "단순화" 버전이며, "Asymmetric SVD"이 킹왕짱이라고 하는데... 이건 더 모르겠다..;;


일단 이 포스트에서는 수학에서의 SVD와 추천에서의 SVD가 어떻게 다른지 (아마도) 구분하게 된 것만도 큰 수확이라고 생각하련다..


----

(2017.07.17 추가)

Funk가 이 공식(yˆij = uTi vj)을 이용해서 Matrix Factorization의 기초를 만들었는데, 이때는 SDG를 사용헀다. 사람들이 이를 ALS를 사용하는 방식으로 개선을 시켰다.

이후에 Paterek이 regulazation 부분에 bias 텀을 추가(yˆij = ci + dj + uTi vj)[7]하는 개선을 했다.


추가로, Matrix Factorization으로 검색하면 항상 나오는 Yehuda Koren이 작성한 2009년 IEEE "Matrix Factorization Techniques for Recommender Systems" 문서 링크도 남겨둔다.[9]



----


[1] https://www.quora.com/Whats-the-difference-between-SVD-and-SVD++

[2] https://en.wikipedia.org/wiki/Singular_value_decomposition

[3] http://sifter.org/simon/journal/20061211.html

[4] https://www.coursera.org/learn/matrix-factorization/home/welcome

[5] https://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf

[6] https://github.com/gpfvic/IRR/blob/master/Factorization%20meets%20the%20neighborhood-%20a%20multifaceted%20collaborative%20filtering%20model.pdf

[7] https://www.cs.uic.edu/~liub/KDD-cup-2007/proceedings/Regular-Paterek.pdf

[9] http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.147.8295&rep=rep1&type=pdf