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

추천시스템 14 - 아이템-아이템 협업필터링

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

추천시스템

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

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

서론

기본적으로 사용자-사용자 필터링은 동작 한다. 하지만 데이터가 부족할때는 예측값을 만들어내기 힘들다. 시스템에서 사용자가 많다 해도, 공통점을 찾을 없는 사용자가 있다면 추천을 만들어내기 힘들다. 또한 평점을 매기지 않는 사용자들에게도 추천을 만들기 힘들다. 이런 단점을 극복하기 위해 아이템-아이템 필터링이 고안되었다.

 

사용자보다는 여러 사람들이 평점을 매기는 아이템에 데이터가 많을 있다.

또한 아이템-아이템 필터링은 계산이 복잡하지 않다. 사용자가 몇개의 아이템에 평점을 매겼다면, 복잡한 계산을 때마다 다시 진행해야 한다는 단점이 있지만, 계산이 복잡하다면 부하가 걸릴 것이다.

 

아이템-아이템 통찰

아이템끼리의 관계는 사용자들끼리의 관계보다 안정적이다.

물건에 대한 특성은 사람에 대한 특성보다 변하기 쉽지 않기 때문에,

비슷한 아이템끼리의 특성은 변하지 않고, 점수 또한 그렇다.

그리고, 아이템끼리의 유사성을 계산하면, 그것을 통해 사용자의 선호도를 계산할 있다.

 

계산 절차

  1. 두개의 아이템 사이의 유사도를 계산한다.
    • 평점 벡터 두개의 연관성(피어슨) 계산한다.
    • 두개의 아이템 벡터의 Cosine 유사도를 계산한다.
    • 한개의 아이템에는 조건부 확률을 계산한다.
  2. 결과를 통해 사용자-아이템간의 평점을 예측한다.
    • 편차가 적용된 이웃 사용자들의 평균값을 사용한다.
    • 평점을 선형회귀로 예측한다.

 

외에도 아이템들을 하나하나 계산하지 않고, 상위 N개의 아이템을 바로 예측할 수도 있다. 이런 경우, 작은 이웃들이 구입한 아이템들을 모아 유사도를 계산하면, 비교적 간단하게 추천을 만들어 있고, 범위가 많이 좁아진다.

 

아이템-아이템 기법의 장점

  • 생각보다 동작한다.
    • 예측의 정확도가 높다.
    • 상위 N개의 성능이 좋다.
  • 효율적인 구현법이다.
    • 아이템보다 사용자가 많을 때는 매우 좋다.
    • 사용자의 취향처럼 많이 가변성이 아니라서, 미리 계산해 놓을 수가 있다.
  • 적용분야와 확장성이 넓다.
    • 쇼핑카트나 사용자 프로필에 빠르게 적용해 있다.

한계점

  • 아이템-아이템 기법은 아이템끼리의 관계가 변하지 않는다고 가정한다.
    • 빠르게 변하는 책이나 노래같은 경우는 쉽지 않을 있다.
    • 시즌의 아이템이나 단기간의 아이템은 문제가 있을 있다.
  • 계속 추천을 하다보면, 너무 예측 가능한 추천만 나온다.
    • 문제는 학자들의 불만이다. (정확한 근거가 나오지는 않았다.)

알고리즘

기본적 아이디어는, 아이템끼리의 유사도를 미리 계산해놓고, 사용자가 관심있는 (쇼핑카트에 있거나 이미 구입한 아이템) 아이템들과 비슷한 아이템을 추천한다.

 

기존의 사용자-사용자 추천은 다음과 같다:

$$S(u, i) = \frac{\sum_{v \in U} w_{uv} \hat{r}_{ui}}{\sum_{v \in U} w_{uv}}$$

 

아이템-아이템 추천은 다음과 같다:

(다른 사용자가 아니라 사용자가 평점을 매긴 아이템들을 본다는 점에서 다르다)

$$S(u, i) = frac{ \sum_{j \in N} w_{ij} \hat{u}_j}{\sum_{j \in N} w_{ij}}$$

N 모든 아이템의 집합이다.

j N 있는 u 아닌 다른 아이템들이다.

$w_{ij}$ 아이템과 아이템 사이의 가중치이다.

$\hat{u}_j$  아이템 j 대한 사용자 u 평점이다.

 

그렇다면 가중치 w (아이템끼리의 유사도) 어떻게 계산할까?

우리는 아이템끼리의 유사도를 구하기 원한다.

그리고 이것은 코사인 유사도로 간단하게 구할 있다.

$$w_{ij}$$

$$= cos(\hat{\bar{r}}_i, \hat{\bar{r}}_j)$$

$$= \frac{\hat{\bar{r}}_i \hat{\bar{r}}_j}{||\hat{\bar{r}}_i, \hat{\bar{r}}_j|| ||\hat{\bar{r}}_j||}$$

$$= \frac{\sum_u \hat{\bar{r}}_i \hat{\bar{r}}_j}{\sqrt{\sum_u \hat{r_{ui}}^2} \sqrt{\sum_u \hat{r_{ui}}^2}}$$

수식은 복잡해 보일 있지만, 결국 벡터의 내적곱을 구한 , 벡터의 길이를 곱한것이다.

 

그렇다면 사용자-사용자 기법에서 했던것 처럼 사용자-아이템 평점관계에서도 정규화를 해야할까?

수식에 정규화를 적용하면 다음과 같이 된다:

$$\frac{\sum_u (r_{ui} - \hat{\bar{r}}_i) (r_{uj} \hat{\bar{r}}_j)}{\sqrt{\sum_u (r_{ui} - \hat{\bar{r}}_i)^2} \sqrt{\sum_u (r_{uj} \hat{\bar{r}}_j)^2}} $$

 

마지막으로 이웃들 N 어떻게 구할까?

아이템 i 유사성이 있는, 상위 K개의, 사용자 u 평점을 매긴 아이템을 고르면 된다.

사용자-사용자 기법에서, 결과값을  사용자의 평균 평점에 더해주었던 것을 기억할것이다.

아이템-아이템 기법에서도 비슷한 방법을 사용해 수식을 업데이트 했다:

$$S(u, i) = \frac{\sum_{j \in N(i;u)} w_{ij} (r_{uj} - \bar{r}_j)}{\sum_{j \in N(I;u)} |w_{ij}|} + \bar{r}_i$$

 

정리

위를 다시 정리하면 다음과 같다.

  1. 아이템간의 유사도를 구한다: 코사인 유사도
    • 정규화를 한다면 평균값으로 한다.
    • 없는 값은 0으로 취급한다.
  2. 아이템들의 점수를 구한다.
    • 점수는 다른 아이템들의 평점으로 결정된다.
  3. 유사한 K개의 이웃을 구한다
  4. 모델을 구축한다.
  5. 필요하다면 모델을 수축시긴다 (필요없는 이웃들을 버린다)
728x90
반응형