10년 전이나 지금이나 모든 플레이어들이 "개인 맞춤형" 컨텐츠의 제공(Personalized Recommendation)이야말로 모바일과 인터넷의 미래라고 말한다. 이것의 의미는 직관적으로 명확하지만 나는 이것을 어떻게 하는지 알지 못하고 보고서 따위에 사용하곤 했다.
그래서 최근 자료를 검색해 보니 빅데이타 분석에 적용하는 추천 알고리즘이라는 것이 대부분 선형대수학에 기초한 "수학적 모델"이라는 것을 알게 되었다.
이 추천 알고리즘이라는 것이 거창해 보이긴 하지만 우리는 어떤 놈이 이전에 어떤 제품을 구매했고, 어떤 영화를 즐겨보고, 어떤 음악을 즐겨 듣는지 알고 있다면 직관적으로 유사한 아이템을 추천해 줄 수 있다. 과거에는 비디오 가게의 점원이나 라디오의 DJ, 도서관 사서, 또는 친구나 지인 등이 이런 일을 해줬다 (휴먼 알고리즘 ?)
반면 S/W 기반의 알고리즘은 m명의 유저(u)가 n개의 아이템(i)에 대한 평가(r)에 관한 거대한 MN 매트릭스(행렬)에서 시작한다. 보통 인기있는 사이트에서 유저는 수백만명이고 아이템은 영화, 음악, 책, 가전제품, 사람 등 수/백만 가지가 존재한다. 그러니 구매기록, 이용로그 등 아이템에 대한 유저의 평가(r) 데이타는 보통 듬성듬성(sparse)하다. 이런 악조건 하에서 시스템은 타겟유저에게 그가 좋아할 만한 아이템의 목록을 만들어서 아름다운 인터페이스로 추천해 줘야 한다.
추천 알고리즘에는 CF계열의1) User Based Collaborative Filtering(CF) 2) Item Based CF 3) Matrix Factorization (행렬분해) 이 존재하고, 컨텐츠 기반의 4) Term Frequency -Inverse Document Frequency 5) 컨텐츠 프로파일링 등이 존재한다.
CF 계열은 유저나 아이템 자체의 속성에는 별로 관심이 없다. 대신 드문드문 이루어지는 유저와 아이템의 인터액션으로 생성되는 평가 매트릭스에만 관심이 있다. 넷플릭스나 아마존은 유저가 누구인지 보다는 지금까지 무엇을 했는지 (User Preference)에 초점을 맞춰 아이템들의 목록을 추천해 준다.
User Based CF는 아이템 구매기록을 활용, 벡터로 표현되는 두 유저간 cosine similarity를 계산하여 특정 유저와 가장 유사한 유저 (nearest user) 그룹을 찾아낸 후 이들이 구입한 아이템 중 이 유저가 아직 구입하지 않은 아이템의 목록을 생성해서 추천해 준다. 여기서 시스템의 추천은 "너랑 억수로 비슷한 길동이가 이것도 샀으니 너도 관심있을거야"라고 고객에게 말하고 있는 셈이다.
Item Based CF는 먼저 구매기록이 많은 아이템들간 유사도를 계산해서가장 비스한 아이템들의 목록을 생성한다. 어떤 유저가 특정 아이템을 얼마나 좋아할지를 이 아이템과 유사한 아이템들에 대한 이 유저의 과거의 평가 데이타를 가중평균해서 합한 값으로 예측한다. 쉽게 말해서 "블레이드 러너"와 "토탈리콜"에 대한 유저의 평가치의 weighted sum으로 이 유저가 아직 보지 않은 가장 유사한 아이템 "Matrix"에 대한 평가치를 예측해서 점수가 높으면 추천해 준다.
요즘 Netflix나 Spotify에서 사용하는 Matrix Factorization은 더 복잡하다. 이른바 행렬분해는 유저와 아이템간 인터액션에 영향을 주는 잠재적 Factor들 또는 Feature들이 존재한다고 가정한다. 음악의 경우 장르나 아티스트 등이 이러한 잠재적 팩터들에 해당한다. 이것은 앞서 n개의 아이템에 대한 m명의 평가 매트릭스를 동일한 multi-dimensional feature로 구성되는 유저벡터와 아이템 백터의 곱(inner product 또는 dot product)으로 분해한다. 즉 어떤 음악에 대한 타겟유저의 평가에 대한 예측치는 벡터로 표시되는 유저별 선호하는 팩터들의 집합(쟝르, 아티스트, 비트 등 f개의 잠재적 팩터들)과 아이템에 내재하는 동일한 팩터들의 집합을 곱한 값과 같다는 것이다.
반면 컨텐츠 기반의 추천은 유저나 아이템의 속성을 분석하여 추천목록을 생성한다. Term Frequency -Inverse Document Frequency는 웹페이지나 뉴스에서 전치사나 be 동사, that과 같은 커넥터 등은 배제하고 의미있는 키워드가 문서에서 몇번이나 반복되는지를 카운트하여 "키워드"를 뽑아낸다. 여러가지 뉴스 중에 "프랑스"와 "테러", "IS"라는 키워드가 많이 등장하는 뉴스들만 모아서 따로 페이지를 만들 수 있다(Google News). 국내 포탈의 뉴스나 박데이타 기반의 연관 키워드 분석 등에 이 방식이 많이 사용될 것 같다. 또한 글로벌 뮤직 스트리밍 서비스를 제공하는 Pandora는 인간의 유전자를 분석하듯이 음악 전문가들이 수만개의 음악 하나 하나에 대해 400여가지 속성(attributes) 값을 수작업으로 정의해서 프로파일링하는 뮤직 게놈 프로젝트를 진행, 이렇게 생성된 거대한 DB를 기반으로 유저별 플레이리스트를 자동으로 생성해 준다.
최근에는 neural network 기법을 활용해서 deep learning해서 더 정확하게 추천해 준다고 하는 무슨 말인지 모르겠다.
이상은 요즘 궁금해서 찾아 본 "개인화된 추천"에 관한 자료를 내가 이해한 방식대로 정리해 보았다. 부디 내가 이해하지도 못하는 말을 여기에 주절거린건 아니길 바란다.