아카이브/추천시스템(2019)

추천시스템 13 - 사용자-사용자 협업필터링

Johnny Yoon 2019. 7. 1. 22:34
728x90
반응형

추천시스템

본 포스팅은 Minnesota대학교의 Intro to Recommender Systems코세라 강좌를 정리한 내용입니다.

https://www.coursera.org/learn/collaborative-filtering?specialization=recommender-systems

 

비개인적 추천

비개인적인 추천을 하려면 다음과 같은 수식을 사용하면 된다.

$$S(u, i) = \frac{\sum_{v \in U} r_{vi}}{ |U|}$$

 

u - 현재 사용자

i - 아이템

S(u, i) - 예측값

U - 모든 사용자

|U| - 모든 사용자의

v - U 속한 다른 사용자

$r_{ui}$ - 아이템에 대한 현재 사용자의 평점

 

사용자-사용자 추천

수식에 기반하여 사용자-사용자 추천을 계산하려면 다음과 같은 스텝을 밟아야한다.
$$S(u, i) = \frac {\sum_{v \in U} r_{vi} * w_{uv} }{ \sum_{v \in U} w_{uv}}$$

 

$w_{uv}$ - 사용자 v 현재 사용자 u 연관성이 있는지에 대한 어떠한 가중치

가중치 w 크다면, 사용자 v 사용자 u 취향이 비슷한(시스템의 관점에서 연관성이 있는) 사용자인 것이다.

 

스텝에는 한가지 문제점이 있다. 바로 사용자들이 주는 평점은 다른 단위일 있다는 것이다.

어떤사람은 좋은 영화들에 5점을 남발할 수도 있고, 어떤사람은 좋은 영화의 기준이 높아 5점이 많지 않을 있다.

이런 경우에는 어떤 방법을 적용해 있을까?

 

비개인적추천에 편차 적용

우리가 위에서 확인한 비개인적인 환경에서 문제를 본다면 다음과 같이 시도해 있다.
$$S(u, i) = \bar{r}_{u} + \frac{\sum_{v \in U} (r_{vi} - \bar{r}_{u})}{|U|}$$

 

$\bar{r}_{u}$ - 사용자 u 모든 아이템에 대한 평균 평점

수식을 설명하면 , 현재 사용자의 평균 평점에 어떠한 편차를 더한다는 것인데,

편차는 사용자(v) 현재 아이템에 가진 평점에서 사용자(v) 평균 평점을 뺀것을 모두 더한 ,

사용자의 수로 나눈것이다.

 

예를 들면)

사용자 A 평균 평점은 4이고, 사용자 B 평점은 2, 사용자 C 평점은 3라고 하자.

사용자 B 아이템에 3 주었고, 사용자C또한 3 주었다.

사용자B 자신의 평균점수보다 점을, 사용자C 자신의 평균값을 주어 차는 1 0이다.

이것을 더해서 두명의 사용자이기 때문에 2 나누면 0.5 나온다.

값으로 사용자 A 예측값을 구하면 4 + 0.5 4.5 된다.

 

사용자-사용자 추천에 편차 적용

이러한 개념을 가지고, 사용자-사용자 환경에 적용해보도록 하자.

$$S(u, i) = \bar{r}_{u} + \frac{\sum_{v \in U}(r_{vi} - \bar{r_{v}} w_{uv})}{\sum{v \in U} w_{uv}}$$

 

사용자-사용자의 수식에서는 w_{uv} 연관성에 대한 가중치가 추가되었다.

하지만 w 대한 가중치는 어떻게 계산해야 할까?

사용자가 다른 사용자가 연관성이 있다는 것을 어떻게 계산할까?

우리는 피어슨 연관성 (Pearson Correlation) 점수를 계산해 사용한다.

$$w_{uv} = \frac{ \sum_{i \in I} (r_{ui} - \bar{r}_u)(r_{vi} - \bar{r}_v)}{\sigma_{u}\sigma_{v}}$$

수식에서의 $\sigma$ 표준편차를 의미한다.

 

이웃 구하기

마지막으로 추천을 구할때 "이웃" 되는 사용자들(V) 어떻게 구할 있을까?

당연한 이야기지만, 모든 사용자를 예측에 사용하는것은 좋은 방법이 아니다.

이것을 정하는 여러가지 방법이 있을 것이다:

  • 예측에 사용할 사용자의 수를 지정한다.
  • 적어도 어느정도의 연관성이 있으면 사용한다.

위와 같은 정보들을 통해 사용자의 수를 제한하고 그것을 V라고 칭한 ,

위의 수식에서 U V 바꿔 적용하면 된다.

그리고 이러한 정보는 연관성이나 코사인 유사도를 통해 구할 있다.

또한 의견이 다른 사용자들을 예측에 사용하는것은 쉽게 노이즈(Noise) 있다.

 

구현 문제

사용자와 아이템의 수가 많아진다면, 계산이 너무 많아지기 때문에, 이를 구현하는것은 쉽지 않다. 따라서 이웃을 조정하는 것을 하거나, 연관성을 캐시하거나 어떠한 방법으로 갱신하는 방법도 생각해 있다.

 

추정

추천이 어떻게 동작할 있을까?

우리는 한가지의 추정을 가지고 추천을 한다:

사용자의 취향은 변하지 않는다.

  • 사람들의 취향은 안정되어있다.
  • 우리가 만들어낼 시스템은 한가지 도메인에 국한되어 있다.
728x90
반응형