본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day32] Collaborative Filtering 3-2 K-Nearest Neighbors CF&Similarity Functions& Rating Prediction

Rating Prediction

※ 설명은 user-based이지만 동작 방식은 user-based나 item-based나 같습니다.

UBCF(User-based Collaborative Filter) - Absolute Rating

  영화 V 영화 W 영화 X 영화 Y 영화 Z
User A 5 4 5 2 1
User B 4 5 ? 1 2
User C 2 1 1 4 5
User D 4 2 3 2 4

Average

영화X를 본 다른 유저들의 평균을 내서 rating으로 사용
$$\frac{5+1+3}{3}$$
$$\hat{r}(u,i)=\frac{\Sigma_{u'\in\omega_{i} r(u',i)}}{|\Omega_{i}|}$$
※전체 유저 : U, 아이템 : I, 유저 (여기서는 지금 rating prediction을 하려는 대상 유저) : u, 아이템 : i, 평점 : $\hat{r}(u,i)$, 유저u와 유사한 유저들의 집합 : $\Omega_{i}$, 예측하려는 유저 제외 다른 어느 유저 : u'
위와 같이 일반화된 식으로 표현할 수 있다.

Weighted Average

Average에 비해서 나와 비슷한 유저를 더 많이 반영할 수 있다
유저 간의 유사도 값을 가중치로 사용해서 rating의 평균을 낸다

  User A User C User D
User B 0.95 0.6 0.9

위와 같이 user B와 유사도를 가지고 있기 때문에 가중 평균을 구해서 평점 예측을 하면 아래와 같다.
$$\frac{\Sigma_{u}sim(u_{B},u)\cdot r_{u,i}}{\Sigma_{u}sim(u_{B},u)}=\frac{0.95\cdot 5 + 0.6\cdot 1+0.85\cdot 3}{0.95+0.6+0.85}=3.3$$
이렇게 하면 가장 유사도가 높은 User B의 평점이 많이 반영된다. 위의 공식은 현 데이터에 대입한 공식이고
밑은 좀 더 일반화된 공식이다.
$$\hat{r}(u,i)=\frac{\Sigma_{u'\in \Omega_{i}}sim(u,u')r((u',i)}{\Sigma_{u'\in\Omega_{i} sim(u,u')}}$$

 

Absolute Rating의 한계

유저가 아이템에 매긴 평점의 절댓값r을 그대로 이용한다. 하지만 유저가 아이템에 평점을 주는 기준이 각각 다르기 때문에 그 범위가 다르다. 예를 들어 점수가 후한 유저는 부정적이어도 5점만점 중에 3점을 줄 수있지만, 그렇지 않은 유저는 1점까지도 쉽게 내려갈 수 있다. 각 유저가 가지는 편차를 반영하기 위해서 상대적 평점이 필요하다.

UBCF - Relative Rating

개별 유저의 평균 평점을 구하고 그 편차(Deviation)을 사용한다.

예를 들어 평균이 2.5인 유저가 5점을 준다면 아주 점수가 높은 편이다.
$$dev(u,i)=r(u,i)-\bar{r_{u}}$$

원래 평점에 개별 유저의 평균 평점을 빼서 편차로 사용한다.

Relative Rating Formula

deviation을 예측해서 평점을 예측한다. 모든 평점 데이터의를 deviation값으로 바꾸어서 원래 평점이 아닌 deviation값을 예측하는 것이다.

최종 예측 평점 = 유저 평균 평점 + 예측 편차

Predicted rating ($\hat{r}(u,i)$) = User Average rating ($\bar{r_{u}}$) + Predicted deviation ($\hat{dev}(u,i)$)

을 차근 차근 살펴보자

 

1. 일단 모든 평점 데이터를 deviation 값으로 바꾼다.

$$dev(u,i)=r(u,i)-\bar{r_{u}}$$

 

2. 평점의 예측 수식을 deviation에 대해서 정리해서 예측 deviation을 구한다.

$$\hat{dev(u,i)} = \frac{\Sigma_{u'\in\Omega_{i}}dev(u',i) }{|\Omega_{i}|} = \frac{\Sigma_{u'\in\Omega_{i}r(u',i) = \bar{r_{u'}}}}{|\Omega_{i}|}$$

 

3. 예측 deviation값을 원래 해당 유저의 평점에 더한다.

$$\hat{r}(u,i)=\bar{r_{u}}+\frac{\Sigma_{u'\in\Omega_{i}} r(u',i) -\bar{r_{u'}}}{|\Omega_{i}|} =\bar{r_{u}}+ \hat{dev}(u,i)$$

예측 deviation은 유저 u가 자신의 평균 평점 $\bar{r_{u}}$보다 얼마나 높게 혹은 낮게 평가했는가에 대한 차이값이 된다. 그래서 최종결과로 예측 deviation을 더해주어야지만 유저u에 대한 최종 평점 값이 나온다.

 

이제 실제 값으로 해보자

1.모든 평점 데이터를 deviation 값으로 바꾼다.

  영화 V 영화 W 영화 X 영화 Y 영화 Z
User A 5 -3.4 4 -3.4 5 -3.4 2 -3.4 1 -3.4
User B 4 -3.0 5 -3.0 ? 1 -3.0 2 -3.0
User C 2 -2.6 1 -2.6 1 -2.6 4 -2.6 5 -2.6
User D 4 -3.0 2-3.0 3-3.0 2-3.0 4-3.0

User B의 평균 평점은 $\frac{4+5+1+2}{4}=3.0$이다. 

나머지 User A의 평균 = $\frac{5+4+5+2+1}{5}=3.4$ 와 같이 계산 해서 빼주면

  영화 V 영화 W 영화 X 영화 Y 영화 Z
User A 1.6 0.6 1.6 -1.4 -2.4
User B 1 2 ? -2 -1
User C -0.6 -1.6 -1.6 1.4 2.4
User D 1 -1 0 -1 1

로 모두 deviation 값이 되었다.

User A의 영화X가 1.6이라는 것은 User A의 평균 평점보다 영화 X를 1.6점 높게 주었다는 뜻이 된다.

 

2. 평점의 예측 수식을 deviation에 대해서 정리해서 예측 deviation을 구한다.

이제 User B의 영화 X에 대한 평점을 예측해보자

Weighted Average에 있는 유사도를 가중치로 사용해서 예측 deviation을 구한다. 

$$\frac{1.6\cdot 0.95 + (-1.6)\cdot(0.6)+0\cdot0.85}{0.95+0.6+0.85}=0.23$$

3.예측 deviation값을 원래 해당 유저의 평점에 더한다.

0.23+3.0=3.23

 

그래서 최종 평점은 3.23이라고 예측할 수 있다.

  UBCF IBCF
Absolute Rating $$\hat{r}(u,i)=\frac{\Sigma_{u'\in \Omega_{i}}sim(u,u')r((u',i)}{\Sigma_{u'\in\Omega_{i} sim(u,u')}}$$ $$\hat{r}(u,i)=\frac{\Sigma_{i'\in \phi_{u}}sim(i,i')r((u,'i)}{\Sigma_{i'\in\phi_{u} sim(i,i')}}$$
Relative Rating $$\hat{r}(u,i)=\bar{r_{u}} + \frac{\Sigma_{u'\in\Omega_{i}} sim(u,u') \{r(u',i) -\bar{r_{u'}} \}}{ \Sigma_{u'\in\Omega_{i}}sim(u,u')}$$ $$\hat{r}(u,i)=\bar{r_{i}} + \frac{\Sigma_{i'\in\phi_{u}} sim(i,i') \{r(u,i') -\bar{r_{i'}} \}}{ \Sigma_{i'\in\phi_{i}}sim(i,i')}$$
  $\Omega_{i}$
유저 u와 유사한 유저들의 집합
$\phi_{u}$
유저 u가 평가한 아이템들의 집합
=KNN으로 선택된 아이템들의 집합
유사도 유저 간의 유사도
$sim(u,u')$
아이템 간의 유사도
$sim(i,i')$

Top-N Recommendation

CF를 통해서 유저 u가 아이템 i에 부여할 평점을 예측할 수 있었다. 예측된 평점이 Recommendation system에 활용되어 가장 평점이 높은 N개의 아이템을 추천해주면 된다.