추천 알고리즘을 고려할 때 가장 먼저 생각하는 것 중의 하나가 '협업 필터링 알고리즘'이다. user와 item이 많고, 인당 구매건수가 많은 경우에 협업 필터링 알고리즘을 이용하는 것은 좋은 선택이라고 생각한다.
하지만 경우에 따라서는 user와 item feature를 더 많이 고려해야 하는 경우가 생긴다. 이런 경우에 사용할 알고리즘을 탐색하던 와중에 factorization model이라는 것을 알게 되었다. 해당 알고리즘에 대해 리서치한 내용을 이번에 포스팅하고자 한다.
1. Factorization Machine의 구조
factorization machine은 matrix factorization이랑 말이 비슷해서 조금 헷갈리는데, 아래 포스팅을 참조하면 그 차이를 분명히 알 수 있을 듯 하다.
( 참조: https://zzaebok.github.io/machine_learning/factorization_machines/ )
위 포스팅에서는 회귀분석을 통해서 그 구조를 설명하고 있다. 회귀분석을 통해 알아보는 것이 가장 이해하기 좋은 것 같다. 다만 uesr, item, category를 합치면 차원이 굉자히 커지기 때문에, 이를 학습하기 위한 방법이 조금 헷갈린다. 이를 행렬분해를 통해 N X N을 N X K, K X N으로 분해하고, N X K 크기의 행렬을 학습시켜 시간복잡도를 줄인다고 한다.
해당 부분의 내용은 아래 첨부한 논문에서 좀 더 잘 알 수 있었다. movielens데이터를 기준으로 어떻게 학습데이터를 만들어야 하는지도 알 수 있다.
( 참조: https://analyticsconsultores.com.mx/wp-content/uploads/2019/03/Factorization-Machines-Steffen-Rendle-Osaka-University-2010.pdf )
Factorization 알고리즘은 Ranking 뿐만 아니라 Regresssion, Binary Classification에서도 활용할 수 있다고 한다.
2. Factoriaztion Machine 코드
실제 구현한 코드는 아래 포스팅에서 찾아볼 수 있었다. 필자는 tensorflow보다 pytorch에 관심이 많은데, 다행히 pytorch로 작성된 코드였다.
( 참조: https://hongl.tistory.com/243 )
여기서 user와 item factor를 더 넣고 싶다면, matrix에 추가하면 되지 않을까 싶다. 이는 DeepFM에 대해서 알아보면서 더 고민해봐야겠다.
'데이터 > 데이터 분석' 카테고리의 다른 글
데이터 시각화, Plotly 차트 쉽게 그리는 방법 -cufflinks 이용하기 (0) | 2022.01.19 |
---|---|
파이썬 워드클라우드, 이쁘게 그리는 방법은?! (0) | 2022.01.19 |
파이썬 KoNLPy, 형태소 분석 및 워드클라우드 그리는 법은?! (2) | 2022.01.18 |
추천 알고리즘 탐색, Deep FM 알아보기 (0) | 2022.01.18 |
범주형 데이터 기준 의사결정나무 알고리즘 만들기 (0) | 2022.01.17 |
데이터 분석 용어 정리 - Funnel, adhoc 분석 (0) | 2022.01.17 |
XGBoost와 랜덤 포레스트 재학습 하는 방법은? (0) | 2022.01.17 |
SOM 군집 알고리즘이란? 파이썬 학습 방법은?! (0) | 2022.01.16 |