[Deep Learning] 추천 시스템(Recommender System)
1. 추천 시스템(Recommender System)
사용자 본인도 잘 몰랐던 취향이나 관심사를 발견하여 사용자에게 추천하는 시스템
Cold Start 문제 때문에 사용자로부터 정보를 직접 제공받아야 추천 시스템을 만들 수 있다.
추천 시스템에 사용되는 데이터
- 사용자가 어떤 상품을 구매했는가?
- 사용자가 어떤 상품을 둘러보았는가?
- 사용자가 어떤 상품을 장바구니에 넣었는가?
- 사용자가 상품에 어떤 평점을 부여했는가?
- 사용자가 가입 시 선택한 관심분야는 무엇인가?
2. 추천 시스템의 종류
Collaborative Filtering & Content-based Recommendation(생략)
Collaborative Filtering
사용자로부터 얻은 정보를 기반으로 예측하는 방법
- 사용자 행동양식(User Behavior) 데이터를 사용함
- 사용자(User)가 아이템(Item)에 매긴 평점정보, 상품구매이력 등
- 최근접이웃(K-Nearest Neighbor) 방식과 잠재요인(Latent Factor) 방식이 있음
- 두 방식 모두 ‘User-Item Matrix’ 사용
Matrix
(1) User-Item Matrix
- 축적된 ‘사용자 행동양식(User Behavior)’ 데이터 기반
- 사용자가 아직 평가하지 않은 아이템을 ‘예측 평가(Predicted Rating)’
Item1 | Item2 | Item3 | Item4 | |
---|---|---|---|---|
User1 | 4 | 3 | PR | |
User2 | 5 | 3 | 4 | |
User3 | 1 | 2 | 3 |
- User1과 User2의 ‘Item’에 대한 평점 유사도가 높음
- User1이 아직 구매하지 않은 Item4와 Item5를 추천(Predicted Rating)
(2) Item-User Matrix
User1 | User2 | User3 | User4 | User5 | |
---|---|---|---|---|---|
Item1 | 5 | 4 | 5 | 5 | 5 |
Item2 | 5 | 4 | 4 | PR | 5 |
Item3 | 4 | 2 | 2 | 4 |
- Item1과 Item2의 평점 유사도가 높음
- User4가 아직 구매하지 않은 Item2를 추천(Predicted Rating)
1) KNN Collaborative Filtering식
User-Item Matrix와 Item-User Matrix를 활용하여 추천하는 방식
(1) User-Item Matrix를 활용하는 경우
- 사용자와 유사한 다른 사용자를 Top-N으로 선정
- Top-N 사용자가 좋아하는 아이템을 추천하는 방식
- 특정 사용자와 다른 사용자 간의 유사도(Similarity)를 측정
- 가장 유사도가 높은 Top-N 사용자를 추출
- 그들이 선호하는 아이템을 사용자에게 추천
(2) Item-User Matrix를 활용하는 경우
- 사용자의 아이템에 대한 평가 결과가 유사한 아이템을 추천
- 행과 열이 사용자 기반 필터링과 반대
- 아이템에 대한 평점 간 ‘유사도(Similarity)’ 측정
- 평점 유사도가 높은 아이템를 추출
- 그들이 선호하는 아이템을 사용자에게 추천
2) Latent Factor Filtering
User-Item Matrix를 사용하여 ‘잠재요인(Latent Factor)’을 추출하여 추천의 근거로 사용하는 방식
- ‘잠재요인’이 무엇인지 명확하게 정의할 수 없음
- User-Item Matrix를 ‘잠재요인’ 기반의 저차원 밀집행렬인 ‘사용자-잠재요인’과 ‘잠재요인-아이템’으로 행렬 분해(Matrix Factorization)
- SVD(Singular Vector Decomposition)
- NMF(Non-Negative Matrix Factorization)
- 이 두 행렬의 내적을 통해서 새로운 ‘사용자-아이템 평점’ 행렬 생성
- 사용자가 평점을 부여하지 않은 아이템에 대한 ‘예측평점’ 생성 가능
행렬 분해 방법
희소행렬(Sparse Matrix)을 저차원의 밀집행렬(Dense Matrix)로 분해하는 방법을 사용
- 확률적 경사하강(Stochastic Gradient Descent) 기반 행렬 분해
- P와 Q 행렬로 계산된 예측 R 행렬의 값이 실제 R 행렬의 값과 가장 최소의 오류를 가질 수 있도록 반복적으로 ‘Cost Function’ 최적화를 통해 P와 Q를 유추해내는 것
순서
- 임의의 값을 갖는 P와 Q 행렬 초기화
- P와 Q 행렬로 예측 R 행렬 계산 후 실제 R 행렬과 오차값 계산
- 오차를 최소화 하도록 P와 Q 행렬의 값을 업데이트
- 2단계와 3단계를 반복하며 P와 Q 행렬값을 학습
- 행렬 분해가 완료된 P와 Q 행렬로 예측평점 행렬 생성
예시
(1) User-Item Matrix -> 희소행렬
Item1 | Item2 | Item3 | Item4 | Item5 | |
---|---|---|---|---|---|
User1 | 5 | 4 | 5 | ||
User2 | 5 | 3 | |||
User3 | 4 | 2 | |||
User4 | 2 | 4 |
(2) User-‘Latent Factor’ Matrix -> 밀집행렬1
Factor1 | Factor2 | |
---|---|---|
User1 | 5 | 4 |
User2 | 5 | 3 |
User3 | 4 | 3 |
User4 | 3 | 2 |
(3) ‘Latent Factor’-Item Matrix -> 밀집행렬2
Item1 | Item2 | Item3 | Item4 | Item5 | |
---|---|---|---|---|---|
Factor1 | 5 | 4 | 4 | 5 | 5 |
Factor2 | 5 | 3 | 4 | 5 | 3 |
(4) ‘예측 평점’ User-Item Matrix -> 최종 밀집행렬
Item1 | Item2 | Item3 | Item4 | Item5 | |
---|---|---|---|---|---|
User1 | 5 | 4 | 4 | 5 | 5 |
User2 | 5 | 3 | 4 | 5 | 3 |
User3 | 4 | 3 | 3 | 2 | 5 |
User4 | 3 | 2 | 5 | 2 | 4 |
Leave a comment