13 Security Lab

[Recommend System] matrix factorization 으로 구현하기 본문

Computer Science/Projects

[Recommend System] matrix factorization 으로 구현하기

Maj0r Tom 2018. 5. 17. 23:09

Recommend System?

Recommend System is a subclass of information filtering system that seeks to predict the "rating" or "preference" that a user would give to an item.

 

 

 

 

1. Simple Recommend System Tutorial

 

 

Recommend System 을 위한 간단한 행렬식에 matrix factorization + regularization 적용

 

추천시스템을 Matrix completion problem 으로 보고 접근한다.

User-Movie Recommend System을 예로 들 수 있다.

 

 

The mathematics of matrix factorization

 

 

 

평점이 채워진 행렬을 R이라 할 때, User행렬 P와 Movie행렬 Q의 Matrix 는 

로 표현 됨.

 

(R: 비어있는 곳이 없는 원래 데이터, 

비어있는 곳을 복구한 데이터)

 

 

Matrix의 원소

는 아래와 같이 나타낼 수 있다.

 

 

 

 

 

오차를 최소로 줄이기 위해 Gradient Descent를 적용하고 그를 위해서 error e에 대해서 정리하면,

 

 

 

 

 

최소점을 알기 위해 p, q 대해서 미분한다.

 

 

 

 

 

 

 

따라서 아래와 같이 식을 얻을 수 있다.

 

 

 

 

 

 

 

 

Regularization

 

Regularization를 하는 이유는 Overfitting을 방지하기 위해서 이다.

 

는 user, movie feature의 magnitude를 조절하기 위한 상수

 

 

 

 

 
 

Data table:

 

 
 
 
Matrix:
 
 
 
Result:
 
 
 
 
 
 
2. Recommend System using RecSys 2015 challenge dataset
 
 
FM모델을 활용하여 RecSys 2015 Challenge dataset 가지고 추천시스템 구현해본다.
 
 
 
 
FM model:
 
 
 
 
 
 
Data Set (CSV) (RecSys 2015 challenge)
 
http://2015.recsyschallenge.com/challenge.html
 
1. yoochoose-clicks.dat - Click events. Each record/line in the file has the following fields:
1. Session ID – the id of the session. In one session there are one or many clicks.
2. Timestamp – the time when the click occurred.
3. Item ID – the unique identifier of the item.
4. Category – the category of the item.
2. yoochoose-buys.dat - Buy events. Each record/line in the file has the following fields:
1. Session ID - the id of the session. In one session there are one or many buying events.
2. Timestamp - the time when the buy occurred.
3. Item ID – the unique identifier of item.
4. Price – the price of the item.
5. Quantity – how many of this item were bought.
 
 
사용되는 라이브러리
 
tensorflow 기반의  TFFM(TensorFlow implementation of an arbitrary order Factorization Machine) 라이브러리를 사용하였다.
 
 
 
 
 
Click, buy set에 대해서 데이터 전처리를 해준다. 
 
 
 
 
Dataset에서 Timestamp는 중요하지 않은 feature로 예상가능 하므로, 제외한다.
 
 
 
 
 
상위 1000개 데이터를 가지고 데이터 셋을 재구성 한다.
(*most_common: 상위 n개 데이터 리턴)
 
 
 
 
One-hot encode 적용
 
 
 
 
 
historical data 추려서 원본 데이터와 병합한다. 
 
 
 
 
TFFM 라이브러리를 사용 (TensorFlow on Factorization Machine) 학습모델 구성하였다.
https://github.com/geffy/tffm 
 
 
여기서는 GradientDescentOptimizer 대신에 AdamOptimizer를 사용 (경사를 갱신할 때 마다 BETA값을 이용하여 하강률 조정)
 
 
 
Training set과 test set으로 분리하고(test set size 0.2), test set을 가지고 다시 cold-start 셋을 구성한다.
 
 
 
 
Cold-start 셋은 카테고리에 대해서만 다시 데이터 셋을 구성한다.
(cold-start set에서 historical click, purchasing data 삭제)
 
 
 
 
각 set에 대해서 학습 후 MSE를 측정한다.
 
 
 
Result:
 
 
 
Full data set MSE가 Cold-start set MSE에 비해 약 3.847배의 정확도를 보였다.
100 epoch에 대해서 3m 43s 소요, epoch당 2.22s소요 
 
 
3. Reference
  • https://github.com/sharpduckk/BigData_Statistics/tree/master/RecommendSystem
  • http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/
  • https://getstream.io/blog/factorization-recommendation-systems/
  • Factorization Machines, Steffen Rendle
    https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
  • http://www.jefkine.com/recsys/2017/03/27/factorization-machines/
  • Factorization machine을 이용한 추천시스템 설계, 정승윤
    http://www.riss.kr/link?id=T14550028 

 

 

Comments