평갓값이 명시적인 경우
- 평갓값이 명시적이라는 것은 Movielens 데이터와 같이 사용자가 아이템에 대해 명싲적으로 평가한 데이터를 말한다.
- 이런 구조로부터 얻은 데이터의 경우 사용자가 명시적으로 평가를 한것이기 때문에 품질이 높다
평갓값 행렬이 주어졌을 때, 영화를 XY 좌표의 2차원 벡터로 표현을 한다면, X 축을 액션 정도, Y축을 판타지 정도라는 축으로 한다면 액션과 판타지에 적합한 영화들은 오른쪽 위에 위치할 것이다.
사용자의 경우에도 액션 정도가 높은 판타지 영화를 좋아하는 경우 오른쪽 위에 위치할 것이다.
하지만 예시처럼 사람이 각 차원에 의미를 부여하는 것이 아니고 데이터를 통해 자동으로 축을 구축한다.
또한 차원이 사람이 이해하기 쉬운 축이 되는 경우도 있지만 사람이 해석하기 어려운 축이 만들어 질 수도 있다.
평갓값 행렬 R을 다음과 같이 P,S,Q로 분해한다
사용자의 행렬 와 아이템의 행렬 를 얻을 수 있다.
- 특잇값 분해의 경우 추가로 설명을 할 예정
특잇값 분해의 경우 결손값을 0으로 채우기 때문에 추천 서능이 나쁘다. 0을 대입하는 것은 사용자가 그 아이템에 대해 싫어한다고 의사 표시한 것과 같다.
하지만 평갓값이 결손되있는 것은 사용자가 아직 평가를 하지 않은 것이지 해당 아이템을 좋아할 수도 있다.
또한 Sparse한 행렬이기 때문에 RMSE등의 지표도 나빠질 수 도 있다.
예측 평갓값의 상대적인 값에는 의미가 있으며 무작위로 추천할 때보다 성능이 좋다.
또한 SVD에는 잠재 인자 수라는 중요한 파라미터가 있으며 이를 변화시키면 예측 정확도가 바뀌니다.
잠재 인자수가 높을 수록 원래 행렬을 복구할 때 충분한 표현력을 갖기 때문에 예측 정확도가 좋아진다.
한편 잠재인자수가 너무 높을 경우 오버피팅될 가능성 존재
일반적으로 잠재 인자수 는 수십~수배으로 설정한다.
비음수 행렬 분해(NMF) Nonnegative Matrix Factorization
SVD는 행렬 분해 후 행렬에 대한 음수값을 취하는 경우가 있지만 NMF는 행렬 분해 시 사용자와 아이템 각 벡터의 요소가 0 이상이 되는 제약을 추가한다.
그 제약에 따라 각 사용자나 아이템의 벡터 해석 특성이 향상된다. 하지만 결손값을 0으로 채워서 적용하는 경우가 많아 일반적으로 추천 성능이 좋지않다.
예측 정확도 관점에서 SVD나 NMF는 피하고 다음 알고리즘 사용을 권장
암묵적인 평갓값이란 상품 상세 페이지 클릭이나 동영상 시청 등 사용자가 명시적으로 평가하지 않은 사용자 행동 이력을 의미한다.
- 실무에서 추천 시스템을 만들 때는 명시적인 평갓값보다 암묵적인 평갓값 데이터를 얻기 쉬우므로 암묵적인 평갓값이 자주 사용된다.
- 명시적인 평갓값에는 별 1개나 별 5개와 같이 평갓값이 한쪽으로 쏠리는 편향도 있어 학습이 잘안되는 경우도 많아 암묵적인 평갓값을 많이 사용
지금까지의 방법은 평갓값만 사용하는 방법이다. 하지만 평갓값뿐 아니라 사용자나 아이템의 속성정보를 사용해 추천 시스템의 성능을 향상시킬 수 있다.
이 방법은 사용자나 아이템의 속성 정보를 사용함으로써 신규 아이템이나 사용자에 대해 추천이 불가능한 콜드 스타트 문제에도 대응할 수 있다는 장점이 존재
Factorization Machines FM은 매우 유명하며 널리 사용됨
FM에서 입력 데이터 형식은 지금까지와 다르다
FM에서는 1개의 평가를 1행으로 표시한다.
행렬은 평갓값 X 특징량 수가 된다.
특직량은 사용자 ID를 원-핫 인코딩한것과 아이템 ID를 원-핫-인코딩한 것, 사용자와 아이템의 속성 정보등의 보조 정보를 연결한 것이된다.
FM의 좋은 점은 특징량끼리의 조합도 고려할 수 있다.
사용자의 구입 이력이나 열림 이력 등의 행동 이력 데이터는 다음처럼 표현 가능
User1 : [item1, item41, item23, item4]
User2 : [item52, item3, item1, item9]
각 아이템을 단어로 보고 사용자가 행동한 아이템의 집합을 문장으로 보면 LDA를 적용할 수 있다.
출력된 결과는 각 토픽별 아이템 분포와 각 사용자별 주제가 된다.
'토픽 1은 item23이 0.3, item4가 0.2'와 같은 아이템 분포와 'User1은 토픽 1 : 0.8, 토픽 2: 0.1' 같은 결과가 나옴
이 벡터를 통하여 User1은 토픽 1의 성분이 강하므로 토픽 1에서 나오기 쉬운 아이템을 추천할 수 있다.
아이템에 대해서도 각 토피에서의 출현 확률을 나열한 벡터를 만들어 코사인 유사도 등을 사용해 유사도를 계산할 수 있으므로 관련 아이템을 추천할 수 있다.
행동 이력에 LDA를 적용해 얻을 수 있는 장점은 추천 시스템을 만드는 목적 외에도 탐색적 데이터 분석(EDA)로 사용자나 아이템에 대한 이해도를 높일 수 있다.
행동 이력을 기반으로 각 아이템을 모아주기 때문에 상품의 설명문만 언뜻 보면 다른 것처럼 보여도 사실 함께 구입되기 쉬운 아이템을 알 수 있다.
마케팅이나 상품 개발에도 도움이 될 수 있다.
'서점에서 산 OO를 읽어보니 재미있었다'
'책', '단어', '서적'등이 있다
이 단어들은 같은 문맥에서 나오는 경우가 많고 단어의 의미도 비슷하다.
사용자가 열람하거나 구매하는 등의 행동 이력을 word2vec에 적용하는 방법에 관해 설명하겠다.
이 방법은 item2vec, prod2vec이라 불리며 구현이 간단하고 추천 성능이 높아 야후, 에어비앤비 등의 기업에서 사용됨
LDA의 경우와 마찬가지로 사용자의 행동 이력을 단어의 집합으로 간주하고 word2vec을 적용한다.
사용자의 행동한 순서대로 아이템을 나열하는 것이 중요하고, window_size라는 파라미터를 통하여 액션 순서까지 고려해 학습 시킨다.
이 벡터를 사용하면 아이템 간 유사도를 계산할 수 있으며 관련 아이템 추천을 구현한다.
아이템의 벡터를 사용하면 사용자에게 간단히 추천할 수 있다.
아이템의 벡터를 유지하기만 함녀 사용자의 벡터는 벡터의 사칙연산으로 계산이 가능하기 때문에 실시간 온라인 추천등에서 사용된다.
아이템을 단어, 사용자의 행동 이력을 문장으로 간주함으로써 자연어 처리 방법을 협조 필터링 형태의 추천으로 적용할 수 있다, BERT 모델을 사용자읭 행동이력에 적용한 사례도 존재
추천 시스템에서 딥러닝의 장점
- 비선형 데이터 모델링
- 시계열 데이터 모델링

신경망이 여러층으로 구성되어 있어 사용자와 아이템의 복잡한 데이터를 학습할 수 있으며 기존 행렬 분해보다 높은 예측 정확도를 얻을 수 있다.
DeepFM은 Factorization Machines를 딥러닝화한 방법
아이템이나 사용자의 특징량에 대해 특징량 엔지니어링이 필요없으며 그대로 모델에 입력할 수 있다.
모델 안에서는 고차원의 각 특징량 조합도 학습해준다.

Wide and Deep
Wide 부분과 Deep 부분의 2개로 구성되어 있다.
Wide 부분에서는 아이템이나 사용자의 특징량을 입력으로 하여 1층의 선형 모델을 거친다
Deep 부분에서는 Embedding층을 내장해 다층으로 함으로써 보다 일반화된 추상적인 표현을 얻을 수 있다.
이 2개를 조합하면 예측 정확도를 높이면서도 다양하게 추천할 수 있다.

| 자연어 처리 방법 | 추천 알고리즘 |
|---|---|
| RNN | Session-based recommendations with recurrent neural networks |
| word2vec | item2vec: neural item embedding fo collaborative filtering E-commerce in Your Inbox: Product Recommendations at Scale |
| BERT | BERT4REC : Sequential recommendation with bidirectional encoder representations from transformer |
| 라이브러리명 | URL | 설명 |
|---|---|---|
| Recommenders | https://github.com/microsoft/recommenders | 마이크로소프트사 개발한 추천알고리즘 MF나 BPR등 고전적인 방법 부터 최신 딥러닝 추천알고리즘 구현, GPU나 스파크를 사용한 모델까지 제공 |
| Spotlight | https://github.com/maciejkula/spotlight | 파이토치 기반의 추천 알고리즘 라이브러리 딥러닝 뿐아니라 얕은(Shallow)모델도 구축 프로토타입을 작성하기 용이 |
| RecBole | https://recbole.jo/ | 파이토치 기반의 추천 알고리즘 라이브러리, 70개 넘개 구현 |
좋은 글 잘 읽었습니다, 감사합니다.