정의
- 사용자의 구매 패턴이나 평점을 이용해 다른 사람들의 구매 패턴, 평점을 통해 추천하는 방법
- 추가적인 사용자의 개인정보나 아이템의 정보 없이도 추천할 수 있는 것이 장점
- 종류
- 최근접 이웃기반(KNN)
- 잠재요인기반(Latent Factor Collaborative Filtering)
이웃기반의 협업 필터링(Neighborhood Based Method)
- 정의
- Neighborhood based Collaborative Filtering은 메모리 기반 알고리즘으로 협업 필터링을 위해 개발된 초기 알고리즘
- 알고리즘
- User-based collaborative filtering
- 사용자의 구매 패턴(평점)과 유사한 사용자를 찾아서 추천 리스트 생성
- Item-based collaborative filtering
- 특정 사용자가 준 점수 간의 유사한 상품을 찾아서 추천 리스트 생성
- K-Nearest Neighbors
- 가장 근접한 K개의 이웃을 통해 예측하는 방법
- 데이터(Explicit Feedback Data)
- 유저가 자신의 선호도를 직접 표현한 데이터 예시
- KNN기반 협업필터링의 Target - ??로 표현된 평점 예측
7 | 6 | 7 | 4 | 5 | 4 |
6 | 7 | ?? | 4 | 3 | 4 |
?? | 3 | 3 | 1 | 1 | ?? |
1 | 2 | 2 | 3 | 3 | 4 |
1 | ?? | 1 | 2 | 3 | 3 |
User-based collaborative filtering
7 | 6 | 7 | 4 | 5 | 4 | 5.5 | 0.956 | 0.894 |
6 | 7 | ?? | 4 | 3 | 4 | 4.8 | 0.981 | 0.939 |
?? | 3 | 3 | 1 | 1 | ?? | 2.0 | 1.0 | 1.0 |
1 | 2 | 2 | 3 | 3 | 4 | 2.5 | 0.789 | -1.0 |
1 | ?? | 1 | 2 | 3 | 3 | 2.0 | 0.645 | -0.817 |
- User기반(row) Similarity 예시 (User1, User3) - 있는 정보로만 유사도 계산!
- Cosine(x,y)=∑xi2⋅∑yi2∑xiyi=36+49+16+259+9+1+118+21+4+5=0.956
- Pearson(x,y)=∑(xi−xˉ)2⋅∑(yi−yˉ)2∑(xi−xˉ)(yi−yˉ)={(6−5.5)2+(7−5.5)2+(4−5.5)2+(5−5.5)2}{(3−2.0)2+(3−2.0)2+(1−2.0)2+(1−2.0)2}(6−5.5)(3−2.0)+(7−5.5)(3−2.0)+(4−5.5)(1−2.0)+(5−5.5)(1−2.0)=0.894
- 예를 들어, User3과 유사한 사용자 2명을 찾으면 User1과 User2가 선택되고 유사도 기반 가중평균은 다음과 같음
r31^=Person13+Pearson23r11⋅Person13+r21⋅Person23=0.894+0.9397⋅0.894+6⋅0.939≈6.49
r36^=Person13+Pearson23r16⋅Person13+r26⋅Person23=0.894+0.9394⋅0.894+4⋅0.939=4
→ 그런데, User의 경향(편향)이 존재
User1, User2는 평균적으로 높은 평점을, User3~User5는 평균적으로 낮은 평점을 주는 경향
따라서, 진짜 Item1에 대한 평가가 높은 건지, 아니면 User의 성향에 따른 편향이 생긴건지 의문이 들며 이를 제거해줘야 함
- Bias를 제거한 가중평균으로 User3의 평점을 예측하기
- User1, User2와 User3, User4, User5는 평균 평점의 차이가 크게 존재하기 때문에 조정 필요
- 고객의 경향성 등의 bias 제거를 위해 (User의 Item 평점 - 해당 User의 Item 평균 평점)의 유사도 가중 평균을 취함으로써 해결
r31^=r3ˉ+Person13+Pearson23(r11−r1ˉ)⋅Person13+(r21−r2ˉ)⋅Person23=2+0.894+0.939(7−5.5)⋅0.894+(6−4.8)⋅0.939≈3.35
r36^=r3ˉ+Person13+Pearson23(r16−r1ˉ)⋅Person13+(r26−r2ˉ)⋅Person23=2+0.894+0.939(4−5.5)⋅0.894+(4−4.8)⋅0.939≈0.86
Item-based collaborative filtering
- User-based collaborative filtering과 반대로 Column(Item)끼리의 유사도를 계산해 활용하는 방식
- Item을 기준으로 User들이 비슷한 평점을 내린 유사한 Item을 찾는 것이 목적
7 | 6 | 7 | 4 | 5 | 4 | 5.5 |
6 | 7 | ?? | 4 | 3 | 4 | 4.8 |
?? | 3 | 3 | 1 | 1 | ?? | 2.0 |
1 | 2 | 2 | 3 | 3 | 4 | 2.5 |
1 | ?? | 1 | 2 | 3 | 3 | 2.0 |
1 | 0.735 | 0.912 | -0.848 | -0.813 | -0.990 | |
-0.990 | -0.622 | -0.912 | 0.829 | 0.730 | 1 | |
최근접 이웃 기반 방법의 장단점
- 장점
- 간단하고 직관적인 접근 방식 때문에 구현 및 디버그가 쉬움
- 특정 Item을 추천하는 이유를 정당화하기 쉽고 Item 기반 방법의 해석 가능성이 두드러짐
- 추천 리스트에 새로운 Item과 User가 추가되어도 상대적으로 안정적
- 단점
- User 기반 방법의 시간, 속도, 메모리가 많이 필요 (일반적으로 # of Users > # of Items)
- 희소성(sparsity) 때문에 제한된 범위가 있음
- John과 비슷한 이웃 중 아무도 해리포터를 평가하지 않으면, John의 해리포터에 대한 등급 예측을 제공할 수 없음
잠재요인기반의 협업 필터링(Latent Factor Collaborative Filtering)
- Neighborhood vs Latent Factor
- 이웃 기반 - Item Space와 User Space 내 벡터 간 유사도를 통해 추천
- 잠재요인 기반 - Item Space와 User Space 각각에 대한 Latent Space를 만들어 두 matrix의 곱을 통해 추천 진행
- 정의
- Rating Matrix에서 빈 공간을 채우기 위해 사용자와 상품을 잘 표현하는 차원(Latent Factor)을 찾는 방법
- 행렬 분해 알고리즘을 통해 User - Item 상호작용 행렬을 2개의 저 차원(n×m) 직사각형 행렬(User Matrix & Item Matrix)의 곱으로 분해하여 작동
- 즉, Rating Matrix = User Latent matrix x Item Latent matrix
- Matrix Factorization의 원리
- 이때, 사용하는 방법으로 Observed Only MF, Weighted MF, SVD 등이 있지만, 여기서는 SGD, ALS 방식을 다룸
- SGD(Stochastic Gradient Descent)
- 정의
- 고유값 분해(Eigen Value Decomposition)와 같은 행렬을 대각화하는 방법
- Rating Matrix R과 User letent matrix U와 Item latent matrix V내적의 차이를 최소화하는 U,V를 찾음
- Gradient Descent를 통해 U,V를 업데이트
- 위 식은 다음과 같이 구체화하여 포현할 수 있다.
- Gradient Descent에 의해 J를 U,V의 각 원소로 편미분한 값은 다음과 같다.
- Weight가 폭발적으로 증가하는 Gradient Exploding 방지를 위해 규제항을 추가하면 다음과 같다.
- 이에 따라 규제항이 추가된 후 Gradient Descent에 의해 J를 U,V의 각 원소로 편미분한 값은 다음과 같다.
- 이후 해당 편미분 값을 이용해 한 번의 에폭으로 각 Latent Matrix의 원소를 업데이트 한다. (α: learning rate)
- 예시
- Explicit Feedback 형태의 User 4명에 대한 3개의 Item 평점 Matrix가 다음과 같이 주어졌다고 하자.
- User Latent와 Item Latent의 값을 임의로 초기화 (U의 column size = V의 column size는 사용자 임의 지정 - ALS 논문에서는 20을 주로 사용)
- Gradient Descent 진행 - r12(=3) 예시 (α=0.05,λ=0.01)
e12=3−0.6663=2.3337
∂u1∂J∣j=2=−2.3337⋅(−1.1078,0.8972)+0.01⋅(0.5756,1.4534)
∂v2∂J∣i=1=−2.3337⋅(0.5756,1.4534)+0.01⋅(−1.1078,0.8972)
- 모든 평점에 대해 반복 (Epoch:1)
- 10-epoch 결과
- User1의 경우 Item1에 대한 예측 평점은 2.7458이므로 추천
- User4의 경우 Item2에 대한 예측 평점은 -1.9994로 추천하지 않음
- User Latent Matrix, Item Latent Matrix 자체를 분석 등으로 활용 가능
- SGD의 장점(딥러닝의 장점)
- 유연한 모델로, 다른 Loss Function을 사용 가능
- ALS(Alternating Least Squares) (참고1, 참고2)
- 정의
- SGD가 두 개의 행렬(User Latent Matrix, Item Latent matrix)을 동시에 최적화하는 방법이라면, ALS는 두 행렬 중 하나를 고정시키고 다른 하나의 행렬을 순차적으로 반복하면서 최적화하는 방법
- 기존의 최적화 문제가 Convex 형태로 바뀌기 때문에 수렴된 행렬을 찾을 수 있음
- 알고리즘
- 초기 Item, User 행렬을 초기화
- Item 행렬을 고정하고 User 행렬을 최적화
- User 행렬을 고정하고 Item 행렬을 최적화
- 2번, 3번 과정을 반복
- 요약
- Matrix Factorization은 아래와 같은 Cost Function을 최소화 하도록 두 행렬 U와 V를 찾는 것
여기서, 앞 부분은 원래의 평점행렬과 근사치 사이의 MSE, 뒷 부분은 규제항
만약, 하나의 행렬을 고정시킨다면, 해당 최적화 문제는 기존 선형회귀 문제(∣∣y−Xβ∣∣2)와 동일하게 됨 (β^=(XTX)−1XTy)
즉, cost functioon은 아래와 같이 두 개로 나눌 수 있다.
여기서, ui와 vj에 해당하는 solution은 다음과 같다.
- 예시 - 위와 동일한 예제를 ALS로
- STEP1. User Latent와 Item Latent의 값을 임의로 초기화 (U의 column size = V의 column size는 사용자 임의 지정 - ALS 논문에서는 20을 주로 사용)
- STEP2. Item Matrix를 고정하고, User Matrix를 최적화
- ui=(VTV+λI)−1VTRi
- 모든 row에 대해서 진행
- u1=(VTV+λI)−1VTR1.=[0.3151,3.2962]
- u2=(VTV+λI)−1VTR2.=[∗∗∗,∗∗∗]
- u3=(VTV+λI)−1VTR3.=[∗∗∗,∗∗∗]
- u4=(VTV+λI)−1VTR4.=[∗∗∗,∗∗∗]
- STEP3. User Matrix를 고정하고 Item Matrix를 최적화
- vj=(UTU+λI)−1UTR.j
- 모든 row에 대해서 진행
- v1=(UTU+λI)−1UTR.1
- v2=(UTU+λI)−1UTR.2