일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Unreal Engine
- 딥러닝
- GAN
- dl
- UE5
- ue5.4
- WBP
- ddpm
- BERT
- multimodal
- CNN
- inductive bias
- Diffusion
- Stat110
- WinAPI
- deep learning
- 모션매칭
- Generative Model
- NLP
- userwidget
- 폰트생성
- Font Generation
- 생성모델
- RNN
- 언리얼엔진
- Few-shot generation
- 디퓨전모델
- animation retargeting
- motion matching
- cv
- Today
- Total
Deeper Learning
Netflix Challenge - Recommendation System 본문
Netflix Challenge - Recommendation System
Dlaiml 2021. 2. 25. 19:46Netflix Challenge
Netflix에서 2006년~2009년에 진행된 RMSE 0.8563을 목표로 하는 추천 시스템 챌린지
협업 필터링
user-user 협업 필터링은 유사한 취향의 사용자를 찾는것이 핵심이다.
취향의 유사도는 Correlation Coefficient(상관 계수)를 통해 측정한다.
상관계수를 사용하여 상품 s를 구매한 사용자 중 x와 취향이 가장 유사한 k명의 사용자 N(x ;s)를 선정한다.
사용자 x가 구매하지 않은 상품 s에 매길 평점을 예측하는 식은 다음과 같다.
취향이 유사한 사용자와의 유사도를 가중치로 사용한 평점의 가중평균을 계산한다.
이렇게 추정한 평점이 가장 높은 상품을 대상 사용자에게 추천해준다.
협업 필터링은 상품에 대한 부가정보가 없이 사용이 가능하지만, 새 상품, 새 사용자에 대한 추천이 어렵고 여러 사용자의 추천 데이터가 누적이 되어야 사용 가능한 한계가 있다.
협업 필터링을 사용하여 0.94의 RMSE를 달성하였다.
Latent Factor Model
Latent Factor Model(잠재 인수 모델)은 사용자와 상품을 벡터로 표현하는 것이 핵심이다.
효과적인 잠재 인수를 학습하는 것이 모델의 목표다.
행이 상품, 열이 사용자 데이터가 사용자가 상품에 부여한 평점이라고 할 때
UV decomposition을 통해 2개의 행렬로 이를 분리한다.
이를 달성하기 위해 사용자와 상품의 임베딩의 내적이 평점과 유사하도록 학습이 이루어진다.
$p_{i}$: 사용자 x의 임베딩 벡터
$q_{i}$: 상품 i의 임베딩 벡터
$r_{xi}$: 사용자 x의 상품 i에 대한 평점
임베딩의 목표는 $p_{i}^{T}q_{i}$가 $r_{xi}$와 유사하도록 하는 것이다.
6개의 상품, 12명의 사용자, Latent Factor Dimension이 3일 때 예시는 위와 같다.
Loss function으로 MSE를 사용한다.
데이터의 Sparsity로 인해 과적합이 발생하기 쉽다.
이를 방지하기 위해 L2 Regularization을 적용한 Loss function은 다음과 같다.
SGD를 사용하여 학습을 마친 Latent Factor Model은 test set에서 0.9의 RMSE를 기록하였다.
Improved Latent Factor Model
특정 사용자는 평점을 전체적으로 후하게 주는 경향이 있으며, 특정 사용자는 평점을 대체적으로 낮게 주는 경향이 있을 수 있다.
영화의 경우 객관적으로 훌륭한 영화와 그렇지 못한 영화가 어느 정도 평점으로 구분되곤 한다.
이를 반영하기 위해 해당 사용자의 평점 평균과 전체 평점 평균의 차인 사용자의 편향, 해당 상품에 대한 평점 평균에서 전체 평점 평균을 뺀 상품 편향을 반영한 모델이 고안되었다.
편향을 고려한 모델의 경우 0.89의 RMSE를 기록하였다.
Netflix는 도중의 시스템의 변화로 평균 평점이 상승한 사건이 있었고 전체 영화의 평균 평점은 개봉 후 점차 높아지는 경향을 보였다.
이는 출시하고 나서 영화를 따로 찾아서 시청하는 사람들은 추천시스템에 의해 그 영화를 추천받거나 취향에 맞기 때문에 그 영화를 선택하였기 때문이라고 추측할 수 있다.
위와 같은 시간에 따른 편향을 고려하기 위해 식은 다음과 같이 변경되었다.
기존의 전체 시점의 평균을 통해 계산한 사용자의 편향과 상품 편향을 시간에 따른 함수로 교체하였다.
이는 0.876 RMSE를 기록하였다.
Blending
위와 같이 임베딩을 마친 데이터를 다양한 모델에서 모두 학습을 마치고 Blending을 통해 성능 향상을 성공한 BellKor팀이 다른 연합팀인 Ensemble팀과 같은 점수를 기록하였지만 20분 먼저 결과를 제출하였기 때문에 10억 원의 상금을 받게 되었다.
Ensemble의 한 방법인 Blending의 과정은 다음과 같다
- Train set으로 다양한 모델을 학습시킨다
- 학습된 모델을 사용하여 valid set과 test set에 대한 예측을 한다
- 새로 생성한 선형 모델에서 2에서 예측한 여러 모델의 결과와 valid set의 input을 병합한 값을 사용하여 모델을 학습시킨다.
- 2에서 모델들의 test set에 대한 예측값과 test set의 input을 병합한 값을 사용하여 모델을 test 한다
Python Code
model1 = DecisionTreeClassifier()
model1.fit(x_train, y_train)
val_pred1=model1.predict(x_val)
test_pred1=model1.predict(x_test)
val_pred1=pd.DataFrame(val_pred1)
test_pred1=pd.DataFrame(test_pred1)
model2 = MLPClassifier()
model2.fit(x_train,y_train)
val_pred2=model2.predict(x_val)
test_pred2=model2.predict(x_test)
val_pred2=pd.DataFrame(val_pred2)
test_pred2=pd.DataFrame(test_pred2)
df_val=pd.concat([x_val, val_pred1,val_pred2],axis=1)
df_test=pd.concat([x_test, test_pred1,test_pred2],axis=1)
model = LogisticRegression()
model.fit(df_val,y_val)
model.score(df_test,y_test)
# source: https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/
Reference
[1] Naver Boostcamp AI-Tech 정점표현&추천시스템 (신기정 마스터)
[2] A Comprehensive Guide to Ensemble Learning
'AI > Machine Learning & Data Science' 카테고리의 다른 글
직관과 MLE, MAP(2) (0) | 2023.06.27 |
---|---|
직관과 MLE, MAP (1) (0) | 2023.06.22 |
MLE(Maximum Likelihood Estimation), MAP(Maximum A Posterior) (0) | 2022.11.25 |
Generative modeling (0) | 2021.08.16 |
Feature Engineering (0) | 2020.11.27 |