추천 시스템 분석 – 어떻게 아마존과 넷플릭스가 당신의 취향을 예상하는가?

By | 2014-11-06

들어가기전

추천분야는 1990년대에 시작된 이후 지금까지 꾸준히 발전 해오고 있습니다. 비교적 조잡하고 부정확한 형태로부터 시작했지만, 데이타가 다양하고 많아질 수록 더욱 발전하였고 그러한 데이터와 함께 혁신적인 알고리즘을 덧붙여 갔습니다. 이러한 추천시스템은 현재 아마존 상품 추천, 넷플릭스 영화추천, 페이스북의 친구 추천 등 대형 서비스와 함께 지속적으로 영역이 확대되어 가며 점점 중요성이 높아지고 있습니다. 또한 대학들은 이러한 추천을 정규 코스로 추진 해가고 있으며, 휴대폰 회사들은 다른 이통사로 이탈확률이 높은 고객들을 예측하기 위해 사용하기도 합니다.

이러한 추천의 배경이 무엇인지 살펴보도록 하겠습니다.

 [추천 효과]

  • Netflix : 대여되는 영화의 2/3가 추천으로부터 발생
  • Google News : 38% 이상의 조회가 추천에 의해 발생
  • Amazon : 판매의 35% 가 추천으로부터 발생
  • Netflix Prize (~2009) Netflix에서 주관하는 경연대회로, 영화 선호도를 가장 잘 예측하는 협업 필터링 알고리즘에 수상 (US$1,000,000)

협업 필터링(Collaborative filtering)

이런 추천의 근간이 되는 유사점을 분류하는 방식에 협업 필터링 이라 불리는 방법이 존재 합니다. 사전에 누적된 대규모의 데이터를 활용하여 이를 분류하고 분류된 데이터의 기준을 기반으로 새로운 데이터에 대입하여 분류하는 방법 입니다. 이러한 협업 필터링의 분류 기준은 대표적으로 두 가지가 존재합니다.

 

cf_base[출처 :Deconstructing Recommender Systems by JOSEPH A. KONSTAN, JOHN RIEDL  /  OCTOBER 2012]

사용자 기반(user-user)

두 사용자의 공통된 아이템을 기반으로 얼마나 많이 일치하는지 거리를 수치화하는 방법을 사용합니다. 예를 들어, 짐과 제인이 각각 트론이라는 영화에 5점을 입력하였다면, 그 둘 사이의 거리는 0입니다. 반면, 한명은 5 점, 나머지 한명은 3점을 입력하였다면 거리는 증가하게 됩니다. 이러한 사용자간의 유사도를 활용하여 추천하는 방식이 사용자 기반이라고 볼 수 있겠습니다. 그러나, 사용자 기반의 필터링은 공통점을 이끌어내는 것이 쉽지 않다는 문제점이 존재합니다. 사용자 간의 공통점이 추천에 활용할 수 없을 많큼 데이터가 부족할 수 있기 때문입니다. 한가지 예를 들면, 대부분의 사람들은 블록버스터 영화에 선호도가 집중하는 경향이 있습니다. 대부분의 데이터가 블록 버스터 영화에만 데이터가 몰려있기 때문에 추천의 결과가 모든 사용자들에게 동일한 현상이 발생할 확률이 높으며, 이는 추천에 대해 무의미한 결과를 가져오기도 합니다. 또는 웹사이트를 기준으로 볼 때 어떤 페이지의 특정 부분을 클릭하는데 많은 시간이 걸리기 때문에 데이터 수집 자체에 어려움을 겪을 수도 있습니다. 간단한 설명이라 부족한 점이 있지만, 추천에 있어 적절한 데이터 양의 부족으로 인해 공통요소(분류기준)을 분류한다는 게 아주 단순하다고는 볼 수 없습니다. 이를 보완할 수 있는 방법 중 하나가 아이템 기반이라 할 수 있습니다.

아이템 기반 (item-item)

오늘날 대부분의 추천시스템은 사용자 기반 대신 아이템 간의 거리를 사용하는 아이템 기반을 활용합니다. 넷플릭스와 아마존이 세부적인 내용은 공개하진 않지만, 아이템 기반의 다양한 알고리즘을 사용한다고 공개적으로 언급하고 있습니다. 아이템 기반에 대해 예를 들어 설명을 간략히 하면, 톰클랜시의 책을 좋아하는 사람들이 Clive Cussler의 책도 아주 좋아한다면,Clancy 와 Cussler는 아주 가깝다고 볼 수 있습니다. 즉, 사용자기반과 동일하게 유사도를 기준으로 아이템 간의 거리를 측정한 후 유사한 아이템을 추천하는 방식을 취한다고 볼 수 있습니다. 대부분 사용자대비 아이템이 적은 수를 차지하고 있기 때문에 아이템을 기준으로 볼 때 아주 다양한 관계 데이터가 발생할 확률이 높다고 볼 수 있습니다. 이러한 방식은 데이터가 누적 될수록 추천의 정확도가 높일 수 있는 가능성이 있습니다.

참고로, 원하는 전화번호를 쉽게 찾아 전화 할 수 있는 대표적인 114전국전화 앱에서도 아이템 기반의 분석을 통해, 추천 검색어, 검색품질 개선에 사용되고 있습니다.

문제점

비율의 일관성(inconsistency of ratings)

위에서 언급된 두 가지 방식을 사용한다고 해도 여러 가지 추가적인 문제점이 존재합니다. 우선 첫 번째로 비율의 일관성 문제입니다. 다시 말해, 같은 아이템에 같은 방법일 지라도 재측정시 값이 변할 수 있으며, 원인은 사용자의 취향이라는게 항상 고정되어 있는 것이 아니기 때문입니다. 1990년대 후반에 MIT에서 진행한 한 실험은 하나의 원본 비율이 1년후 7가지 형태로 변화될 수 있음을 증명한 사례가 있다고 합니다. 이렇듯 축적된 데이터라고 하더라도 여러 가지 요인에 의해 변동이 가능하다는 사실은 염두해야만 합니다.

유사 아이템 추천

추가적으로 사용자 및 아이템 기반의 알고리즘은 일관성보다 더욱 큰 문제가 존재합니다. 적용 기준이 엄격하기 때문에, 동일한 아이템이 아닌 유사한 아이템을 기반으로는 적용 불가하다는 것입니다. 예를 들어 설명하자면, 모네의 수련 그림에 대한 팬이라고 가정 봅시다. 250 개의 작품 중 사용자마다 정말 좋아하거나 또는 좋아하지 않는 작품이 존재할 수 있습니다. 이러한 상세 취향은 기본 알고리즘만 가지고는 각자 그들의 취향을 알수 없습니다. 그래서 이러한 유사취향 문제를 해결할 수 있는 차원 축소라 불리는 방법이 존재합니다. 이 방법은 사용자 아이템 기반의 알고리즘보다는 많은 계산량이 요구되기 때문에 실제 적용하기까지 상당한 시간이 소요됐지만, 컴퓨터의 성능이 나날이 발전함에 따라 적용 가능하게 됐습니다.

차원축소(dimensionality reduction)

차원축소를 이해하기 위해 다른 수많은 사람들과 음식 취향을 비교하는 것으로 예를 들어보겠습니다. 거대한 메트릭스로 취향을 표현할 수 있습니다. 각각의 사람들의 취향과 수천 가지 음식을 표로 만들어볼 수 있습니다. gave grille 5점, braised short rib 4.5점, s, fried chicken wing 2점, cold tofu rolls 1점, roasted portobello mushroom 5점, steamed edamame with sea salt 4점 등… 이렇게 각각의 음식에 대해 점수를 부여한 데이터를 기반으로, 추상화 단계를 거쳐 (예를들어, 짠 음식, 생선요리 등) 유사한 기준으로 분류한 후, 새로운 아이템을 유사도 분류 기준에 대입하여 적용하면 어느 정도 같은 취향으로 분류가 가능하게 됩니다.

이러한 차원 축소를 적용한 추천은 상세한, 특정 음식에 대한 점수가 그리 큰 영향을 미치지는 않습니다. 그렇지만 다양한 음식에 대해 차원 감소를 적용함으로써 발생하는 일반화 현상은 이해하고 있어야 합니다.  예를 들면, beef, salty things, and grilled dishes는 좋아한다로 정의 될수 있고, chicken and anything fried는 싫어한다로 정의 될 수 있으며, vegetable은 보통으로 정의될 수 있습니다. 이러한 형태로 축소 시 약 50에서 100개의 차원으로 축소가 가능하게 되며, 차원을 보는 것만으로도 ,추천자는 새로운 음식이 속하는 범위를 빠르게 결정하는 게 가능하게 됩니다. 이는 아직 분류되지 않은 유사한 아이템을 특정 사용자에게 추천할 수 있게 하는 더욱 일반화된 방법이라고 볼 수 있습니다. 차원 축소가 많이 적용될 수록 추천이 더욱 효율적이라 할 수 있으며, 이러한 차원 축소를 적용하기 위해 사용되는 방법중 특이값 분해 (Singular Value Decomposition, SVD)를 사용할 수 있습니다.

추가 고려 사항

지금까지 추천의 기본적인 배경지식에 대해 살펴보았습니다. 추가적으로 알아두어야 할 몇 가지 부분을 좀 더 알아보도록 하겠습니다.

만약, 이메일로 어떤 물건을 추천한다고 가정해 봅시다. 사용자가 이메일을 확인 후 쓸모 없는 내용이라 판단된다면, 그리고 이런 결과가 지속적으로 반복된다면, 사용자로부터 신뢰를 잃을 것이며, 스팸으로 분류되어 사용자에게 어떠한 정보도 전달할 수 없는 상태로 이어질 수 있습니다. 이렇듯 정확한 정보를 전달하는 것은 매우 중요한 요소이며, 정확한 정보 전달 이후에 사용자와 판매자 둘 다 이익이 발생해야 한다는 것입니다.

정확성

정확한 추천이 어떻게 이루어 질 수 있는지 아마존의 온라인 스토어를 예를 들어 설명해보도록 하겠습니다.

아마존은 사용자에게 적절한 추천을 하기 위해 몇가지 방법으로 사용자의 성향을 파악합니다. 대부분 사용자가 해당 페이지에 접근한 후 활동한 내역들을 기반으로 한다고 볼 수 있습니다. 예를 들면 제품에 대한 별점 적용 수치, 방문한 페이지중 상세페이지까지 확인했는지, 반복해서 접속한 페이지, 구매 의향이 있는지, 실제 제품을 구매했는지, 동일한 세션 안에서 확인했던 목록 정보등, 클릭 했던 모든 사용자 행동을 기반으로 성향을 파악합니다. 이런 모든 사용자 데이터를 차후에 활용하기 위해 모아 둘 것입니다. 심지어 로그인 하지 않은 사용자 데이터까지 모아서 활용하기도 합니다. 이런 대량의 데이터 수집 활동은 온라인 스토어에서만 이루어지는 것이 아니며, 월마트와 같은 곳에서도 사용자 영수증 데이터(구매목록)를 활용 중에 있습니다. 나아가 전세계에서 지금도 진행되고 있는 중입니다. 단 유럽의 경우 법적으로 데이터 수집 범위에 따라 제약을 받을 수 있습니다.

business rules

시스템이 잘못된 추천을 방지하고 사용자의 신뢰를 잃지 않으며 판매자의 수익을 최고로 하기 위해 추가 적용된 부분이 business rules입니다. 예를 들어, 비틀즈와 같은 유명한 음악가들의 앨범을 모든 방문자에게 추천을 하고 있다고 가정해 보면, 통계적으로 옳은 수치가 적용됐다고 볼 수 있지만, 실제 구매는 거의 이루어지지 않을 가능성이 있습니다. 모든 방문자들이 앨범에 대해 실제 높은 별점을 부여하기는 하지만 대부분 앨범을 소유했기 때문입니다. 또 하나의 예로, Netflix의 영화추천 시스템의 사례를 설명하면 액션 영화를 좋아하는 사람에게 The Avengers(액션영화) 라는 영화를 추천할 수도 있습니다. 그러나 실제론 Netflix에서는 대여 불가 항목 이라면, 추천해야 될 영화 일지라도 서비스에서 허용하는 한계를 고려하고, 이러한 점들이 시스템에 당연히 반영되야 할 것입니다. 그리고 기타 비즈니스적인 요인들이 접목 되어야할 부분은 각 서비스별로 무수히 존재할 것이며 이를 잘 반영해야 된다는 점은 중요한 부분이라 생각 됩니다.

 

지막으로 추천시스템을  검토 중이라면 아래 오픈소스들을 활용해보는 것을 추천 합니다.

참고로, kth 데이터지능팀의 대용량 실시간 분석 솔루션인 DAISY(Data Intelligence System)에서는 Apache Mahout 기반으로 추천엔진을 구성하고 있습니다!

Software Description Language URL
Apache Mahout Machine learning library includes collaborative filtering Java http://mahout.apache.org
Cofi Collaborative filtering library Java http://www.nongun.org/cofi
Crab Components to create recommender systems Python https://github.com/muricoca/crab
easyrec Recommender for Web pages Java http://easyrec.org
LensKit Collaborative filtering algorithms from CroupLens Rearch Java http://lenskit.grouplens.org
MyMediaLite Recommender system algorithms C#/Mono http://mloss.org/software/view/282
SVDFeature Toolkit for featurebased matrix factorization C++ http://mloss.org/software/view/333
Vogo PHP LIB Collaborative filtering engine for personalizing web sites PHP http://sourceforge.net/projects/vogoo