Netflix Prize – 다이나믹 했던 알고리즘 대회 (1)

기계학습, 알고리즘 대회에서 연구원들이 치열하게 연구결과를 가지고 경쟁하는 대회가, 대회 기간이 하루 이틀도 아니고 1년 단위로 이뤄진다면 과연 스포츠 경기 종료 휘슬 직전과 같은 흥미로운 상황이 있을까요? 그래서 대회 당시 분위기를 살펴보는 포스팅을 작성하게 되었습니다.

몇년사이 많은 IT회사 빅마우스들이 한결같이 이야기하는 주제 중에는 아마도 기계학습(Machine Learning)분야가 아닐까 싶습니다. 저도 전부터 기계학습, 특히 추천, 랭킹 알고리즘 분야가 굉장히 중요하다고 생각하게 되면서 이런 저런 연구를 찾아 보던 중 추천 알고리즘분야에서 가장 대표적인 사례로 언급되고 있는 넷플릭스영화 추천 시스템에 대해서 파헤쳐 봤었는데요, 그 때 연구 내용도 흥미로웠지만  Neflix Prize 데이터 예측 대회가 연구와 관계없이 생각보다 다이나믹 하게 진행되었던 것이 인상에 남았습니다. 그래서 본 포스팅에서 추천 알고리즘이나 기계학습에 대한 경험이 없으신 분들도 흥미롭게 데이터 연구 과정과 대회가 진행되는지 전달되도록 써내려 갔습니다. (약간 초반에 지루한 설명이 있긴 합니다만;) 그나저나 넷플릭스 대회가 종료된게 벌써 5년 전이네요.

한번에 다 적으려고 했는데 분량이 생각보다 많아져서 시리즈 물로 포스팅합니다. (포스팅 수가 가득이나 별로 없는 블로그이기도 해서요. ^^;)

Neflix Prize 란?

Netflix Movie Recommendation은 추천 알고리즘의 대표적인 성공사례로 꼽힌다.

Netflix Prize는 넷플릭스 사용자들의 영화 별점 데이터를 가지고 2006년 10월부터 2009년 7월까지 약 3년에 걸쳐 이어진 기계학습을 통한 영화 평가 데이터 예측 대회입니다. 본 대회를 통해 대표적인 추천 알고리즘인 ‘collaborative filtering’이 발전하고 공유되었습니다. 특히 우승팀의 SVD를 활용한 SVD++는 이후 굉장히 많은 분야에서 활용되고 있습니다. 연구 분야의 발전 뿐 아니라 Netflix는 성공적인 대회 개최를 통해 큰 홍보효과를 얻었고 넷플릭스 영화추천 시스템 성능 향상에도 도움이 되었습니다.

당시 대회의 우승 상금은 winner-take-all 방식으로 1등팀이 US $1,000,000를 가져가는 것 이었습니다. 연구분야에서의 상금 치고는 상당한 수준이죠. 정확히는 1등팀이 무조건 수상하는 것은 아니고 매년 우승팀에는 US $50,000 가 주어지며 Netflix가 사용하고 있던 Cinematch 알고리즘보다 10% 이상 성능이 향상 된 경우에만 최종 상금 백만달러가 주어지는 형태로 진행되었습니다. (어떤 한 팀이 10%이상 향상된 결과를 제출하게 되면, last call 한달의 기간이 주어지고 한달 후 최고 성능의 영화 별점 예측을 한 팀이 우승합니다.)

참고로 Netflix Prize 는 2009년 종료된 후 다시 시작하지 않고 있는데요, 프라이버시 문제가 있었던 것이 그 이유 중 하나가 아닐까 예상됩니다. 실제 누구인지 알 수 없도록 변환된 user id 가 어떤 영화를 어떻게 별점을 주었는지 (그리고 변환된 시간정보)가 주어졌는데 이 데이터로 충분히 실제 어떤 사람이 어떤 영화를 봤는지를 역추적이 가능했기 때문에 대회 종료 후 넷플릭스 데이터로 역추적하는 방법이 연구로 나올 정도였고 그래서 현재 Netflix 에서는 당시 공유했던 데이터를 공유하지 않고 있습니다. (얻을 수 있는 방법은 여전히 많이 있지만요.)

영화 추천시스템 성능 평가 방법 : RMSE

당시 추천 시스템의 평가 방법은 지금도 prediction 에서 주로 쓰이는 RMSE 방식으로 어떤 유저가 ‘포레스트 검프’에 별점 4를 주었는데 추천 시스템에서 예상하기로 해당 유저는 ‘포레스트 검프’에 별점 3.7 을 줄 것이라고 계산했다면 0.3 의 error가 발생한 것입니다. 이러한 error를 최소화 하는 방향으로 예측을 하면 알고리즘이 예측을 잘 하는 것으로 볼 수 있으므로 RMSE Score 가 낮을 수록 성능이 좋은 것 입니다.

참고로 대회에서 기준이 된 Netflix의 Cinematch 알고리즘의 RMSE0.9525 였는데 이 의미는 1보다 살짝 작으므로 유저가 ‘인디펜던스 데이’를 보고 별점을 실제 매긴 결과와 시스템이 예측한 결과의 오차가 1개 정도의 오차가 난다는 의미로 볼 수 있습니다. (물론 실제로는 이보다 성능이 훨씬 좋습니다. 왜냐하면 본 대회는 오로지 USER – Movie Rating 데이터만을 가지고 예측하는데 반해 실제로는 해당 영화가 무슨 영화인지, 유저가 어떤 유저인지, 영화를 언제 봤는지, 중간에 멈췄는지, 여러날에 걸쳐 봤는지 등 다양한 추가 데이터를 사용할 수 있기 때문입니다.)

Netflix에서 공개한 챠트 : 단순 Rating데이터(feature) 외에 다른 Feature를 쓸 경우 거의 10배 이상 성능이 향상됨

사실, RMSE를 이용한 성능 평가는 영화 추천 서비스를 제공하는데 있어 최적화된 방법은 아니라고 할 수 있습니다. 왜냐하면 영화 예측 시스템이 유저가 안 본 모든 영화에 대하여 별점을 잘 예측하는 것보다는 어떤 영화를 가장 재미있게 볼지를 예측하는 것이 중요하기 때문입니다. 그러므로 별표 1개를 줄 영화를 잘 예측하는 것은 영화를 서비스하는 입장에선 별로 의미가 없다고 할 수 있으며, 추천 시스템이 유저에게 재미있게 볼 것이라고 예상한 Top N 영화목록이 실제 유저가 좋아할만한 영화인지가 더 중요합니다. 그래서 Netflix Prize 우승팀의 Yahuda Koren 연구원의 논문에서도 이를 지적하며 다른 평가방법을 제안하였었구요. 현재는 Top N의 Precision 을 보거나 nDCG 등의 다른 평가 방법을 통해 추천할 순서로 상위 예측 영화에 더 가중치를 주어 추천 시스템의 성능을 평가하고 있습니다.

주어진 영화 데이터 사용 방법

본 대회 진행 과정을 이해하는 데 추천 알고리즘을 이해해야 하는 것은 아닙니다. 그래도 일반적인 기계학습이 트레이닝과 테스트의 과정으로 나누어져 있다는 것을 이해하시면 대회 결과를 이해하는 데 도움이 됩니다. 기계학습은 보통 데이터를 트레이닝 용과 테스트용으로 나누어 진행되는데, 처음에 아무런 주어진 정보가 없이 모든 데이터를 예측하는 것은 불가능하기 때문입니다. 예를 들어 넷플릭스의 데이터의 경우 {USER, MOVIE, RATING}  형태로 이루어진 트레이닝 데이터들로 학습을 한 후 {USER, MOVIE, ?} 로 되어 있는 테스트 데이터에서 ‘?’를 예측하는 것 입니다. 실제 ‘?’ 값도 데이터가 주어지지만 모른다고 가정하고 예측을 한 후 예측 결과와 실제 결과를 비교하는 것으로 RMSE 를 계산하게 되는 것 입니다.

Data set 활용 과정

위의 그림과 같이 약 1억개(99,072,112)개의 training set을 가지고 추천 시스템을 만듭니다. 만든 시스템이 괜찮게 만들어 졌는지 1,408,395개의 probe set을 가지고 확인합니다. RMSE가 낮게 나오는지 확인하여 수치가 낮게 나오면 나올 수록 추천시스템이 잘 만들어 진 것이죠.

여기서 추가로 대회 과정을 이해하시기 위해 주어진 데이터 외에 그림 하단의 qualifying set(ratings unknown)을 보셔야 합니다. 이 데이터는 {USER, MOVIE, ?} 로 되어 있고 ‘?’인 영화 별점 Rating 값은 대회 주최측만 알고 있습니다.
Qualifying set 데이터는 대회 참가자들은 모르기 때문에 추천 시스템으로 예상되는 별점을 set에 추가하여 대회 주최측의 시스템으로 submission을 합니다. 제출된 submission 데이터 약 3백만개중 절반은 제출받은 대회 주최측 시스템에서 바로 성능평가를 한 후 RMSE 를 계산하여 Leaderboard에 공개합니다. 예측을 잘한 데이터를 제출한 팀의 순위가 1위에 놓이게 되겠지요. 이 때 결과를 아예 보여주지 않는 ‘test set’이 존재하는데 이렇게 결과를 숨겨놓는 이유는 결과 제출을 계속하면서 Qualifying set으로 성능을 높이는 시도를 차단하기 위한 것으로 실제 대회에서 최종 final score 는 이 숨겨진 결과로 산정합니다.
보통 대회 참가자들은 quiz set과 test set을 나누어서 다루지 않고 결과를 제출하게 되기 때문에 quiz set과 test set의 RMSE는 거의 차이를 보이지 않습니다.

재미있는 대회 진행 과정을 소개하려고 했는데, 널리 알려져 있기도 하고 일반적인 이야기만 하다 (1)편 포스팅은 여기서 마치게 되었습니다. (2)편은 흥미진진 할 예정입니다!!
Netflix Prize에서는 실제 유저 들이 어떤 영화에 어떻게 별점을 주었는지 보여주는 대량의 데이터를 공개했는데 이것도 데이터 과학자들이 흥미를 가질만한 요소였습니다. 또한 대회도 성공적이었기 때문에 이후 유사한 대회가 많이 열리게 되었는데요. 이러한 데이터 마이닝 대회는 대회 주관하는 측에서도 전문적으로 대회 운영을 해야 하는 어려움이 있습니다. 그래서 Kaggle  과 같은 데이터 경쟁을 위한 플랫폼을 제공하는 스타트업이 있고 현재 KDD Cup등 유명한 데이터 마이닝 대회가 Kaggle 을 이용하고 있습니다. 아래 영상으로 이러한 데이터 마이닝 대회가 어떻게 진행되는지 한번 보시는 것도 유익할 것 같습니다.

 

 

Netflix Prize – 다이나믹 했던 알고리즘 대회 바로가기

(2)편(3)편