본문 바로가기

추천 시스템/Collaborative Filtering

Collaborative Filtering(CF: 협업필터링)2: 유사도 계산법

Collaborative Filterting1: 개요

 

Collaborative Filtering(CF: 협업필터링)1: 특징, 개념 <수정필요>

CF에 관한 내용들이 많아서 1과 2로 나눠서 게시했다. 1은 CF의 특징, 개념에 관한 내용이고, 2는 CF를 어떻게 계산하는지에대한 직접적인 유도를 하는 내용이다. 관련한 모델 또한 추가로 정리했다. ------------..

data-matzip.tistory.com

CF의 특징 개념에 대한 설명의 위의 링크에 게시했으니 참조하길 바랍니다.

 

 

그럼 이제 item based와 user based를 사용할 때 어떻게 rating을 계산하는지에 대해 알아보자.

 

구현 절차

 

CF를 만들기 위해서는 여러가지 절차를 거쳐야 한다.

1. rating matrix 정리: item based(item-user matrix), user based(user-item matrix)의 형태로 정리한다.

2. similarity matrix생성: MSD, cosine, peason..등으로 유사도를 계산한 후 matrix를 생성한다.

3. rating 예측: target user/ item에 대해서 각 rating을 예측한다.

4. candidate filtering: 봤던, 샀던 item에 대해서 filtering

 

 

1.유사도(similarity matrix 생성)

similarity matrix를 생성하기 위해서 MSD, cosine, pearseon, jaccrd등으로 유사도를 계산한다. 모든 item(item based), user(user based)에 대한 유사도를 구하면 matrix로 생성할 수 있다.

 

아래는 item based similarity에 관한 예시다. 아래처럼 sparse한 data의 경우 각 영화를 1,5점을 줘도 similarity 가 다를 수 있다. 따라서 공통된 영화의 갯수를 제한하는 minimum threshoold를 설정하는것이 필요하다.

item based similarity, Building Recommender Systems with Machine Learning and AI [Video]

* MSD(mean squared difference)

MSD는 각 기준에 대한 점수 차이를 나타내어 계산하고, 유클리드 거리 제곱에 반비례한다.

 

- user에 대한 MSD

$msdsim(u,v)= \frac{1}{msd(u,v+1)}$

 

- item에 대한 MSD

$msdsim(i,j)= \frac{1}{msd(i,j+1)}$

 

* MSD를 계산할 때 분모에 1이 붙는 이유는 분모가 0이되는걸 방지하기 위해서다.

- MSD(item기준 공식)

$msd(i,j)= \frac{1}{|Uij|}\sum_{u\in U_{ij}} (r(u,i) - r(u,j))^{2}$

 

공식을 보면 알겠지만, MSD는 공통상품을 기준으로 rating의 평균 차이를 나타낸다.

 

* Cosine similarity

cosine 그래프를 생각해보면, 0도에서 최대값(1)이 된다. 즉, A,B가 같은방향을 바라보고 있을 때 유사도가 최대라고 이해하면 된다.

 

예시를 들어서 직접 계산해보자

 

User1

User2

User3

Item1

1

0

5

Item2

4

7

3

위와같은 rating matrix가 있을때, item1과 item2간의 유사도는 아래와 같이 계산한다.

$sim(item1, item2)=\frac{1\times4 + 0\times7 + 5\times3}{\sqrt{1^{2}+0^{2}+5^{2}}*\sqrt{4^{2}+7{2}+3{2}}}$

으로 계산할 수 있다.

 

* Pearson similarity

$sim(u,v)= \frac{\sum_{i \in I_{uv}} (r_{ui} - \mu_{u})(r_{vi} - \mu_{v})}{\sqrt{\sum_{i \in I_{uv}} (r_{ui} - \mu_{u})^{2}}\sqrt{\sum_{i \in I_{uv}} (r_{vi} - \mu_{v})^{2}}}$

Pearson은 user나 item이 가지는 성격을 제거한다. 예를 들어, '민지'라는 사람이 다른사람 보다 점수를 후하게 주거나, '타이타닉'이라는 영화가 다른 영화보다 점수를 후하게 받는다는 등의 성격을 제거하는 것이다. 즉, 동등한 상태로 similarity를 구한다.

 

위의 표에서 pearson similarity를 구해보자

$\mu$(Item1)= $\frac{1+0+5}{3}$ = 2,

$\mu$(Item2)= $\frac{4+7+3}{3} = \frac{14}{3}$=4.67 이다.

 

$sim(item1, item2)= \frac{(1-2)(4-4.67) + (0-2)(7-4.67) + (5-2)(3-4.67)}{\sqrt{(1-2)^{2} + (0-2)^{2} + (5-2)^{2}} \sqrt{(4-4.67)}^{2} +  \sqrt{(7-4.67)}^{2} +  \sqrt{(3-4.67)}^{2}}$

 

* Jaccard similarity

Building Recommender Systems with Machine Learning and AI [Video]

자카드 sim은 간단하게 전체 수 중에 공통된 수의 비율을 구하는 것이다.

 

위와 같은 similarity를 사용해서 다음과 같은 similarity matrix를 얻는다.

Building Recommender Systems with Machine Learning and AI [Video]

2. rating 예측

 

$\hat{r_{ui}}= \frac{\sum_{v \in N_{i}^{k}(u)}sim(u,n)\times r_{vi}}{\sum_{v \in N_{i}^{k}(u)}sim(u,n)}$

item based나 user based는 rating에 similarity를 반영해주면 된다.