더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

AI/추천 시스템

Collaborative Filtering(협업 필터링)기반 추천 모델

  • -

 

2022년 3월 7일(월)부터 11일(금)까지 네이버 부스트캠프(boostcamp) AI Tech 강의를 들으면서 중요하다고 생각되거나 짚고 넘어가야 할 핵심 내용들만 간단하게 메모한 내용입니다. 틀리거나 설명이 부족한 내용이 있을 수 있으며, 이는 학습을 진행하면서 꾸준히 내용을 수정하거나 추가해나갈 예정입니다. 강의 자료의 저작권은 네이버 커넥트재단 부스트캠프 AI Tech에 있습니다.

 

 

Collaborative Filtering(CF)

협업 필터링

많은 유저들로부터 얻은 기호 정보를 이용해 유저의 관심사를 자동으로 예측하는 방법

더 많은 유저와 아이템 데이터가 축적될수록 협업의 효과가 커지고 추천이 정확해질 것이라는 가정에서 출발한다.

 

 

CF 기반 추천 시스템

최종 목적

유저 $u$가 아이템 $i$에 부여할 평점을 예측하는 것이다.

 

방법

  1. 주어진 데이터를 활용해 유저-아이템 행렬을 생성한다.
  2. 비어있는 값(평점)이 존재할 것이므로 이 빈 칸을 채우는 것이 중요하다.
  3. 유사도 기준을 정하고, 유저 또는 아이템 간의 유사도를 구한다.
  4. 주어진 평점과 유사도를 활용하여 행렬의 비어 있는 값(평점)을 예측한다.

 

User-based CF이면 특정 유저와 비슷한 취향을 가진 유저들이 선호하는 아이템을 추천하는 것이며, 아이템이 가진 속성을 사용하지 않는다는 특징이 있다.

반대로 Item-based CF이면 특정 아이템과 비슷한 평점을 지닌 아이템 중 유사도가 높은 아이템을 추천하는 것이며, 이때는 유저의 속성을 사용하지 않는다는 특징이 있다.

 

 

Neighborhood-based CF(이웃기반 협업 필터링)

구현이 간단하고 이해가 쉽지만, 아이템이나 유저가 계속 늘어날 경우 확장성(Scalability)이 떨어지고, 주어진 평점과 선호도의 데이터가 적을 경우 Sparsity가 커져서 성능이 저하되는 문제가 발생한다.

NBCF를 적용하려면 적어도 sparsity ratio가 99.5%를 넘지 않는 것이 좋다. 이의 경우에는 Matrix Factorization 같은 모델 기반 CF를 사용해야 한다.

 

 

User-based CF(유저 기반 협업 필터링)

두 유저가 얼마나 유사한 아이템을 선호하는지를 가지고 유저 간 유사도를 구한 후, 타겟 유저와 유사도가 높은 유저들이 선호하는 아이템을 추천하는 것이다.

아이템 $i$에 대한 평점 예측을 위해서는 아이템 $i$를 평가한 유저 집합($\Omega_i$)에 속한 모든 유저와의 유사도를 구해야 하는데, 이럴 경우 연산은 늘어나고 성능은 떨어질 수 있다.

 

 

Item-based CF(아이템 기반 협업 필터링)

두 아이템이 유저들로부터 얼마나 유사한 평점을 받았는지를 가지고 아이템 간 유사도를 구한 후, 타겟 아이템과 유사도가 높은 아이템 중 선호도가 큰 아이템을 추천하는 것이다.

 

 

K-Nearest Neighbors CF(KNN CF)

KNN 협업 필터링

유저 집합($\Omega_i$)에 속한 유저 가운데 유저 $u$와 가장 유사한 $K$명의 유저를 이용해 평점을 예측한다.

여기서 유사하다는 건 정의한 유사도 값이 크다는 것을 의미한다.

보통 K는 25에서 50 사이의 값으로 많이 설정하여 사용한다.

 

 

유사도 측정법

두 개체 간의 유사성을 수량화하는 실수 값 함수 또는 척도를 의미한다.

일반적으로 거리의 역수 개념을 사용한다.

두 개체 간 거리를 어떻게 측정하느냐에 따라 유사도 측정 방법이 달라진다.

 

MSDF(Mean Squared Difference Similarity)

$$ msd(u, v) = \frac{1}{|I_{u,v}|} \cdot \sum_{i \in I_{uv}}(r_{ui} - r_{vi})^2 $$
$$ msd_{sim}(u,v) = \frac{1}{msd(u, v) + 1} $$
$$ msd(i, j) = \frac{1}{|U_{i,j}|} \cdot \sum_{u \in U_{ij}}(r_{ui} - r_{uj})^2 $$
$$ msd_{sim}(i, j) = \frac{1}{msd(i, j) + 1} $$

 

Consine Similarity

주어진 같은 차원의 두 벡터 $X$, $Y$에 관하여, 두 벡터 사이의 각을 이용해 구할 수 있는 유사도이다.

두 벡터가 가리키는 방향이 얼마나 유사한지를 의미한다고 볼 수 있다.

$$ \cos(\theta) = \cos(X, Y) = \frac{X \cdot Y}{|X||Y|} $$

유저 벡터 $u$와 아이템 벡터 $i$에 대해서 다음과 같이 거리를 계산한다.

$$ score(u, i) = cos(u, i) = \frac{u \cdot i}{|u| \cdot |i|} $$

둘의 유사도가 클수록 해당 아이템이 유저에게 관련성이 높음을 의미한다.

 

 

Pearson Similarity (Pearson Correlation)

$$ pearson_{sim}(X, Y) = \frac{\sum_{i=1}^{N}(X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{N}(X_i - \bar{X})^2}{\sqrt{\sum_{i=1}^{N}(Y_i - \bar{Y})^2}}} $$

직관적으로 해석하면 ($X$와 $Y$가 함께 변하는 정도) / ($X$와 $Y$가 따로 변하는 정도)이다.

 

 

Jaccard Similarity

집합의 개념을 사용한 유사도이며, 주어진 두 집합 $A$, $B$에 대하여 정의한다.

$$ J(A, B) = \frac{|A \cap B|}{|A \cup B|} = \frac{|A \cup B|}{|A| + |B| - |A \cap B|} $$

Cosine, Pearson 유사도와 달리 길이 또는 차원이 달라도 이론적으로 유사도 계산이 가능하다.

두 집합이 같은 아이템을 얼마나 공유하고 있는지를 나타낸다.

 

 

Rating Prediction

Absolute Rating

전체 유저 $U$, 아이템 $I$에 대한 평점 데이터가 존재할 때, 아이템 $i$에 대한 평점이 있으면서 유저 $u$와 유사한 유저들의 집합이 $\Omega_i$인 경우의 유저 $u$의 아이템 $i$에 대한 평점 $\hat{r}(u, i)$를 예측하면 다음과 같다.

아래의 공식은 모두 UBCF(User-based CF) 기준이다.

 

Average

$$ \hat{r}(u, i) = \frac{\sum_{u' \in \Omega_i} r(u', i)}{\Omega_i} $$

유저 $u$와 유사한 유저들($\Omega_i$)이 매긴 평점을 가지고 평균을 구한다.

 

 

Weighted Average

유저 간의 유사도 값을 가중치로 사용하여 rating의 평균을 낸다.

$$ \hat{r}(u, i) = \frac{\sum_{u' \in \Omega_i} sim(u, u') r(u', i)}{\sum_{u' \in \Omega_i} sim(u, u')} $$

 

그러나 어떠한 유저는 전체적으로 높은 평점을 줄 수도 있고, 반대로 낮게 평점을 줄 수도 있으므로 absolute rating에서는 유저가 평점을 주는 기준이 다를 수 있다.

 

 

Relative Rating

유저의 유저가 매긴 모든아이템에 대한 평균 평점($\bar{r_{u}}$)이 얼마나 높은지 또는 낮은지 그 편차를 사용한다.

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

모든 평점 데이터를 deviation 값으로 바꾼 후 원래의 rating이 아닌 deviation을 예측한다.

최종 예측 평점은 타겟 유저의 평균 rating에 예측된 deviation을 더한다.

$$ \widehat{dev}(u, i) = \frac{\sum_{u' \in \Omega_i} dev(u', i)}{\Omega_i} = \frac{\sum_{u' \in \Omega_i} r(u', i) - \bar{r_u}}{\Omega_i} $$
$$ \hat{r(u, i)} = \hat{dev(u, i)} + \bar{r_{u}} $$
$$ \hat{r}(u, i) = \bar{r_u} + \frac{\sum_{u' \in \Omega_i} sim(u, u') \{r(u', i) - \bar{r_{u'}} \}}{\sum_{u' \in \Omega_i} sim(u, u')} $$

 

 

Top-N Recommendation

Collaborative Filtering이 유저 $u$가 아이템 $i$에 부여할 평점을 예측하는 것이라면, Recommendation System은 예측 평점이 높은 아이템을 유저에게 추천하는 것이다.

아이템의 예측 평점 계산 후 높은 순으로 정렬하여 상위 N개만 뽑아 추천하는 것이다.

 

Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.