본문 바로가기

갈아먹는 추천 알고리즘 [1] 추천 알고리즘의 종류

들어가며


우리는 알게 모르게 매일 추천 알고리즘 속에서 살고 있습니다.

다양한 서비스들은 용케도 내가 좋아할 만한 동영상을, 웹 툰을, 페이스북 친구를, 심지어 소개팅 상대까지 추천 해줍니다. 



(정말 다양한 추천 서비스들)


하지만 도대체, 어떻게, How??? 이런 서비스들은 신통방통하게 

내가 가려운 구석만 속속 골라서 긁어줄 수 있는 것일까요?

정확히 추천이란 무엇이고 어떻게 이루어지는 걸까요?


이 글에서는 먼저 추천의 개념을 소개하고, 대표적인 추천 알고리즘의 종류와 개념을 소개합니다.

이어지는 글 들에서는 추천이 구현되는 수학적 원리를 쉽고 상세하게 설명해보고자 합니다.



추천이란?


추천이란 데이터를 통해서 사용자가 아직 소비하지 않은 아이템 (ex. 영화) 중 선호할 만한 것을 예측하는 것을 말합니다.

대표적인 추천 알고리즘으로는 Contents Based FilteringCollaborative Filtering이 있습니다.


많은 자료들이 이름 때문인지, 기존에 좋아했던 아이템과 성격이 비슷한 아이템을 추천하면 Contents Based Filtering,

성격이 비슷한 다른 사람이 좋아하는 아이템을 추천하면 Collaborated Filtering 이라 잘못 구분합니다.


하지만 두 알고리즘 모두 아이템을 기준으로 할 수도 있고 사용자를 기준으로 할 수도 있습니다.

두 알고리즘은 사람이 기준인지, 아이템이 기준인지가 아니라

어느 데이터를 사용하느냐에 따라서 구분됩니다.



Contents Based Filtering

사용자 혹은 아이템에 대한 프로필 데이터를 가지고

내가 좋아했던 아이템과 비슷한 유형의 아이템을 추천하거나

나와 비슷한 유형의 사람이 좋아하는 아이템을 추천


Contents Based Filtering 에서는 각각의 사용자와 아이템에 대하여 프로필을 작성하고, 이를 기반으로 추천을 합니다. [1]

영화 추천을 예시로 들어보면, 먼저 사용자에 대해서 성별, 연령대, 지역 등의 프로필을 작성할 수 있습니다.

나와 프로필이 비슷한 다른 사용자가 선호하는 영화를 추천해주는 방식입니다. (user-based recommendation)


다음으로 영화는 장르, 출연하는 배우들, 흥행 여부 등의 프로필을 작성할 수 있습니다.

이를 기반으로 특정 영화를 좋아했던 사용자에게 비슷한 영화를 추천합니다. (item-based recommendation)



하지만 이런 방식은 데이터 셋을 구성하기가 매우 어려운 한계가 있습니다.

영화를 예시로 들어보면 수백만편의 영화에 대하여 일일이 프로필을 작성하는 것은 많은 시간과 비용이 들어갑니다.


또한 프로필 데이터 작성 시에 주관성이 개입하는 문제가 있습니다.

어떤 영화가 폭력적이라거나, 로맨틱하다라는 정보는 개인의 주관에 영향을 받습니다.

따라서 이러한 정보를 사람이 일일이 입력하여 프로필 데이터를 구성하게 되면, 추천의 객관성이 떨어지게 됩니다.


Colloabrative Filtering

내가 남긴 평점 데이터를 가지고

나와 취향이 비슷한 사람이 선호하는 아이템을 추천


Collaborative Filtering에서는 프로필 데이터 없이, 사용자의 과거 행동 데이터만 가지고 추천을 진행합니다. [2]

왓챠를 떠올려보면 사용자는 자신이 본 영화들에 대해서 1점부터 5점까지 평점을 남깁니다.

이제 이 평점들을 가지고 사용자의 취향을 파악한 뒤, 선호할 만한 영화를 추천해주는 방식입니다..

(아직 이 과정이 마법처럼 보이지만, 잠시 뒤에 스텝 바이 스텝으로 설명할 예정입니다.)


이 방식의 장점은 도메인에 제약없이 데이터 셋을 쌓기가 쉽다는 것입니다.

또한 일반적으로 Contents Based Filtering 보다 더 정확하다고 알려져 있습니다.


하지만 신규 사용자의 경우, 관찰된 행동 데이터가 없거나 적습니다.

이런 경우 추천의 정확도가 급격히 떨어지는 Cold start 문제가 발생합니다.



Hybrid Filtering


둘 다 문제가 있으니, 

이 둘을 섞어서 사용해보자!


Contents Based Filtering과 Collaborative Filtering 모두 각각의 한계점이 있었습니다.
떄문에 이러한 문제점을 극복하고자 이 둘을 함께 사용하는 Hybrid Filtering 기법이 등장합니다.

두 가지 알고리즘을 모두 적용하고, 이의 가중 평균(Weighted Average)를 구하는 Combining Filtering 기법, 
평점 데이터와 아이템 프로필을 조합하여 사용자 프로필을 만들어 추천하는 Collaboration via Content 기법 등이 있습니다.[3]

한편 실제 서비스에서는 데이터가 일정 수 이상 쌓이는 시점을 기준으로 추천 알고리즘을 다르게 적용하기도 합니다.
중국의 컨텐츠 추천 서비스, 진 르 터우탸오는 가입 후 일정 데이터가 쌓이기 전까지는 contents based 추천을, 

사용 기록이 어느 정도 쌓인 이후에는 collaborative filtering을 사용한다고 합니다. [4]



어느 추천 알고리즘을 사용할 것인가?


정답은 없습니다만, 일반적으로 충분한 양의 평점 데이터가 주어질 경우 

Collaborative Filtering이 Contents Based Filtering 보다 더 정확하다고 알려져있습니다. 

넷 플릭스가 100만 달러의 상금을 걸고 주최하는 영화 추천 경연대회에서도 

역시 Collaboraive Filtering 기반의 알고리즘들이 매년 우승을 거두었습니다. [5]


Collaborative Filtering 알고리즘은 다양한 분야로 응용이 가능합니다.

클릭 로그를 일종의 평점으로 간주하여 인터넷 쇼핑몰 상에서의 상품 추천을 구현할 수 있습니다.

TV 프로그램 시청 시간을 평점으로 간주하여 IPTV 상의 컨텐츠 추천도 구현할 수 있습니다.


하지만 어떻게 평점 데이터만을 가지고 이러한 마법같은 일이 가능한 것일까요?

이어지는 글에서는 Collaborative Filtering 문제를 푸는 세부 알고리즘들을 소개합니다.

그리고 그 중 한 가지인 Matrix Factorization과 Alternating Least Squares 알고리즘을 하나씩 뜯어보겠습니다.


궁금하신 점이 있거나, 사실과 다른 내용이 있을 경우 댓글, 혹은 이메일을 남겨주세요.

감사합니다 :)


Reference

[1] Contents Based Filtering, http://recommender-systems.org/hybrid-recommender-systems/

[2] Y. Hu et al, Collaborative Filtering for Implicit Feedback Datasets, IEEE 2008

[3] Hybrid Filtering, http://recommender-systems.org/hybrid-recommender-systems/

[4] Y-combinator, The hidden force behind toutiao, https://blog.ycombinator.com/the-hidden-forces-behind-toutiao-chinas-content-king/

[5] wikipedia, Netflix prize, https://en.wikipedia.org/wiki/Netflix_Prize