Matrix Factorization 기술을 이용한 넷플릭스 추천 시스템

글쓴이는 인공지능을 제대로 배우기 전 흥미로운 논문을 선택하여 읽어보고 이해한 내용만 작성해보았다. 아직 인공지능 관련 개념이 부족한 상태이기 때문에 작성한 내용에 오류가 있을 수 있음을 미리 알린다.



온라인 스트리밍 서비스인 넷플릭스(Netflix)는 2006년, 자체 콘텐츠 추천 시스템을 향상하기 위해 Netflix Prize competition을 열었다. 이를 위해 17,000편 이상의 영화와 익명의 50만 고객으로부터 추출한 1억 개 이상의 평점 training set을 공개하며 더 나은 추천 시스템을 찾고자 하였다.

이 논문[1]에서는 해당 competition에서 최고의 성적을 거둔 BellKor와 Big Chaos 팀의 Matrix factorization 기술을 이용한 추천 시스템을 다루고 있다.



Netflix Logo [2]



이 시대를 살아가는 소비자들은 자신이 보고 싶은 콘텐츠를 선택하는 데 있어 많은 고민을 하곤 한다. 기존 온라인 콘텐츠 제공자들의 경우 사람들의 서로 다른 입맛을 맞추기 위해 상당한 양의 제품들을 무작정 제공하였는데 이는 특정 콘텐츠에 대한 니즈를 충족시키기에는 한계가 있었다.

그래서 콘텐츠 제공자들은 이후 사용자가 보고 싶어 할 만한 영상을 추천해주는 시스템을 구현하는 데에 관심을 두게 되었다. 이를 이용하여 소비자가 어떤 제품에 흥미를 갖는지 그 패턴을 분석하고, 원하는 콘텐츠를 예측하여 소비자가 원하는 제품을 우선적으로 접할 수 있도록 하는 것을 목표로 삼고 있다.

우선, 기존에 존재하는 추천 시스템의 경우 두 가지 방법을 기반으로 동작한다. 그 방법에는 content filtering과 collaborative filtering이 있다.


Content filtering (콘텐츠 필터링)은 개인화 수준을 목표로 하여 개개인의 선호도와 제품의 콘텐츠 등을 고려하여 추천하는 방식이다 [3]. 이 방식에서는 각 사용자 혹은 제품의 본성 자체를 특정(characterize) 하기 위해 먼저 프로필을 생성한다. 예를 들어, 영화라는 프로필의 경우 장르, 등장하는 배우, 인기도 등의 요소들이 포함될 수 있는 것이다. 이러한 프로필은 시스템이 유저와 제품 간 서로 매칭 시킬 수 있도록 도움을 준다.

이 content filtering으로 유명한 것 중 하나로 Music Genome Project가 있다. 이 프로젝트에서는 전문 음악 분석가들이 수백 개의 서로 다른 음악적 특성을 기반으로 노래를 평가하게 된다. 이러한 특성들은 음악적 identity를 가지는 것뿐만 아니라 듣는 사람의 음악적 선호도 또한 파악할 수 있는 지표가 된다.


Content filtering의 대안으로, 이전 사용자의 행동에 의존하는 방식이 있다. 이 접근 방법은 Collaborative filtering (협업 필터링)이라고 하는데 이는 사용자와 제품 간 상호 의존적 관계를 분석하여 새로운 user-item 관계를 만들어가는 방식이다. 또한, 많은 사용자들로부터 얻은 기호 정보(taste information)에 따라 사용자들의 관심사를 자동적으로 예측하게 해주는 방법이라고도 할 수 있다 [4].



Collaborative Filtering

Collaborative filtering에는 두 가지 primary area가 있다. 하나는 neighborhood method이고, 다른 하나는 latent factor models이다.

Neighborhood method는 항목들 간의 관계 혹은 유저들 간의 관계를 중점적으로 계산하는 방식이다. 이러한 접근 방식은 동일한 유저가 인접한 항목의 등급을 가지고 선호도를 평가하게 되는 것이다. 아래 [그림 1]을 통해 해당 방식에 대해 자세히 알아보자.



[그림 1] 사용자 중심의 neighborhood method



[그림 1]에서 볼 수 있는 것처럼 Joe는 왼쪽에 있는 3편의 영화를 좋아한다. 이 영화들은 각각 전쟁과 관련된 내용이며, 시스템은 Joe가 좋아할 만한 또 다른 영화를 추천해주기 위해 이 3가지 영화를 선택한 인접한 사용자들을 찾아 들여다보게 된다. 이 때, 같은 영화를 선택한 사용자들을 기준으로 그들 간의 또 다른 공통점을 찾아 가장 선택을 많이 받은 영화를 순서대로 확인하게 된다. [그림 1]에서는 Joe가 좋아하는 영화를 똑같이 좋아한다고 선택한 사용자들 모두가 #1번 영화를 선택했기 때문에 가장 먼저 추천해주고 그 다음으로 나머지 영화들을 순서대로 보여준다.


Latent factor models (잠재 요인 모델)는 예를 들어, 평가 등급 패턴에서 유추된 20~100가지 요인에 대해 항목과 사용자 모두를 특성화함으로써 등급을 설명하려는 대안적 접근방식이다. 영화를 예로 들어 보면, 코미디 vs 드라마, 액션의 정도, 어린이에 대한 방침 결정 등과 같은 명백한 관점 혹은 지수뿐만 아니라 캐릭터 발달의 깊이 또는 완전히 설명하기 어려운 관점 등과 같은 잘 정의되지 않은 부분들까지도 측정할 수 있다. 이러한 각 요인들은 사용자들에게 해당 영화의 요소 중 높은 점수를 받는 영화를 얼마나 좋아하는지 측정할 수 있게 한다. 이와 관련된 내용은 [그림 2]를 통해 확인해보자.



[그림 2] latent factor 방법에 관한 예시



[그림 2]에서는 이러한 아이디어를 2차원 상에서 설명하고 있다. 예시에서는 각 차원을 남자(males)와 여자(females) 하나와 매사에 진지하고 지향적인 사람(serious)과 현실 도피적인 사람(escapist)으로 나누었다. 이 모델의 경우, 영화 평균 등급에 대한 사용자의 예상 등급은 그래프 상에서 영화와 사용자의 위치의 스칼라곱(내적)[5]으로 계산할 수 있다고 설명한다. 예를 들어, 우리는 Gus가 Dumb and Dumber를 좋아하고 The Color Purple은 싫어하며, Braveheart는 중간 정도 되리라고 예상해 볼 수 있다.

추천 시스템 방법 중 content filtering과 collaborative filtering에 대해서 자세히 알아봤으니 이제 이 논문에서 제시하는 matrix factorization techniques에 대해서도 알아보자.



Matrix Factorization Techniques

Matrix factorization (행렬 인수분해) 모델은 전형적인 nearest-neighbor(최근접 이웃) 기술보다 추천을 위한 부분에 있어 더 월등하다고 설명한다. 또한, 대부분의 성공적인 형태의 latent factor models는 matrix factorization을 기반으로 하고 있다라고도 언급하고 있다.

이 Matrix factorization은 항목 등급 패턴으로부터 유추된 요소 벡터에 의해 항목과 사용자 모두를 특성화한다. 이러한 접근 방식을 통해 항목과 사용자 요인 간 높은 일치성을 보이는 것이 다음에 추천할 자료로 이어지는 것이다.

추천 시스템은 여러 가지 서로 다른 유형의 입력 데이터에 의존할 수밖에 없는 구조를 가지고 있는데, 사실상 평가를 하는 항목에 대해 퀄리티가 좋은 명시적 피드백을 많이 받을수록 추천 가능성은 더욱더 높아진다. 하지만 대부분의 경우 사용자에 의해 제대로 평가되지 않기 때문에 matrix가 구성될 때 대부분의 값이 0인 sparse matrix(희소 행렬)[6]가 만들어지기도 한다.

그래도 이 matrix factorization 자체의 강점을 보면 추가적인 정보를 통합할 수 있다는 점이 있다. Explicit feedback(명시적 피드백)을 이용할 수 없는 경우에는 추천 시스템이 implicit feedback(내재된 혹은 암묵적인 피드백)을 사용하여 사용자의 선호도를 유추해나간다. 이는 추적 및 검색 기록, 검색 패턴, 심지어는 마우스의 움직임까지를 포함하여 사용자의 행동을 관찰함으로써 간접적으로 의견을 반영해준다.



Semi-Conclusion

위에서부터 복잡하게 이야기했지만 실제로는 비교적 간단한 개념으로 이루어진다. 정리해보면, Matrix factorization 모델의 목적은 user-item 행렬 간 아직 평가되지 않은 빈 공간을 유추해서 채워나간 후 이 지표를 가지고 다음 콘텐츠를 추천해주는 것이다.

영화와 사용자를 기준으로 통합된 행렬 내에 평가 지표(rating score)를 기입하고 아직 평가되지 않은 비어있는 공간 즉, 사용자의 영화 선호 가능성을 예측할 수 있는 부분을 파악하기 위해 행렬을 분해하는 과정을 거친다. 분해된 행렬을 가지고 특정 사용자의 선호도와 유사성을 보이는 또 다른 사용자를 발견하게 되면 해당 값이 그 값과 근접할 것이라고 유추하며 빈 공간에 해당 값을 집어넣고 추천 시스템을 위의 사용자에게 적용하는 것이다.

이 논문에서 설명하고 있는 실질적인 이론에 대한 결론은 이미 나온 것이나 다름이 없다. 이 뒤부터는 관련 수식들이 나오는데 이 글에서는 basic matrix factorization model만 간단히 살펴보고 그것으로 바로 마무리할 예정이다. 그 외 adding biases, additional input sources, inputs with varying confidence levels 등은 추가적으로 더 봐야할 부분이다. Matrix factorization과 관련된 글을 다시 쓰게 된다면 그때 관련 내용을 다시 한번 언급하도록 하겠다.



Basic Matrix Factorization Model


아래의 내용은 대부분의 내용을 직역하여 이해되지 않는 내용이 많을 수 있다.



Matrix factorization 모델은 사용자와 항목을 f라는 joint latent factor(공동의 잠재 요인) 공간에 매핑하여 user-item 간 상호작용이 해당 공간의 내부 제품으로 모델링 되도록 한다. 이에 따라 각 항목 i는 q_i ∈ ℝ^f와 연관되며, 각 사용자 u는 p_u ∈ ℝ^f와 연관되어 있다.

주어진 항목 i에 대하여 q_i의 원소들은 어떤 항목이 양수 또는 음수 요인들을 갖는지 측정한다.

사용자 u의 경우, p_u의 요소는 해당 요인에 높은 일치성을 보이는 항목에서 사용자가 가지는 관심의 정도를 다시 양수 또는 음수로 측정한다. 스칼라곱의 결과인 q_i^T * p_u(T는 전치 행렬)는 사용자 u와 항목 i 사이의 상호작용 즉, 항목의 특성에 대한 사용자의 전체적인 관심을 포착해낸다. 이는 r_ui로 표기되는 항목 i에 대한 사용자 u의 등급에 대해 계산한 근사치로 아래 수식과 같이 나타내어 추정할 수 있다.





주요한 과제는 q_i, p_u ∈ ℝ^f를 인자화하기 위해 각 항목과 사용자의 매핑을 계산하는 것이다. 추천 시스템이 이 매핑을 완료한 이후 위의 수식을 사용하여 사용자가 어떤 항목에 등급을 부여할 것인지 쉽게 결정할 수 있다.

그러한 모델은 정보를 검색하는 데 있어 latent semantic factors(잠재적 의미 인자)를 식별하기 위해 잘 확립된 기술인 singular value decomposition(SVD)과 밀접하게 관련되어 있다. Collaborative filtering 도메인에 SVD를 적용하려면 사용자 항목 등급 행렬을 고려해야 한다. 이는 종종 사용자 항목 등급 행렬에서 희소성 혹은 결측 값(NA)의 높은 가능성으로 인해 어려움을 야기한다. 전통적인 SVD는 행렬에 대한 지식이 불완전할 때 정의되지 않는다. 게다가 상대적으로 적은 수의 항목만을 부주의하게 다루면 overfitting(과적합) 하기 쉽다.

이전의 시스템은 누락된 등급을 채우고 등급 행렬을 밀도 있게 만들기 위해 귀속화에 의존했다. 그러나 귀속은 데이터의 양을 크게 증가시키기 때문에 비용적인 측면에서 매우 비쌀 수 있다. 또한 부정확한 귀속은 데이터를 상당히 왜곡시킬 수도 있다. 최근의 연구는 정규화된 모델을 통해 overfitting(과적합)을 피하면서 관측된 등급만을 직접 모델링할 것을 제안하고 있다. 인자 벡터(p_u 및 q_i)를 학습하기 위해 시스템은 알려진 등급 집합에서 정규화된 제곱 오차를 최소화한다.





여기서 κ는 r_ui가 알려진 (u, i) 쌍들의 집합이다 (training set).

시스템은 이전에 관측된 등급을 fitting 함으로써 모델을 학습한다. 하지만 그 목표는 알려지지 않은 미래의 평가 등급을 예측하는 방식으로 이전 등급을 일반화하는 것이다. 따라서 시스템은 학습된 크기가 불이익을 받는 매개변수를 정규화하여 관측된 데이터에 overfitting 하는 것을 방지해야 한다. 상수 λ는 정규화의 범위를 제어하며 보통 교차 검증에 의해 결정된다.




[그림 3] Netflix Prize 데이터의 행렬 분해 과정에서 나온 첫 두 벡터 값 / 선정된 영화는 2차원의 요인 벡터를 기반으로 적절한 위치에 배치 되었다. Plot은 여성 주인공이 강한 영화 군집, 우애 유머, 기발한 독립영화 등 뚜렷한 장르를 보여준다.



[그림 4] Matrix factorization 모델의 정확도 / 그림에는 네 가지 개별 요인 모델 각각에 대한 평균 제곱근 오차가 표시되어 있다 (낮은 것이 좋다). 정확도는 요인 모델의 치수가 증가할 때 향상된다. 또한 보다 뚜렷한 매개변수 집합을 포함하는 정교한 인자 모델은 더 정확하다고 볼 수 있다. 비교를 위해 넷플릭스 시스템은 동일한 데이터 집합에서 RMSE = 0.9514를 달성한 반면, 대상의 필수 정확도는 RMSE = 0.8563였다.



RMSE (Root Mean Square Error, 평균 제곱근 오차): 추정 값 또는 모델이 예측한 값과 실제 환경에서 관찰되는 값의 차이를 다룰 때 흔히 사용하는 측도이다. 정밀도(precision)를 표현하는데 적합하다. 각각의 차이값은 잔차(residual)라고도 하며, 평균 제곱근 편차는 잔차들을 하나의 측도로 종합할 때 사용된다 [7].



Reference

[1] Y. Koren, R. Bell and C. Volinsky, “Matrix Factorization Techniques for Recommender Systems”, 2009

[2] Netflix Brand Assets (Logo), https://brand.netflix.com/en/assets/

[3] Contents Based Filtering, http://wiki.hash.kr/index.php/%EC%BD%98%ED%85%90%EC%B8%A0_%EA%B8%B0%EB%B0%98_%ED%95%84%ED%84%B0%EB%A7%81

[4] Collaborative Filtering, https://ko.wikipedia.org/wiki/%ED%98%91%EC%97%85_%ED%95%84%ED%84%B0%EB%A7%81

[5] 스칼라곱, https://ko.wikipedia.org/wiki/%EC%8A%A4%EC%B9%BC%EB%9D%BC%EA%B3%B1

[6] 희소 행렬, https://ko.wikipedia.org/wiki/%ED%9D%AC%EC%86%8C%ED%96%89%EB%A0%AC

[7] RMSE (평균 제곱근 오차), https://ko.wikipedia.org/wiki/%ED%8F%89%EA%B7%A0_%EC%A0%9C%EA%B3%B1%EA%B7%BC_%ED%8E%B8%EC%B0%A8



CURG 원본 링크: https://medium.com/curg/matrix-factorization-%EA%B8%B0%EC%88%A0%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%84%B7%ED%94%8C%EB%A6%AD%EC%8A%A4-%EC%B6%94%EC%B2%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-7455a40ad527

Matrix Factorization 기술을 이용한 넷플릭스 추천 시스템

https://y8ncastle.world/2020/06/07/curg/ai/matrix-factorization/

Author

Alec J

Posted on

2020-06-07

Updated on

2021-02-09

Licensed under