본문 바로가기

추천 시스템/Collaborative Filtering

MF(Matrix Factorization, 행렬분해)

MF는 CF(Collaborative Filtering)의 한 기법이다. MF는 user-item의 매트릭스에 비어있는 요소를 채우는 기술이다.

 

아래의 행렬이 user-item 매트릭스라고 가정해보자

$\begin{bmatrix}  
2 & 5 \\  
3 & ?  
\end{bmatrix}$

2번째 user(행)가 두 번째 item에 대해서 평점을 매기지 않았다. 실제로 user-item 매트릭스는 결측치가 매우 많다. 대부분의 사람들이 소수의 영화나 아이템을 구매하기 때문이다.

이런 결측치를 채우기 위해서 차원을 축소해 영화의 Latent 한 특성(장르, 미장센, 배우..)을 찾아 별점을 채운다.

 

매트릭스를 채우기 위해서는 PCA나 SVD, SVD++같은 알고리즘으로 분해하거나 축소를 하며 latent 한 특성을 찾는다. 

그 후, 보다 나은 Latent를 유추하기 위해 optimization을 반복한다.

 

구현 순서

1. sparse 한 data 채우기

2. Latent 한 특성 찾기(SVD, PCA..)

3. optimization으로 특 이치 학습

 

 

 

1. sparse 한 data 채우기

결측치를 채울 땐 base line, 평균값, 랜덤..으로 결측치를 채운다

 

 

 

2. Latent한 특성 찾기

MF에서 가장 많이 사용되는 SVD를 사용해 설명하겠다. 

U: left singular vector, m*m크기의 행렬

Σ: 비 대각 성분이 0인 m*n크기의 행렬

V: right singular vector, n*n크기의 행렬

K: hyperparameter

 

$\hat{R} = \hat{U}  \Sigma  \hat{V^T}$이다. Σ는 특성들이 얼마나 중요한지 행렬로 나타내고, 중요한 순서대로 정렬한 후 k개만큼 자른다. 즉, 중요한 latent 요소들이 남아서 hat(R) 채우게 되는 것이다.

 

위의 그림을 수식으로 나타내면 아래와 같다.

$\hat{R}_{ui}= \Sigma p_{uk} \sigma_{k} q_{ik}$

 

 

 

3. optimization

이제 Σ 즉, 특이 치를 학습해야 한다.

 

- objective function(목적함수)

일반적으로 SGD를 사용해 optimization을 시키지만 objective function이 non-convex이기 때문에x, y가 모두 미지수이기 때문) ALS를 사용할 때 더 효율이 좋은 케이스가 있다.

 

1. parallelization 즉, 병렬 처리 환경에서 좋은 성능을 보인다.

2. implicit data로 input이 주어진 경우이다. 

 

ALS는 Y를 고정시키고 X를 optimize 한 다음, X를 고정시키고 Y를 optimize한 후 수렴할 때까지 반복한다. 

 

 

 

*ALS with implicit feedback

 

ALS를 optimizer로 활용하는 목적함수는 기본적으로 explilcit feedback을 대상 데이터로 한 수식이다. 그래서 implicit feedback을 처리하는 접근방법이 제안되었다. 

우선 한 user에 대한 item의 preference를 정의하자. 조회 횟수나 머무른 시간 등이 preference가 될 수 있다.

preference 값을 항상 신뢰할 수 없기에 confidence level을 같이 고려한다. 

결론적인 objective function은 아래와 같이 정의된다.