이 글은 갉아먹는 딥러닝 블로그의 추천시스템 시리즈( yeomko.tistory.com/3?category=805638 )와 출처의 글들을 참고해서 저의 견해를 추가한 공부를 위한 정리글입니다.
1. 추천 알고리즘의 종류
Contents Based Filtering
- 각각의 사용자와 아이템에 대하여 프로필을 작성하고, 이를 기반으로 추천
- DB 설계, 수작업, 카테고리 기반의 추천 방식에 의지하는 국내의 알고리즘이 위의 방식을 따른다.
Collaborative Filtering
- 프로필 데이터 없이, 사용자의 과거 행동 데이터만 가지고 추천을 진행
- 데이터를 Flow 형태로 바꿔야 하고, 행동 데이터 log를 쌓아야 한다.
- DB 설계가 복잡하고, 데이터 전처리와 모델링에 수학이 많이 필요하다.
Hybrid Filtering
- Contents Based Filtering과 Collaborative Filtering 함께 사용
- 일정 데이터가 쌓이기 직전까지는 contents based 추천, 사용 기록이 어느 정도 쌓인 후에는 collaborative filtering 사용
- 일반적으로 충분한 양의 데이터가 있는 경우 Collaborative Filtering이 우수
2. 알고리즘 추천 기법 - Collaborative Filtering
- 평점 데이터를 행렬 형태로 표현한다고 하자. 데이터가 모두 차있으면 좋겠지만, 데이터가 완전히 있지 않은 경우가 있다.
- 데이터는 Explicit Dataset과 Implicit Dataset으로 구분된다.
Explicit Dataset: 선호와 비선호를 명확하게 구분해준 데이터 셋주어진 평점만으로 선호/비선호를 알 수 잇으므로 평점 데이터만으로 사용자의 선호도를 학습할 수 있다.
- ex) 영화가 좋든 안좋든 5점을 줌
- Neighborhood model : Pearson 상관계수를 통해 유사도 계산
- 피어슨 상관계수: 양,음으로 변할 때 함께 양,음으로 변하는 정도
- User-oriented Neighborhood model
- ex) 유사한 사용자가 좋아한 아이템 추천 ex) 나랑 비슷한 성향을 가진 사람이 본 영화를 추천
- Item-oriented Neighborhood
- ex) A 작가 추천 action, 이것을 기억해두었다가 같은 작가를 검색했을 때
- ex) 사용자가 남긴 평점 기반 아이템 평점 예측 ex) A라는 item을 구매한 사람은 B라는 것 구매. B도 추천.
Implicit Dataset: 선호와 비선호의 구분 없이 행동의 빈도수만 기록한 데이터 셋선호하는 아이템은 알 수 있지만, 비선호하는 아이템은 알기 힘들다.
- Latent Factor model : 관찰된 데이터와 잠재된 데이터를 연결시키는 기법
- 행렬을 사용자와 아이템 Latent Factor로 분해하고 각각 학습시키는 Matrix Factorization 기법이 적합하다.
- 행동 패턴 데이터를 그대로 쓰는 것이 아니라, 그 데이터에서 Factor를 추출해낸 값으로 영화 추천을 한다.
- 데이터가 대규모로 쌓이기 전까지 쓰기 힘들다.
- 유저의 행동 데이터를 "숨겨진 변수"로 바꾸고, 숨겨진 변수로 타게팅 작업을 한다. 장기간 이용하는 유저의 LF 정확도는 점점 올라간다.
3. Matrix Factorization
Collaborative Filtering의 세부적인 알고리즘
- Neighborhood model
- Latent Factor model
- Matrix Factorization
- 어떻게 평점 행렬을 사용자와 아이템 행렬로 쪼갤 수 있을까?
- Matrix Factorization
Basic Concept
- R: original rating data matrix (평점 데이터)
- Nu: number of users (사용자수)
- Ni: number of items (아이템의 수)
- Nf: dimension of latent factor (Matrix Factorization 학습 시에 정하는 임의의 차원수)
- X: user latent factor matrix (Nf x Nu)
- Y: item latent factor matrix (Nf x Ni)
- xu : user latent vector of specific index u (특정 사용자의 특징 벡터)
- yi : item latent vector of specific index i (특정 아이템의 특징 벡터)
- 벡터는 1차원 array와 같다. Nf x 1 크기의 열벡터
- R' : predicted rating data matrix
- X 행렬의 전치 행렬과 Y 행렬의 곱, 평점 예측 행렬
- 예측 평점 수식
- Loss Function
- X와 Y를 학습시키기 위한 함수, 오차가 최대한 작아지도록 수식을 구성
- 예측 평점과 실제 평점 간의 차이 + 정규화
- X와 Y를 학습시키기 위한 함수, 오차가 최대한 작아지도록 수식을 구성
- Optimization: 최적화 수행하는 알고리즘
- Grandient Descent 알고리즘
- loss를 미분하고, learning rate를 곱한 후 행렬 값을 업데이트
- 행렬 X,Y를 동시에 최적화 시키는 것은 Non-convex problem으로 NP에 속한다.
- 느리고 많은 반복이 필요하다.
- Alternating Least Squares 알고리즘 (ALS)
- X와 Y 중 하나를 고정시키고 다른 하나를 최적화 시킨다.
- 번갈아가며 반복하여 짧은 시간 내에 최적의 X와 Y를 찾아낸다.
4. Alternating Least Squares 알고리즘
Basic Concept
- 사용자와 아이템의 Latent Factor를 한 번씩 번갈아가며 학습시킨다.
Loss Function
- r_ui : original rating
- (x_u)^T*y_i : predicted rating
- (r_ui - (x_u)^T*y_i)^2 : previous loss
- 기존의 Loss function과 달리 r_ui 대신 cui(예측값의 신뢰도)와 pui(선호)를 사용한다.
- p_ui = 1 if r_ui>0
- 2 if r_ui=0
- c_ui = 1 + alpha*r_ui
- 평점이 남아있지 않은 데이터는 0으로 바꾸어 데이터의 신뢰도가 낮다.
ALS
- 사용자 혹은 아이템의 Latent Factor 행렬을 아주 작은 랜덤값으로 초기화하고, 둘 중 하나를 상수처럼 고정시켜 Loss Function을 Convex Function으로 만든다.
- 그리고 이를 미분한 다음, 미분 값을 0으로 만드는 사용자 혹은 아이템의 Latent Factor을 계산한다.
- 이 과정을 사용자,아이템을 번갈아 반복하며 최적의 X,Y를 찾는다.
- 최적화 Optimizer은 User Latent Factor Optimizer과 Item Latent Factor Optimizer가 있다.
출처
- 갉아먹는 추천 알고리즘
- 추천 알고리즘 3단계 - CB vs CF vs LF
yeomko.tistory.com/3?category=805638
blog.pabii.co.kr/recommendation-algorithm-cb-cf-lf/