본문 바로가기
데이터 분석/데이터 분석

개인화 추천 알고리즘 7 : 협업 필터링

by thomasito 2022. 3. 1.
반응형

협업 필터링(Collaborative Filtering) 이란

 협업필터링은 사용자의 구매패턴이나 영화, 책 등의 평점 데이터를 바탕으로 추천을 제공하는 방법이다. 유저의 개인정보에 접근하지 않아도 구매이력, 평점 데이터로만 추천할 수 있는 장점이 있으며 넷플릭스와 같은 OTT 업체나 유튜브에서도 널리 사용하는 방법으로 알려져있다.

 

 가장 기본이 되는 알고리즘을 이웃기반 협업필터링(Neighborhood based Collaborative Filtering)이라고 하며 유사도를 구하여 추천을 해주는데 이러한 협업 필터링은 크게 두 종류로 나눌 수 있다. 사용자의 구매패턴을 바탕으로 유사한 사용자를 찾아서 추천리스트를 날려주는 사용자 기반 협업필터링(User-based collaborative Filtering) 이 있고, 사용자의 상품에 준 평점을 바탕으로 유사한 상품들을 찾아서 추천 리스트를 날려주는 아이템 기반 협업 필터링(Item-based collaborative Filtering) 방법이 있다. 

 

협업 필터링(Collaborative Filtering) 사례

 아주 간단한 협업 필터링 사례를 만들어 보자. 사용자 5명이 아이템 6개에 대한 평점을 매겼다고 하자. 똑같은 item6에 대해서도 user` 1,2,4는 4점을 3,5는 3점을 매겼다. 평점은 고객의 선호도를 의미한다.

import pandas as pd
import numpy as np

vect = np.array([[7,6,7,4,5,4],[6,7,7,4,3,4],[1,3,3,1,1,3],[1,2,2,3,3,4],[1,3,1,2,3,3]])

vect_df = pd.DataFrame(vect)
vect_df.columns = ['item1','item2','item3','item4','item5','item6']
vect_df.index = ['user1', 'user2', 'user3', 'user4', 'user5']
vect_df

 

 우선 코사인 유사도를 계산해보자. 

# 위의 Data Frame 형태의 유사도를 계산 
from sklearn.metrics.pairwise import cosine_similarity
cos_similarity = cosine_similarity(vect_df, vect_df)
cos_similarity

cos_df = pd.DataFrame(cos_similarity)
cos_df.columns = ['user1', 'user2', 'user3', 'user4', 'user5']
cos_df.index = ['user1', 'user2', 'user3', 'user4', 'user5']
cos_df

 유저 1과 유저 2는 선호도에 대한 유사도가 높게 나온다. 유저 2와 유저 3, 유저 4와 유저 5도 마찬가지이다.

 피어슨 상관계수로도 계산해보자.

vect_df_t = vect_df.T
corr_df = vect_df_t.corr(method='pearson')
corr_df

 선호도가 유사할 수록 피어슨 양(+)의 상관관계가 높게 나온다. 코사인 유사도와 마찬가지로 피어슨 상관계수로도 유저 1과 유저 2의 선호도가 유사하게 나타난다. 

 

 이러한 경우 user 2가 item 1과 item 2를 이미 구매했다면, 선호도의 유사도가 높은 user 1의 구매 선호도를 뒤져보면 item 3 도 구매할 확률이 높을 것이다. 따라서 이런 경우 item 3에 대한 추천을 날려준다.

 이렇게 알게 모르게 우리 주변에 수많은 협업 필터링 모델에 의해 우리는 추천을 받고 있다. 이 추천들이 나와 비슷한 사용자의 데이터를 보고 나에게 추천을 해준다거나 아니면 나의 데이터를 보고 타인에게 추천을 해주는 거라고 생각하면 데이터가 얼마나 중요한지 다시 한 번 생각하게끔 한다. 유튜브 뮤직에서 나의 데이터를 보고 보사노바와 재즈를 듣는 유저에게 뜬금없이 벤의 180도, 혼술하고 싶은 밤 같은 걸 날려줄 수도 있겠다.(?)

 

반응형

댓글