본문 바로가기

모델/추천시스템

추천시스템 - 기초

안녕하세요! 오랜만에 글을 올립니다!!

이것저것 하다보니 글을 자꾸 못쓰다가 이제야 쓰게 되었습니다..

 

* 글에서 잘못된 부분이 있어 수정해서 다시 올립니다.

 

이번에는 추천시스템에 대해 살펴보겠습니다. 사실 제가 지금 주로 공부하려는 쪽이 추천시스템이기도 해서 아마 이쪽으로 글이 주로 올라올거에요. 자연어의 경우 필요할 때마다 공부하는 쪽으로 방향을 바꿔서 아마 제가 필요할 때는 추가적으로 글을 올릴 것 같아요(조만간 Word2vec 활용부분에 대해 짤막하게 한번 올릴거고요!)

 

이번에 참고한 글들은 다음과 같습니다.

en.wikipedia.org/wiki/Collaborative_filtering

 

Collaborative filtering - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search This image shows an example of predicting of the user's rating using collaborative filtering. At first, people rate different items (like videos, images, games). After that, the system

en.wikipedia.org

en.wikipedia.org/wiki/Recommender_system

 

Recommender system - Wikipedia

Parts of this article (those related to documentation) need to be updated. Please update this article to reflect recent events or newly available information. (April 2019) A recommender system, or a recommendation system (sometimes replacing 'system' with

en.wikipedia.org

developers.google.com/machine-learning/recommendation/content-based/basics

 

Content-based Filtering  |  Recommendation Systems  |  Google Developers

Content-based filtering uses item features to recommend other items similar to what the user likes, based on their previous actions or explicit feedback. To demonstrate content-based filtering, let’s hand-engineer some features for the Google Play store.

developers.google.com

Bobadilla, Jesús, et al. "Recommender systems survey." Knowledge-based systems 46 (2013): 109-132.

 

Youtube나 Netflix, 인터넷 쇼핑몰 같은 곳을 보면 우리한테 한번씩 상품 추천하는 것을 볼 수 있습니다.

그림 1. Youtube 추천동영상

위의 그림 1은 제 Youtube 영상 추천 목록입니다. 제가 주로 일본음악을 듣다보니 이렇게 추천목록이 정해지곤 합니다. 다른 분들에게는 각자에 맞는 영상이 추천되곤 합니다. 그럼 이러한 추천시스템의 정의는 무엇일까요? Wiki에서는 다음과 같이 설명하고 있습니다.

 

* 추천시스템이란?

A recommender system, or a recommendation system (sometimes replacing 'system' with a synonym such as platform or engine), is a subclass of information filtering system that seeks to predict the "rating" or "preference" a user would give to an item.

  -> 정보 filtering system의 하위분류로써, 주어진 아이템에 대한 특정 유저의 점수나 선호도를 예측하는 것

(출처 : Wikipedia)

 

저도 영어는 항상 볼 때마다 친해지기가 좀 어렵네요...

여기서 아이템영화, 로션 등의 상품이고 유저사람을 의미합니다. 이러한 추천시스템 알고리즘을 만드는 방식은 여러 방식이 있지만 크게 2가지 방식으로 나눕니다. 첫 번째는 Collaborative Filtering, Content-based Filtering, Demographic Filtering으로 나누는 방식입니다

나누는 방법1

○ Collaborative Filtering(CF)

이름에서 어느정도 짐작 하신분도 있으시겠지만 Collaborative Filtering은 아이템들에 대한 여러 유저들의 선호도 등의 정보를 모아 추천하는 방식을 말합니다. 여기서 여러 유저라는 부분이 'Collaborative'라는 의미가 들어갑니다. 이 모델의 가정은 다음과 같습니다.

 

● 가정

- 유저들은 과거에 선호한 물건을 미래에도 선호할 것임

- 유저들은 과거에 좋아했던 물건과 유사한 물건들도 좋아함

 

이 모델은 아이템이나 유저의 특징을 활용하지 않고 유저들이 아이템에 대해 준 점수, 선호도, 클릭 수 등의 데이터를 활용합니다. 이 값은 아이템에 대한 유저의 점수나 선호도와 같은 명시적(explicit) 데이터와 유저의 아이템에 대한 구매횟수, 클릭 수 등과 같이 아이템에 대해 선호하는 정도를 간접적으로 나타내는 암묵적(implicit) 데이터로 나뉩니다. 이러한 점수를 활용하는 방법은 아래 예시를 참조하시면 됩니다.

 

유저 또는 아이템들 간의 유사도 계산을 위해 유저가 아이템에 준 점수 등의 데이터를 활용합니다. neighborhood-based CF 또는 item-based/user-based top-N 추천 방식 등이 있습니다. 유사도를 구할 때 아래와 같은 표를 활용합니다.

  item1 item2 item3
user1 3 5 3
user2 2 1 2
user3 4 2 4

 

위의 표는 각 user가 각 item에 대한 점수를 준 표로 위의 값을 이용하여 item 간 또는 user 간 유사도를 계산하고 이를 활용하여 추천하는 방식입니다. 여기서 item 간 유사도를 구하여 활용하면 item to item이고 user 간 유사도를 활용하면 user to user 모델입니다.

○ Content-based filtering

content-based filtering은 아이템에 대한 정보를 활용하여 추천하는 방식을 의미합니다. 이 방식은 아이템에 대한 정보가 많을 때 유용한 방법입니다. 이 모델 역시 과거에 유저가 좋아했던 아이템과 유사한 아이템을 좋아할 것이라는 가정을 가지고 있습니다. 예시를 하나 들면 다음과 같습니다.

  공포 코미디 액션
영화1 1 1 5
영화2 3 4 5
영화3 3 3 5

(표에서 column은 특성, row는 각 영화를 의미합니다)

위의 표에서 영화들이 다음과 같은 특징을 가질 때 A라는 유저가 영화2를 좋아한다고 할 때 content-based filtering 모델은 각 영화2와 다른 영화 간의 유사도 값을 구합니다. 그 결과 영화2와 유사도 값이 제일 큰 영화3을 유저가 좋아할 것이라고 판단하고 추천하게 됩니다.

 

이 모델의 경우 아이템의 여러 정보를 활용하여 정확한 아이템을 추천 할 수 있는 장점이 있으나 이러한 아이템 특성들에 대한 데이터가 부족하면 정확도가 떨어질 수 있는 단점이 있습니다.

○ Demographic filtering

Demograhpic filtering은 유저에 대한 정보를 활용하여 추천하는 방식을 의미합니다. 이 방식은 유저에 대한 정보가 많으면 유용한 방법입니다. 이 모델 역시 과거에 유저가 좋아했던 아이템과 유사한 아이템을 좋아할 것이라는 가정을 가지고 있습니다. 예시를 하나 들면 다음과 같습니다.

  공포 코미디 액션
유저1 5 1 2
유저2 5 2 1
유저3 1 5 5

(표에서 column은 특성, row는 각 유저를 의미합니다)

위의 표는 각 유저가 특정 영화 장르에 대해 선호하는 점수를 나타내고 있습니다. 표를 보면 유저1, 유저2가 좋아하는 영화 장르 점수가 유사한 것을 볼 수 있습니다. 이를 통해 유저2에게 영화를 추천한다고 하면 유저1이 본 영화를 추천 할 수 있을 것입니다.

○ Hybrid filtering

Hybrid는 위의 3가지 방식 중 일부를 섞어서 나타내는 방법입니다.

 

위와 같은 Filtering 방식에 따라 추천시스템 알고리즘을 나눌 수 있습니다. 다른 한 가지 방법은 Memory-based, Model-based 방법으로 나누는 방식이 있습니다. (위에서 언급한 논문("Recommender systems survey")에서 저자는 이 방식이 더 많이 쓰인다고 합니다) 위에서 언급한 것을 다른 기준으로 나누는 것이기 때문에 설명은 간단히만 하도록 하겠습니다.

나누는 방법2

○ Memory-based

Memory-based는 user와 item의 점수 데이터를 활용하는 추천시스템 알고리즘입니다. 대부분 user, item 간 거리 값을 활용해 유사도 값을 구하고 제일 유사한 것을 추천하는 방식입니다. 위의 Collaborative filtering이라고 보셔도 될 것 같습니다.

○ Model-based

모델을 만들어 활용하는 방식입니다. 위의 Content-based, Demographic, Hybrid Filtering이 해당되며 clustering, SVD와 같은 Matrix Factorization 등이 이에 포함됩니다.

○ Hybrid

위의 Memory-based와 Model-based를 Hybrid한 방식입니다.

 

여기까지가 추천시스템 모델에 대한 기초였습니다. 다음 글에서는 추천시스템의 주요 문제인 sparsity, cold start에 대한 글을 쓰도록 하겠습니다.

 

읽어주셔서 감사합니다. 혹시 궁금하신 부분이나 잘못된 부분 있으면 꼭! 댓글이나 쪽지 등으로 말씀해주세요!