컴퓨터 공학/알고리즘

👉 [알고리즘] 추천 알고리즘 CF (Collaborative Filtering) 이해

bitcodic 2019. 11. 24. 19:44

국내 영화 추천 알고리즘을 구현한 서비스, 왓챠

 

추천 알고리즘이 대세가 된 시점이다. 유저들은 내가 원하고 좋아하는 아이템을 추천 받는 것을 좋아하며 각종 기업들은 소비자의 니즈를 파악하여 결제까지 연결시키고자 한다. 그 중심에 있는 것이 바로 추천 알고리즘 (Recommendation Algorithm) 이다.

 

넷플릭스 관련 논문 검색 결과

아마도 가장 유명한 추천 알고리즘을 이용한 기업은 넷플릭스나 유튜브가 아닐까 싶다. 내가 본 영상들, 얼마나 오래 봤는지, 추천해줬던 영상들 또한 클릭 했는지.. 등 다양한 데이터를 이용하여 유저들에게 추천하고 계속 서비스에 머무르게 유도한다. 

 

이번에는 이 알고리즘은 어떤 원리로 구현하는지 대표적인 알고리즘으로 정리해보고자 한다.


Collaborative Filtering

협업 필터링은 단어에서 유추할 수 있듯이, 다른 사용자들과의 협업을 통해 구현된다.

 

즉, 다른 유저의 추천 데이터들을 바탕으로 시스템을 구현한다. 사용자들의 데이터를 바탕으로 추천을 구축하는데, 하위 항목으로 아이템 기반 필터링(Item-based Filtering) 과 유저 기반 필터링(User-based Filtering) 으로 구분된다.

 

Source : https://journals.plos.org/plosone/article/figure?id=10.1371/journal.pone.0199748.g002

(좌)유저 기반 필터링의 경우, 추천을 받을 사용자(A)와 유사한 타 사용자(B)를 추천 리스트를 통해 찾아내고 B가 좋아하는 목록 중 아직 A가 경험한 적 없는 아이템을 추천해준다. 좌측 이미지에 해당한다.

 

(우)아이템 기반 필터링의 경우, 아이템들에 대해서 사용자들의 선호도를 기반으로 유사한 아이템을 찾아 추천하는 기법이다. 우측 이미지처럼 User A/C/D 를 통해 유사한 Item 두 가지가 검증되어 해당 아이템을 추천하는 기법이다. 

 

 

어떤 것을 대상으로 추천 행렬을 제작 하는가에 따라 위 사례처럼 구분된다.

 

하지만, CF는 콜드 스타트라는 문제점을 갖고 있다. 기본적으로 타 사용자들의 데이터를 기반으로 추천하기 때문에, 신상품과 같은 아무도 추천 데이터를 쌓지 않는 아이템은 추천을 받을 수 없다. 데이터가 생길때까지 기다리는 수 밖에 없고 그동안은 추천 리스트에 오르지 못 한다는 것이다.

 


 

CF 이외에도 다양한 알고리즘이 있다. 바로 컨텐츠 기반 방식 (Contents based Methods) 와 같은 방법이다.

컨텐츠 기반 방식은 해당 아이템에 대한 사용자들의 선호도가 아닌, 아이템 자체가 갖고 있는 특성에 따라 *유사도를 구하고 이를 토대로 추천하는 방식이다. 

 

* 유사도는 코사인 유사도(Cosine Similarity)나 평균제곱차이(Mean Sqaured Diffrenece) 등 다양한 방법으로 구할 수 있다.

Source : https://medium.com/@tomar.ankur287/content-based-recommender-system-in-python-2e8e94b16b9e

 

위 그림처럼 아이템에 대한 특성에 따라 유사도를 측정하고 이를 기반으로 추천한다. 

 

영화를 예시로 들어보자, 영화 너의 결혼식(2018) 과 건축학개론(2012), 경성학교(2015) 를 Contents-based Methods 로 비교해보자.

 

세 영화의 유사점은 ?

  장르 배우 주제 개봉 연도
건축학개론 로맨스 한가인, 수지 첫사랑 2012
너의 결혼식 로맨스 박보영, 김영광 첫사랑 2018
경성 학교 스릴러 박보영, 엄지원 미스터리 2015

건축학개론 + 너의 결혼식 = [로맨스, 첫사랑, 2010년대 영화]

경성학교 + 너의 결혼식 = [박보영, 2010년대 영화]

 

위와 같은 4가지 요소를 대상으로 유사도를 구했을 때, 건축학개론 + 너의 결혼식 조합이 더 유사도가 크다고 판단한다.

 

컨텐츠 기반 방식은 이러한 아이템이 내재한 특성들을 바탕으로 유사도를 수학적으로 구하여 유사도가 높은 순으로 사용자에게 추천하는 방식이다. TF-IDF 과 같은 방식으로 유사도 판단하는 방식이 널리 쓰인다 카더라.

 

물론 이 또한 단점이 있다. 다양한 아이템에 대한 추천이 힘들다는 것이다. 건축학개론을 좋아하는 사용자지만 사실 마블의 아이언맨을 좋아할 수도 있지 않는가? 혹은 사용자가 사실 "박보영" 이라는 대상 때문에 영화를 높은 추천을 준 경우에 대해서는 추천 받을 확률이 상대적으로 낮아지게 된다. (물론 실무에서는 이러한 다양한 소재들에 대해서 최대한 고려한다!)

 

따라서 요즘 추천 엔진들은 하이브리드 형태로 구축한다.

 


하이브리드형 추천 

다양한 알고리즘들을 섞어 추천 시스템에 이용한다. 대표적으로 컨텐츠 기반 방식과 협업 필터링을 섞는다.

 

머신러닝에도 보면 앙상블(ensemble) 이라는 기법이 있는데 유사한 방식이다. 다양한 모델들을 섞어 최고의 결과를 내는 모델을 쓰는 것으로, 각각의 알고리즘들에 대한 단점을 어느정도 상쇄하면서 추천이 가능하다.

 

사실 이외에도 되게 많은 알고리즘이 존재하는데, 가장 대표적으로 책에서 나오는 알고리즘이다(그만큼 현재 기업에서도 많이 쓰이는 것도 사실이다)

 

다음엔 또 뭘 가져오지.