[RecSys] CF를 이용한 Rating Prediction

mincheol2·2022년 3월 12일
0

RecSys

목록 보기
9/23

이 글은 부스트캠프 AI Tech 3기 강의를 듣고 정리한 글입니다.

개요

이 글에 다루는 Rating Prediction은 User-based CF를 기준으로 설명을 진행한다.

Collaborative Filtering 의 최종목적은 평점을 예측하는 것이다.

CF의 목적에서 헷갈리지 않아야 하는게 있는데 CF는 최종 추천은 하지 않는다는 점이다.

RecSys의 최종목적은 예측평점이 높은 아이템을 유저에게 추천하는 것이고, 그 과정중에 CF가 있음을 유의하도록 하자.

CF를 이용한 추천의 간단한 프로세스

  • CF로 예측평점을 계산
  • 타겟 유저에 대한 아이템의 예측 평점을 높은 순 정렬하여 Top N개 추천



Absolute Rating

Absolute Rating은 다른 유저들의 평가를 단순평균이나 가중평균으로 구하는 방식이다.

Average

r^(u,i)=uΩir(u,i)Ωi\hat{r}(u, i)=\frac{\sum_{u \in \in \Omega_{i}} r\left(u^{\prime}, i\right)}{\left|\Omega_{i}\right|}

다른 유저들의 해당 영화(스타워즈)에 대한 단순평균을 낸 것이다.

r^Bi=5+1+33\hat r_{Bi} = \frac{5+1+3}{3}

이때 문제점은 유저 B입장에서 유저 A,C,D 의 rating을 동일하게 반영하여 제대로된 평가 예측이 어렵다는 점에 있다.


Weighted Average

r^(u,i)=uΩisim(u,u)r(u,i)u,Ωisim(u,u)\hat{r}(u, i)=\frac{\sum_{u \prime \in \Omega_{i}} \operatorname{sim}\left(u, u^{\prime}\right) r\left(u^{\prime}, i\right)}{\sum_{u, \in \Omega_{i}} \operatorname{sim}\left(u, u^{\prime}\right)}

Average의 문제점은 평점 예측시 유사도가 낮은 유저의 영향을 유사도가 높은 유저의 영향과 동일하게 받는다는 점이었다.

Weighted Average는 이를 해결하기 위해 유저의 유사도를 이용하여 가중평균을 구하는 것이다.

r^Bi=0.955+0.61+0.8530.95+0.6+0.85=3.3\hat r_{Bi} =\frac{0.95 \cdot 5+0.6 \cdot 1+0.85 \cdot 3}{0.95+0.6+0.85}=3.3

어느정도 문제가 해결된 것 같지만 사실 한가지 문제점이 남아있다.
유저마다 평점을 어떻게 내리는지 절대적인 기준이 없기 때문이다.(유저간 평점의 편차발생)
예를 들어 긍정적인 유저는 대부분의 영화에 평점 5점을 줄 것이지만, 부정적인 유저는 대부분 1점을 주고 정말 좋았던 영화만 4점을 줄 수 있다.

Relative Rating


dev(u,i)=r(u,i)ruforknownrating\operatorname{dev}(u, i)=r(u, i)-\overline{r_{u}} \quad for known rating

위의 문제점(유저간 편차)를 해결하기 위한 아이디어는 각 유저의 평균 평점을 각 유저가 평가한 평점에 빼주는 것이다.

이렇게 하면 각 유저마다 높게 평가한 영화가 두드러질 것이고, 긍정적, 부정적 유저에 대한 문제점이 어느정도 해소된다.



dev^(u,i)=wΩidev(u,i)Ωi=uΩir(u,i)rwΩi\widehat{\operatorname{dev}}(u, i)=\frac{\sum_{w \in \Omega_{i}} \operatorname{dev}\left(u^{\prime}, i\right)}{\left|\Omega_{i}\right|}=\frac{\sum_{u \prime \in \Omega_{i}} r\left(u^{\prime}, i\right)-\overline{r_{w}}}{\left|\Omega_{i}\right|}

이제 모든 평점 데이터를 dev(u,i)\operatorname{dev}(u, i)으로 바꾼 뒤 원래 rating이 아닌 deviation을 예측한다.


r^(u,i)=ru+uΩir(u,i)rurΩi=ru+dev^(u,i)\hat{r}(u, i)=\overline{r_{u}}+\frac{\sum_{u \in \Omega_{i}} r\left(u^{\prime}, i\right)-\overline{r_{u r}}}{\left|\Omega_{i}\right|}=\overline{r_{u}}+\widehat{\operatorname{dev}}(u, i)

그리고 예측한 deviation을 타겟 유저 평균 rating과 더해주면 최종 예측 평균을 구할 수 있게 된다.

Relative Rating 예시

다음의 표를 deviation을 반영한 matrix라고 가정하고 User B의 스타워즈의 예측 평점을 구해보도록 하자
(User B의 평균평점은 3으로 가정)

  1. dev^(u,i)\widehat{\operatorname{dev}}(u, i) 을 구한다.
dev^(u,i)=1.60.95+(1.6)(0.6)+00.850.95+0.6+0.85=0.23\widehat{\operatorname{dev}}(u, i) = \frac{1.6 \cdot 0.95+(-1.6) \cdot(0.6)+0 \cdot 0.85}{0.95+0.6+0.85}=0.23

  1. dev^(u,i)\widehat{\operatorname{dev}}(u, i) 와 User B의 평균 평점을 더해준다.
r^(u,i)=0.23+3=3.23\hat{r}(u, i) = 0.23 + 3 =3.23

IBCF 는 유저->아이템으로 관점을 바꿔 동일한 Task를 진행해주면 된다.

profile
옹오옹오오오옹ㅇㅇ

1개의 댓글

comment-user-thumbnail
2022년 3월 14일

잘 배우고 갑니다 감사합니다

답글 달기