추천 시스템

Collaborative Filtering

망나 2018. 9. 15. 18:34

Recommendation



Reference : here



  추천 시스템은 우리의 삶에 아주 밀접하게 존재하며, 추천 시스템을 활용하는 서비스를 쉽게 찾을 수 있습니다. 우리들은 페이스북에서 알 수도 있는 사람을 친구로 "추천"받고, 아마존에서 우리가 필요로 할지도 모르는 상품들을 "추천" 받고, 넷플릭스를 통해 영화를 "추천" 받으며, 애플 뮤직을 통해서 우리가 좋아할 만한 음악들을 "추천" 받습니다. 넘처나는 정보들 속에 어쩌면 우리는 추천 없이는 정말 필요로하는 것을 찾기 힘든 세상에 살고 있는지도 모릅니다.  그렇다면 우리에게 꼭 필요한 추천 시스템의 구조는 어떻게 되어 있길래 이렇게 우리를 잘 알고 추천을 해줄 수 있는지 추천 시스템의 내부에 대해 자세히 알아보도록 하겠습니다.






What is Collaborative Filtering ?


  다양한 방법과 알고리즘을 활용해서 추천 시스템을 구성할 수 있습니다. 이번 글에서 우리는 그 중 가장 많이 쓰이고, 그 성능도 우수한 협업 필터링(Collaborative Filtering)이라는 알고리즘에 대해서 알아보겠습니다. 정말 간단한 알고리즘이며, embeddings와 bias에 대한 개념만 조금 가지고 있다면 충분히 이해할 수 있습니다.


  Collaborative Filtering은 사용자에게 상품을 추천하기 위해서 비슷한 취향을 가진 사용자를 고려하거나, 또는 사용자가 관심을 갖고 있는 상품과 비슷한 특징을 가진 상품을 고려하여 사용자가 관심을 갖을 만한 상품을 예측하는 방법입니다. 위키피디아에서는 다음과 같이 설명하고 있습니다.


The underlying assumption of the collaborative filtering approach is that if a person A has the same opinion as a person B on an issue, A is more likely to have B's opinion on a different issue than that of a randomly chosen person - Wikipedia

  Collaborative Filtering은 다시 2가지 1) User-based filtering, 2) Item-based filtering로 분류할 수 있습니다. 위의 설명과 아래 그림에서 알 수 있듯이, User-based 방법은 비슷한 취향을 가진 사용자(User)들을 고려하여 추천을 하고, Item-based 방법은 비슷한 특징의 상품(Item)을 고려하여 추천을 하게 됩니다.



  그렇다면 도대체 어떻게 비슷한 취향의 사용자들을 고려하고, 비슷한 특징의 상품들을 고려하는지 자세히 알아보겠습니다. 쉽게 이해하기 위해서 사람들의 영화에 대한 평점 데이터인 아래 표를 예로 들겠습니다. 


예제 데이터는 여기!!를 참조하였습니다. (정말 이해하기 쉽게 쓰셔서 읽어보시길 추천드려요)


Reference



  그림을 보시면 15명의 사람들(좌측 파랑색 첫 열)의 15가지 영화(위 주황색 첫 행)에 대한 1~5점 사이의 평점을 나타낸 표입니다. 표의 빈 칸은 해당 사용자가 영화를 보지 않았거나 또는 평가를 하지 않은 영화이고, 즉 빈 칸의 영화들에 대한 사람들의 관심도를 예측하고 높은 관심도를 보일 것 같은 영화를 추천해 주는 것이 추천 시스템의 최족 목표라고 할 수 있습니다. 그렇다면 여기서 우리는 추천 시스템을 만들기 위해서, 사람들과 영화를 embedding해야 합니다. 여기서 embedding한다는 것은 사람이나 영화를 각각의 특징들을 나타낼 수 있는 벡터값으로 나타낸다는 뜻입니다. 예를 들어 사람 Jon는 [ 1.34, 0.42, -0.05, 1.58, 0.88 ]으로, 영화 Forrest Gump는 [ -1.72, 1.06, 1.13, 2.35, 2.85 ]으로 나타낸다는 것 입니다. 


Embedding - Jon



Embedding - Forrest Gump


모든 값들은 랜덤으로 초기화하여 생성할 수 있고, 위에서 처럼 크기 5의 1차원 벡터로 생성할 수 있고, 또는 더 크거나 작게 생성할 수 있습니다. 이렇게 사람과 영화를 벡터로 Embedding함으로써 우리는 두 벡터 값의 연산을 통해서 서로간의 유사도를 구할 수 있습니다. 유사도를 구하기 위한 연산으로는 dot product, euclidean distance, cosine similarity등을 활용할 수 있습니다. 이렇게 우리는 이제 각 사람과 영화에 대한 벡터 값을 갖고 있고, 서로의 유사도를 계산함으로써 서로에 대한 관계도 표현할 수 있습니다. 하지만, 서로의 관계와는 독립적으로 가지고 있는 특징이 있을 수 있습니다. 예를 들어, 모든 영화에 낮은 평점을 부여하는 사람이나, 대부분의 사람들이 높은 평점을 준 영화와 같이 다른 사람, 영화와의 관계에는 영향을 받지 않는 독립적인 특징이 있습니다. 이러한 특징을 표현하기 위해서 우리는 추가로 bias를 사용하게 됩니다. bias를 통해서 우리는 독립적으로 가지고 있는 특징들까지 표현이 가능하게 됬습니다. 


  자, 위 예제를 Embedding값과 bias값을 활용하면 다음과 같이 표현할 수 있습니다.


Reference



  랜덤 값으로 User embedding matrix와 Movie embedding matrix 그리고 User bias matrix, Movie bias matrix를 생성하고, 각 영화 평점에 대한 예측 값들은 아래의 계산식으로 계산되었습니다.

Prediction of rating = Dot product of the embedding vectors + bias

예로, Jon의 Forrest Gump에 대한 평점은


  ((0.65 x 0.11) + (0.95 x 0.88) + (0.72 x 0.60) + (0.55 x 0.89) + (0.93 x 0.45)) + (0.87 + 0.14) = 3.25 


위의 계산으로 예측할 수 있습니다.


그런데, 실제 Jon의 Forrest Gump에 대한 평점이 5인 것을 생각할 때, 위의 예측 값은 정확하지 않다고 할 수 있다. 따라서 우리는 좀 더 정확한 예측 값을 얻기 위해서 예측 값과 실제 값 사이의 차이(Loss 값)를 구하고, 이 차이(Loss 값)를 최소화함으로써 정확한 예측 값을 얻는 것이 가능합니다. 이번 예제에서 우리는 RMSE(root mean squared error)를 통해서 Loss값을 구하였고, 위 그림에서 오른쪽 아래의 빨강색(26.04)으로 표시되어 있습니다. 이제 우리는 embedding vector 값들과 bias 값들을 조정하며 Loss 값을 최소화하여 보다 정확한 예측 값을 얻을 것이고 이를 위해서 최적화 알고리즘인 Gradient descent 알고리즘을 활용했습니다. (RMSE와 Gradient descent에 대해서는 추가적으로 다른 포스팅에서 더 자세히 다루겠습니다... )


Reference


  최적화를 통해서 Loss값을 4.58까지 줄인 결과, 이제 좀 예측 평점이 실제 평점과 비슷해진 것이 보이죠 ? 여기까지 왔으면 다 끝났습니다. 이제 위의 예측 평점을 활용해서 영화를 추천해주면 됩니다 ! 어떤 영화를 추천해주냐 ? 바로, 평점을 부여하지 않았던 영화들(맨 처음 공백으로 표현되었던)중에서 예측 평점이 높은 순서대로 추천을 하면 됩니다. 예를 들어서 Cersei는 Good Will Hunting, The Departed, Inception에 대한 평점 정보가 없고, 따라서 영화를 안 봤을 것이라 가정한 상태에서 각 영화의 예측 평점 Good Will Hunting(2.0), The Departed(2.16), Inception(-0.37) 중에서 가장 높은 평점을 받은 The Departed를 추천해주면 됩니다. 셋 다 정말 재밌는 영화인데... 영화를 별로 안 좋아하는 친구인 것 같네요...


  어쨌든 이번 포스팅에서는 정말 Recommendation과 Collaborative Filtering의 기본중의 기본에 대해서 알아보았습니다. 정말 기초가 되는 이론이라고 생각하면 될 것 같습니다. 이러한 개념들을 응용해서 너무 좋은 알고리즘과 모델들이 많기 때문에 앞으로 차근차근 정리하겠습니다. 






References

[1] Collaborative Filtering and Embeddings

[2] Recommender Systems - User-Based and Item-Based Collaborative Filtering

[3] Wikipedia - Collaborative Filtering


'추천 시스템' 카테고리의 다른 글

추천 알고리즘 - SVD (Singular Value Decomposition)  (0) 2019.11.12
Multi-Armed Bandits  (0) 2019.11.07
LaTeX 활용해서 논문쓰장  (6) 2018.09.18