[네이버 부스트캠프 AI Tech] 6주차 회고
그 동안 배운 추천 모델에 대해 간략히 정리하는 시간을 가져보도록 하겠다!
CF (Collaborative Filtering, 협업 필터링)
- 가정 : 유저/아이템에 대한 정보가 많을 수록 추천의 효과가 좋을 것이다
- 목적 : 유저 u 가 아이템 i에게 부여할 평점(ex. 선호도, 클릭할 확률)를 예측하는 것
- 방법
1. 주어진 데이터로 유저-아이템 행렬 생성
2. 유사도 기준을 정해서 유저 간의 유사도 or 아이템 간의 유사도를 구함
3. 주어진 평점과 유사도를 활용하여, 행렬의 비어있는 값(평점)을 예측하여 추천에 활용함
CF 기반 추천 시스템의 원리
- 유저 A 에게 아이템을 추천해줘야 한다
- 유저 A 와 비슷한 취향을 가진 유저들이 선호하는 아이템을 A 에게 추천
- 아이템이 가진 속성을 사용하지 않으면서, 높은 추천 성능을 보인다!
NBCF (Neighborhood-based Collaborative Filtering, 이웃 기반 협업 필터링)
* Memory-based CF 라고도 한다
최종 목적 : 유저 u 가 아이템 i에게 부여할 평점을 예측하는 것
장점
- 구현이 간단하고 이해가 쉬움
단점 (NBCF 뿐만이 아니라, 추천시스템이 풀어야할 문제)
- Scalability 문제 : 유저 / 아이템이 늘어날 수록 확장성이 떨어짐
- Sparsity 문제 : 주어진 평점/선호도 데이터가 적을 경우 성능이 저하됨
(cf. 이후 배운 Model Based CF 인 Matrix Factorization CF 가 이 단점들을 극복함)
특징
- 주어진 데이터를 활용하기 때문에, 유저-아이템 행렬은 대부분이 비어있는 sparse matrix (희소 행렬) 이다.
- NBCF 를 활용하려면 sparsity ratio (비어있는 원소/행렬 전체 원소) <= 99.5 % 인 것이 좋다
Item 1 | Item 2 | Item 3 | |
User A | 5 | 5 | 4 |
User B | 4 | ? (예측해야하는 값 | 3 |
User C | 2 | 1 | 2 |
UBCF (User-Based Collaborated Filtering, 유저 기반 협업 필터링)
- 유저 간 유사도를 구하고, 타겟 유저와 유사도가 높은 유저들이 선호하는 아이템을 추천
IBCF (Item-Based Collaborative Filtering, 아이템 기반 협업 필터링)
- 아이템 간 유사도를 구하고, 타겟 아이템과 유사도가 높은 아이템 중 선호도가 큰 아이템을 추천
KNN CF (K-Nearest Neighbors CF, KNN 협업 필터링)
NBCF 의 한계
- 유저 u 가 아이템 i 에 대해 매길 평점을 예측하기 위해서는, $\omega_i$ (아이템 i 에 대해 평가한 모든 유저들)와 유저 u 간의 유사도를 구해야한다
- 따라서 유저가 많아질 수록 연산량이 커지고, 오히려 성능이 떨어지기도 한다
그래서 KNN CF 는 CF 문제를 KNN 을 이용하여 풀고자 한다.
방법 : $\omega_i$ 에 속한 유저들 중, 유저 u 와 가장 유사한 유저 K명이 아이템 i 에 매긴 평점을 이용해 유저 u 가 아이템 i에 매긴 평점을 예측
Similarity Measure (유사도 측정법)
Mean Squared Difference Similarity
- 유사도는 유클리드 거리(mean squared difference)에 반비례 함 -> 분모로 사용
- 분모가 0이 되는 것을 방지해줘야함 -> 분모에 1을 더해서 smoothing 해줌
- $|I_{uv}|$ : 유저 u 와 유저 v 모두가 평가한 전체 item 수
- $|U_{ij}|$ : 아이템 i와 아이템 j 모두를 평가한 전체 user 수
유저 u 와 유저 v 간의 rating 차이
$$msd(u,v) = \dfrac{1}{|I_uv|} \cdot \sum\limits_{i \in I_{uv} } (r_{ui} - r_{vi})^2 $$
유저 u 와 유저 v 간의 유사도
$$msd_sim(u,v) = \dfrac{1}{msd(u,v) + 1}$$
아이템 i 와 아이템 j 간의 rating 차이
$$msd(i, j) = \dfrac{1}{|U_ij|} \cdot \sum\limits_{u \in U_{ij} } (r_{ui} - r_{uj})^2 $$
유저 u 와 유저 v 간의 유사도 (분모가 0이 되는 것을 방지하기 위해 분모에 1을 더해서 smoothing 해줌)
$$msd_sim(i, j) = \dfrac{1}{msd(i, j) + 1}$$
Cosine Similarity
- 차원이 같은 두 벡터의 각도를 이용하여 구할 수 있는 유사도
- 직관적으로, 두 벡터가 가리키는 방향이 얼마나 유사한지를 나타냄
- 의미 : -1 (반대) ~ 1 (일치)
$$cos(\Theta ) = cos(X, Y) = \dfrac{X \cdot Y}{|X||Y|} = \dfrac{\sum_{i=1}^{N}X_i Y_i}{\sqrt{\sum_{i=1}^{N}X_i^2}\sqrt{\sum_{i=1}^{N}Y_i^2}}$$
Pearson Similarity (Pearson Correlation)
- 차원이 같은 두 벡터를 표본평균으로 정규화한 후 코사인 유사도를 구한 값
- 직관적으로, (X와 Y가 함께 변하는 정도) / (X와 Y가 따로 변하는 정도)
- 의미 : -1(음의 상관관계) ~ 0 (서로 독립) ~ 1 (양의 상관관계)
$$pearson\_sim(X, Y) = \dfrac{\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}}$$
Jaccard Similarity
- 차원이 달라도 계산이 가능한, 주어진 두 집합 간에 같은 아이템을 얼마나 공유하고 있는지 나타내는 유사도
- 의미 : 0 (두 집합에 겹치는 아이템이 하나도 없음) ~ 1 (두 집합이 가진 아이템이 모두 같음)
$$J(A,B) = \dfrac{|A \cap B|}{|A \cup B|} = \dfrac{|A \cap B|}{|A| + |B| - |A \cap B|}$$
Rating Prediction (평점 예측)
- CF 를 이용하여 평점을 예측해보자!
UBCF (User-Based Collaborated Filtering, 유저 기반 협업 필터링)
- 유저 간 유사도를 구하고, 타겟 유저와 유사도가 높은 유저들이 선호하는 아이템을 추천
Average
IBCF (Item-Based Collaborative Filtering, 아이템 기반 협업 필터링)
- 아이템 간 유사도를 구하고, 타겟 아이템과 유사도가 높은 아이템 중 선호도가 큰 아이템을 추천
MBCF (Model Based Collaborative Filtering)
SVM (Support Vector Machine)
MF (Matrix Factorization)
- User-Item 행렬을 저차원의 User 와 Item 의 latent factor 행렬의 곱으로 분해하는 방법
- R (rating matrix) 를 P (user matrix) 와 Q (item matrix) 로 분해하여, 실제 정답 R 과 최대한 유사하게 $\hat{R}$ 을 추론한다
$$R \approx P \times Q^T = \hat{R}$$
Objective Funciton
$$\min\limits_{P, Q} \sum\limits_{observed \,r_{u, i}} (r_{u, i} - p_u^T q_i)^2 - \lambda(||p_u||^2_2 + ||q_i||^2_2)$$
- $r_{u, i}$ : 학습 데이터에 있는 유저 u의 아이템 i에 대한 실제 rating
- $p_u$ : 유저 u 의 latent vector (모델이 학습하는 파라미터)
- $q_i$ : 아이템 i 의 latent vector (모델이 학습하는 파라미터)
- $\lambda$ : L2-정규화 term ($p_u$, $q_i$ 가 오버피팅 되는 것을 방지)
# TODO
FM (Factorization Machine)
- 논문 : Factorization Machines
- SVM과 Factorization Model 의 장점을 결합한 FM 을 처음 소개한 논문
FFM
NCF
WDN
DCN
CNN_FM