추천 시스템 알고리즘 - 기존 주요 추천 엔진과 작동 방법


본 글은 Daniil Korbut이 작성한 Recommendation System Algorithms을 동의를 구한 뒤 번역한 글입니다.

오늘날 많은 기업들은 관련성 높은 추천과 수익 창출을 위해 빅데이터를 활용합니다. 데이터 과학자는 다양한 추천 알고리즘 중에서 비즈니스의 한계와 요구 사항에 따라 가장 적합한 알고리즘을 선택해야 합니다.

이 작업을 간단하게 하기 위해서, Statsbot 팀은 주요 추천 시스템 알고리즘에 대한 개요를 준비했습니다.

협업 필터링

협업필터링 (Collaborative filtering, CF)과 관련 파생들은 가장 일반적으로 사용되는 추천 알고리즘입니다. 데이터 과학자 입문자조차도 이력서 프로젝트 같은 것을 위해 개인 영화 추천 시스템을 구축할 수 있습니다.

사용자에게 어떤 것을 추천할 때, 가장 논리적인 방법은 관심도가 가장 유사한 사람들을 찾고, 그 사람들의 행동을 분석해서 사용자에게 같은 항목을 추천하는 것입니다. 또는 사용자가 이전에 샀던 상품과 유사한 상품을 보고, 비슷한 상품을 추천해줄 수도 있습니다.

CF에는 두 가지 기본 접근 방법이 있습니다: 사용자 기반 협업 필터링, 항목 기반 협업 필터링

두 가지 추천 엔진 모두 두 단계를 갖고 있습니다.

  1. 주어진 사용자/항목들에 대해 데이터베이스에서 얼마나 많은 비슷한 사용자/항목을 발견하는지
  2. 다른 사용자/상품을 평가하여, 이 제품과 더 유사한 사용자/항목의 총 가중치를 고려할 때, 사용자에게 어떤 등급을 줄 것인지 예측합니다.

이 알고리즘에서 “가장 유사한”이란 것의 의미는 무엇일까요?

우리는 각 사용자의 선호도 벡터(행렬 R의 행)와 각 상품의 사용자 평점 벡터(행렬 R의 열)를 모두 가지고 있습니다.

Illustration source

가장 먼저, 두 벡터에 우리가 알고 있는 값에 대한 요소만 남겨둡시다.

예를 들어, Bill과 Jane을 비교하고자 한다면 우리는 Bill은 Titanic을 보지 않았고 Jane은 Batman을 아직 보지 않았다는 것을 알 수 있습니다. 따라서, 우리는 Star Wars로만 두 명의 유사도를 구할 수 있습니다. 당연히, 어떻게 Star Wars를 보지 않을 수 있겠습니까? :)

유사도를 측정하는 가장 유명한 방법은 사용자/상품 벡터 간의 코사인 유사도 또는 상관관계 기법입니다. 마지막 단계는 테이블에 빈칸을 채우기 위해 유사도에 따라 가중치 기반 산술 평균을 적용하는 것입니다.

추천 기법을 위한 행렬 분해

다음 흥미로운 접근법은 행렬 분해를 사용하는 것입니다. 일반적으로 행렬 분해는 결과 행렬의 열과 행에 어떤 항목을 놓게 될지 크게 고려하지 않아도 되기 때문에, 매우 우아한 추천 알고리즘입니다. 하지만, 추천 엔진에서 사용할 때는, i번째 사용자의 관심사 벡터는 u, j번째 영화의 매개변수 벡터는 v라는 것을 명확히 알 수 있습니다.

그래서 우리는 uv의 내적(dot product) 함으로써 x(i번째 사용자의 j번째 영화 등급)의 근삿값을 얻을 수 있습니다. 알고 있는 점수들로 벡터를 만들 수 있고, 이를 사용하여 아직 알지 못하는 등급을 예측합니다.

예를 들어, 행렬 분해 후 우리는 Ted의 벡터 (1.4: .9)와 영화 A의 벡터 (1.4; .8)를 갖게 됩니다. 이제는 (1.4; .9)와 (1.4; .8)을 내적(dot product) 계산만 하면 영화 A-Ted의 등급을 복원할 수 있습니다. 그 결과로 2.68 등급을 얻을 수 있습니다.

Illustration source

클러스터링

이전 추천 알고리즘은 비교적 간단하고 소형 시스템에 적절합니다. 지금까지 우리는 지도 기계 학습(supervised machine learning)의 과제로써 추천 문제를 고려했습니다. 이번에는 문제를 해결하기 위해 비지도(unsupervised) 방법을 적용해보려 합니다.

협업 필터링과 행렬 분해를 꽤 오랫동안 동작시켜야 하는 대형 추천 엔진을 구축하고 있다고 상상해보세요. 첫 번째 아이디어는 클러스터링입니다.

비즈니스 초기에는 기존 사용자의 평가가 부족하므로 클러스터링이 가장 좋은 방법입니다.

하지만, 독립적으로는 클러스터링은 조금 약합니다. 사실 우리가 하는 것은 사용자 그룹을 식별하고, 그룹에 있는 각각의 사용자에게 같은 항목을 추천하기 것이기 때문입니다. 충분한 데이터를 갖고 있다면, 협업 필터링에서 연관된 이웃 선택의 폭을 줄이기 위한 첫 번째 단계로 클러스터링을 사용하는 게 유리합니다. 또한, 복잡한 추천 시스템의 성능을 향상할 수 있습니다.

각각의 클러스터는 클러스터에 속한 고객들의 선호도를 기반으로 해서 일반적인 선호도로 정의할 수 있습니다. 각 클러스터의 고객들은 클러스터 단계에 따라 계산된 추천을 받게 됩니다.

딥러닝을 활용한 추천

지난 10년 동안 뉴럴 네트워크는 꽤 큰 도약을 이뤘습니다. 오늘날 다양한 응용 분야에서 적용되고, 고전적인 ML 방법들을 점차 대체하고 있습니다. Youtube에서 딥러닝을 사용하는 접근 방법에 대해 알려드리려 합니다.

규모가 크고, 동적 코퍼스(dynamic corpus)나 관찰이 안 되는 다양한 외부 요인들 때문에 서비스에서 추천을 받는 명백하게 매우 어려운 일입니다.

Deep Neural Networks for YouTube Recommendations” 연구에 따르면, YouTube 추천 시스템 알고리즘은 두 가지의 뉴럴 네트워크로 구성합니다: 하나는 후보를 생성하는 것이고, 다른 하나는 그것을 순위화하는 것입니다. 시간이 충분하지 않을 경우를 대비해 여기에 이 연구의 간략한 요약을 남기려 합니다.

Illustration source

후보 생성 네트워크에서는 사용자의 기록을 입력 이벤트를 사용하여 비디오의 양을 크게 줄이고, 대규모 코퍼스(Corpus)로부터 가장 관련 높은 그룹을 만듭니다. 생성된 후보들은 우리가 등급을 예측하려는 사용자에게 가장 관련되어 있습니다. 이 네트워크는 오직 협업 필터링을 통해서 범용적인 개인화를 제공하려는 목적입니다.

Illustration source

이번 단계에서는 사용자와 유사한 더 작은 후보군을 갖고 있습니다. 여기에서의 목적은 최상의 결정을 할 수 있도록 더욱 신중하게 부호들을 분석하는 것입니다. 이 작업은 비디오 설명 데이터와 사용자 행동 정보를 활용하는 목적 함수(Desired objective function)에 따라 각 비디오에 점수를 할당하는 순위화 네트워크(Ranking Network)를 통해 이뤄집니다.

Illustration source

두 단계 접근 방식을 사용하여, 우리는 비디오의 대규모 코퍼스(Corpus)로부터 비디오 추천을 할 수 있습니다. 하지만 여전히 그 중에서 적은 수만이 개인화되어 사용자를 끌리게 할 것 입니다. 또한, 이러한 설계는 다른 출처들로부터 생성된 후보들을 함께 섞어서 사용할 수 있게 해줍니다.

Illustration source

이러한 추천 작업은 사용자 (U)와 컨텍스트 (C) 기반의 코퍼스(corpus) (V)로부터 수백만 개의 비디오 클래스 (i)의 주어진 시간 t일 때의, 특정 비디오 시청(wt)을 정확하게 분류하는 것으로, 기존의 예측 문제를 극한의 멀티클래스 분류 문제로 제기하게 합니다.

자신만의 추천 시스템을 구성하기 전에 중요한 사항들

  • 만약 대규모의 데이터베이스를 가지고 있고, 온라인으로 추천을 제공하고 싶다면, 이 문제를 작은 두 개의 문제로 나누는 방법이 가장 좋습니다. 1) 상위-N개의 후보를 선정하는 것 2) 선정된 것을 순위화하는 것
  • 모델의 품질을 어떻게 평가하나요? 표준 품질 측정 방법 중에 추천 문제에 특화된 측정 방법들이 있습니다: Recall@k and Precision@k, Average Recall@k, and Average Precision@k. 또한 the great description of metrics for recommendation systems 를 살펴보세요.
  • 분류 알고리즘으로 추천 문제를 해결하고 싶다면, 오답 샘플(negative sample)을 생성하는 것에 대해 고려해야 합니다. 사용자가 추천된 항목을 구매했다면, 정답 샘플(positive sample)로 추가할 뿐만 아니라, 다른 항목들은 오답 샘플(negative sample)도 추가해야 합니다.
  • 알고리즘 품질의 온라인 평가 점수와 오프라인 평가 점수에 관해 고려해보세요. 과거의 데이터 기반의 학습 모델만으로는 새로운 추세와 선호도를 알지 못하기 때문에 원시적인 추천만 유도할 수 있습니다.