협업 필터링 CF : Collaborative Filtering
많은 유저들(collaborative)로부터 얻은 정보를 이용해 유저의 관심사를 자동으로 예측
데이터가 축적될 수록 협업의 효과가 커지는 것은 머신러닝 모델에서도 학습데이터가 많아지면 성능이 좋아지는 것과 같다.
ex) 노트북을 본 유저들이 구매한 다른 상품 추천
유저가 아이템에 부여할 평점/선호도/클릭확률을 예측하는 것이 목표이다.
방법
- 유저-아이템 행렬을 생성한다.
유저-아이템 행렬에는 유저가 아이템에 대해 기록한 선호도나 평점같은 것이다.
하지만 이 행렬은 다 채워지기 힘들다. 유저가 모든 아이템에 대해서 선호도를 표시할 수 없기 때문이다. - 유사도 기준을 정하고, 유저끼리 혹은 아이템간의 유사도를 구한다.
- 비어있는 값을 주어진 평점과 유사도를 이용해서 예측한다.
아직 소비하지 않은 item에 대해서 평점를 구하는 것이다. - 예측한 평점을 추천에 활용한다.
유저와 아이템의 유사도를 이용해서 평점을 예측한다. 같은 아이템을 선호하는 사람들끼리 비슷한 취향을 가졌다고 생각하고 그 집단에서의 A사람들이 선호하는 것을 B사람도 선호하고, A사람이 싫어하는 것을 B사람도 싫어할 것이라고 생각하는 것이다. 이렇게 협업 필터링은 아이템이 가진 속성(ex. 장르, 색)을 사용하지 않고도 높은 추천 성능을 보인다.
이웃기반 협업 필터링 Neighborhood-based Collaborative Filtering
영화 V | 영화 W | 영화 X | 영화 Y | 영화 Z | |
User A | 5 | 4.5 | 5 | 2 | 1 |
User B | 4 | 5 | ? | 1 | 2 |
User C | 2 | 1 | 1 | 4 | 5 |
User D | 4 | 2 | 3 | 2 | 4 |
UBCF : User-Based CF
유저간의 유사도를 구한 뒤 타겟 유저와 유사도가 높은 유저들이 선호하는 아이템을 추천하거나 선호하는 아이템의 평점을 참고해서 평점(타겟 유저가 선호할만한 아이템에 평점을 매긴다면 몇 점이 될지)을 예측한다.
위의 표에서 행으로 살펴보면 유저 A와 유저 B가 유사도가 높은 것(mathmatically highly correlated)을 확인할 수 있다. 그래서 유저 A와 B의 영화 X에 대한 선호도가 비슷하게 높을 것으로 예측할 수 있다.
IBCF : Item-Based CF
아이템간 유사도를 구한 뒤, 타겟 아이템과 유사도가 높은 아이템 중 선호도가 큰 아이템을 추천한다.
영화 X와 비슷한 평점을 받고있는 유사도가 높은 다른 영화를 찾으려면 열로 보아야한다. 영화 V,W가 분포가 비슷한 것을 관찰할 수 있다. 유저 B의 영화 V,W가 높기 때문에 스타워즈도 높을 것으로 예상할 수 있다.
NBCF의 특징
- 구현이 간단하다
- 이해가 쉽다
- item이나 user가 늘어나면 확장성이 떨어진다 : Scalability
벡터의 차원이 점점 커지게 된다. -> Matrix Factorization으로 해결 - 주어진 평점 데이터가 적으면 성능이 떨어진다 : Sparsity
유저-아이템 행렬이 너무 많이 비어있으면 제대로 평점을 구할 수 없다. -> Matrix Factorization같은 model-based CF 사용으로 해결
Sparsity
유저와 아이템 숫자에 비해서 우리가 가지고 있는 평점/선호도 데이터가 적을 경우
실제로 유저-아이템 행렬의 원소가 비어있다. -> 희소행렬(sparse matrix)
그래서 행렬 전체 원소 중 비어 있는 원소의 비율인 sparsity ratio>99.5를 넘지 않을 때 NBCF를 사용해야 한다. 넘으면 모델 기반 CF를 사용해야 한다.
KNN 협업 필터링 : K-Nearest Neighbors CF
$\Omega_{i}$ : 한 아이템 i에 대해 평가를 매긴 유저들의 집합
위의 영화 예시에서는 영화 X에 대해 평가를 한 유저는 4명이므로 $\Omega_{X}$=4이다.
KNN CF는 주어진 타겟과 가장 가까운 k명의 이웃의 데이터를 참고하는 방법이다.
$\Omega_{i}$ 에 속한 유저들 가운데 타겟 유저와 가장 유사한 K명의 유저를 유사도를 통해 알아내어 K명을 이용한다.
NBCF에서는 K를 25~50으로 많이 사용하지만 직접 튜닝해야 한다.
유사도 측정법 : Similarity Measure
정확한 유사도를 측정하기 위해서 유사성을 수량화 하는 함수
일반적으로 거리가 가까울수록 유사도가 커진다. 두 개체간 거리를 어떻게 측정하냐에 따라 유사도 측정방법이 달라진다.
MSDS : Mean Squared Difference Similarity
거의 추천시스템에서만 사용한다.
u와 v라는 두 개체(유저)의 유사도를 구한다고 하자
Mean Squared Difference
$$msd(u,v)=\frac{1}{|I_{uv}|}\cdot \displaystyle\sum_{i\in I_{uv}} (r_{ui}-r_{vi})^{2}$$
유저의 아이템의 각각의 rating의 차를 구해서 제곱하고, 유저u와 v 모두에 의해 평가된 아이템의 수로 나누어준다.
Mean Squared Difference Similarity
$$msd\;similarity(u,v)=\frac{1}{msd(u,v) + 1}$$
MSD의 mean squared 연산이 유클리드 거리 연산과 비슷하게 때문에 MSDS는 유클리드 거리에 반비례한다.
평점이 비슷할수록 MSD는 0에 가까워진다. 결국 MSD가 MSDS에서 분모로 들어가기 때문에 MSDS는 1이 된다.
분모가 0이 되는 것을 방지하기 위헤서 smoothing값이 1더해져 있는 것을 확인할 수 있다. 그래서 최댓값이 1이 된다.
Cosine Similarity : 코사인 유사도
같은 차원을 가진 두 벡터의 각도를 가지고 유사도를 구한다.
두 벡터의 방향이 같으면 각도가 같아서 각도의 차이가 없다. 그래서 유사도는 1에 가깝다.
두 벡터의 방향이 다르면 각도가 180도 차이가 나서 유사도는 -1이다.
이론적으로 평점의 크키(벡터의 길이)가 달라도 각도만 같으면 유사도는 크다.
$$cos(\theta) = cos(X,Y)=\frac{X\cdot Y}{|X||Y|} = \frac{\Sigma^{N}_{i=1}X_{i}Y_{i}}{\sqrt{\Sigma^{N}_{i=1}X_{i}^{2}} \sqrt{\Sigma^{N}_{i=1}Y_{i}^{2}}}$$
Pearson Similaritiy / Pearson Correlation : 피어슨 유사도
같은 차원의 벡터에 대해서 각 벡터를 표본평균으로 정규화한 뒤에 정규화한 벡터들의 코사인 유사도를 구한 것
$$pearson_sim(X,Y) = \frac{\Sigma^{N}_{i=1}(X_{i}-\bar{X})_{i}(Y_{i}-\bar{Y})_{i}}{\sqrt{\Sigma^{N}_{i=1}(X_{i}-\bar{X})_{i}^{2}} \sqrt{\Sigma^{N}_{i=1}(Y_{i}-\bar{Y})_{i}^{2}}}$$
코사인 유사도와 다른점은 표본평균을 했다는 것이다.
표본평균으로 정규화했기 때문에 각 벡터의 rating의 크기 차이를 고려할 수 있다.
ex) user A의 평점 범위 3.5~4.5, user B의 평점 범위 2~5일 때 둘의 유사도를 바로 구하는 것보다 표본평균으로 정규화하면 두 범위의 크기 차이를 보정해준다.
Jaccard Similarity : 자카드 유사도
벡터의 개념이 아니라 집합에 대해서 정의한다.
그래서 길이가 달라도 유사도 계산 가능하다.
$$J(A,B)=\frac{|A\cap B|}{|A\cup B|}=\frac{|A\cap B|}{|A|+|B|-|A\cap B|}$$
두 집합이 같은 아이템을 얼마나 공유하고 있는지를 나타낸다.
- 두 집합이 가진 아이템이 모두 같다 : 1
- 두 집합에 겹치는 아이템이 하나도 없다 : 0
사용 예시) 맛집 평점 4.5를 받은 식당에 대해서 자카드 유사도를 구한다.
'부스트캠프 AI Tech 3기 > 이론 : U-stage' 카테고리의 다른 글
[Day32] Collaborative Filtering 4-1 MBCF & SVD (0) | 2022.03.09 |
---|---|
[Day32] Collaborative Filtering 3-2 K-Nearest Neighbors CF&Similarity Functions& Rating Prediction (0) | 2022.03.08 |
[추천시스템] Precision@K, Recall@K, AP@K (0) | 2022.03.08 |
[Day31] 추천 시스템 Basic 2-2 TF-IDF를 활용한 컨텐츠 기반 추천 (0) | 2022.03.08 |
[Day31] 추천 시스템 Basic 2-1 연관 분석 (0) | 2022.03.07 |