우노
[추천시스템] 추천 시스템의 개념 및 알고리즘 본문
추천 시스템
- 사용자가 아직 보지 않은 드라마에 대한 사용자의 예상 별점을 알 수 있다면?
- 추천 시스템의 성능이 좋아진다.
- 사용자에게 예상 별점이 높은 드라마를 추천 해주면 되기 때문이다.
별점 예측 방법
- Collaborative Filtering
- 고전적이지만 지금까지 잘 사용되고 있는 방법 중 하나이다.
- 통계적인 방법이므로 연산이 빠른 대신 정확도는 조금 떨어진다.
- 다음 두 가지 방법으로 사용된다.
- Item-Item Collaborative Filtering
- User-User Collaborative Filtering
- Hyprid Methods
- Collaborative Filtering의 단점을 보완하는 방법 중 하나이다.
- Latent Factor Model
- Matrix Factorization을 활용해 구현
- 별점을 맞추는 성능 자체는 Collaborative Filtering보다 더 좋다.
- 딥러닝과 같이 녹아들 수 있어서 잘 발전 되고 있다.
Collaborative Filtering
-
내가 이 드라마를 본다면, 별점으로 몇점을 줄지 어떻게 예측할까?
-
Item-Item Collaborative Filtering
-
즉, 내가 볼 item과 내가 평가한 item 들 중에서 성향이 비슷한 item의 평점을 이용하는 것이다.
-
방법 1 : 내가 이미 본 비슷한 Item들의 평균 내기
- 위 예제 계산
- (4.5 + 5.0) / 2 = 4.75
- 위 예제 계산
-
방법 2 : 내가 이미 본 비슷한 Item 중 더 유사한 Item에 가중치 줘서 평균 내기
- 위 예제 계산
- (4.5 x 0.7 + 5.0 x 0.4) / (0.7 + 0.4)
- 분모가 유사도의 합인 이유는?
- 식을 변환하면 4.5 x ( 7 / 7+4 ) + 5.0 x ( 4 / 7+4 ) 이다.
- 즉, 각 유사도의 합이 1이 되도록 만들어주기 위해
- 유사도 값으로 (유사도 / 전체유사도합)를 사용하는 것이다.
- 위 예제 계산
-
-
User-User Collaborative Filtering
-
Item-Item Collaborative Filtering은 내가 볼 item과 내가 평가한 item 들 중에서 성향이 비슷한 item의 평점을 이용하는 것이었다.
-
User-User Collaborative Filtering는 나와 성향이 비슷한 User들이 Item에 매긴 평점을 이용하는 것이다.
-
방법 : 나와 성향이 비슷한 User들 중 더 비슷한 User에 가중치 줘서 Item 평균 내기
-
예제
- Item-Item과 User-User는 동일한 알고리즘이지만 사용하는 데이터의 축만 다르다.
- 각각의 column은 User를 표현하는 벡터이다.
- 먼저 User간 유사도를 구한다.
- 위 문제에서는 사용자 H와의 유사도를 구해야한다.
- N = 2 이므로 사용자 H와 가장 유사한 2명을 구해야하며
- 드라마 a를 본사람이어야한다.
- J와 D가 가장 유사도가 높은 두 사람이며 각각 유사도가 0.4, 0.3라고 가정하자.
- 유사한 사람을 찾았으니 더 유사한 사람에게 가중치를 주어 Item 평점 평균 계산할 수 있다.
- ( 3 x 0.4 + 5 x 0.3 ) / (0.4 + 0.3)
-
-
이론상 User-User Collaborative Filtering 과 Item-Item Collaborative Filtering 은 동일한 정확도를 가진다.
-
하지만 실제로는 Item-Item이 User-User보다 더 좋은 성능을 보인다. 왜 일까?
-
User의 평가 점수는 시간에 따라 바뀌기도 하며 여러가지 변수가 존재하기 때문이다.
-
Item-Item간 비교에는 한 User 내에서의 평가점수이므로 여러변수가 없기 때문에 더 측정이 잘 된다.
-
Collaborative Filtering 의 장점
- 영화, 드라마, 도서 등등 추천 대상에 제한이 없다.
- 평가 정보만 있으면 되기 때문이다.
-
Collaborative Filtering의 단점
- Cold Start
- 충분한 User와 평가 정보가 확보 되어야한다.
- User와 평가 정보가 없다면 추천 해줄 수 없다.
- Sparsity
- 평가 데이터(User-Item Matrix)에 빈 곳이 많다.
- 한 User가 평가할 수 있는 Item은 한정적이다.
- 해당 Item이 인기 있지 않다면 같은 Item을 평가하는 사용자가 몇 명 없다.
- 평가 데이터(User-Item Matrix)에 빈 곳이 많다.
- First rater
- 한 번도 평가 되지 않은 드라마는 절대 추천되지 않는다.
- 예) 신작, 매니악한 드라마 등
- Popularity Bias
- 독특한 취향을 가지는 User에게는 적합한 추천이 어렵다.
- 기본적으로 다른 평점의 평균을 매겨서 추천하기 때문이다.
- 주로 인기 있는 드라마가 추천 되기 십상이다.
- 독특한 취향을 가지는 User에게는 적합한 추천이 어렵다.
- 이런 단점에도 굉장히 간단하게 적용할 수 있어서 많이 사용된다.
- Cold Start
Hybrid Methods
-
방법 1. 내용 기반 추천 방법과 collaborative filtering을 섞어서 사용한다.
- 내용 기반 추천 방법(content-base method)
- 드라마의 내용을 기반해서 추천하는 방법
- collaborative filtering
- 사용자의 평점을 이용하는 방법
- 이 두 가지는 상호보완적이다.
- 따라서 Hybrid Methods는 내용 기반 추천 방법과 collaborative filtering을 섞어 사용한다.
- 새로운 아이템을 추천할 땐?
- collaborative filtering은 새로운 아이템을 추천하지 못하기 때문에
- content-base method의 줄거리, 출연진, 키워드 장르 등을 활용하여 추천한다.
- 새로운 사용자에게 추천할 땐?
- 전반적으로 인기가 좋은 item을 추천한다.
- 새로운 아이템을 추천할 땐?
- 내용 기반 추천 방법(content-base method)
-
방법 2. 둘 이상의 추천시스템을 구현하고, 통합하여 추천하자!
- 예) 둘 이 상의 추천결과를 선형 결합
- global baseline + collaborative filtering
- 예) 둘 이 상의 추천결과를 선형 결합
Global Baseline Estimate (기본 평점 예측)
-
이미 높은 평점을 받은 드라마에는 나도 높은 평점을 주지 않을까?
-
사용자가 깐깐한 편이라면, 평균보다 조금 낮게 평점을 주지 않을까?
-
Global Baseline Estimate를 사용해 문제를 해결해보자
- 문제
- 진원이는 "이태원 클라쓰"와 비슷한 드라마를 본 적이 없다.
- 진원이가 "이태원 클라쓰"를 보고 매길 평점을 예측해보자.
- 해결
- 존재하는 모든 드라마의 평점 평균 : 3.7점
- 진원이의 드라마 평점 평균 : 3.5 점 (평균보다 0.2 점 낮음)
- User Vector
- "이태원 클라쓰"의 평점 평균 : 4.2점 (평균보다 0.5점 높음)
- Item Vector
- 결과
- 기본 평점 (Global baseline) : 3.7 - 0.2 + 0.5 = 4.0
- 문제
-
여기에 Collaborative Filtering를 적용하면 좀 더 정확하게 예측하지 않을까?!
Global Baseline Estimate (기본 평점 예측) + Collaborative Filtering
-
위 예제 사용
-
Bias == Global Baseline Estimate (기본 평점 예측)
- Bias 값은 4.0 이다.
- 즉, 진원이는 대략적으로 "이태원 클라쓰"에 4.0 점을 매길 것이다. 왜?
- bxi = 3.7 - 0.2 + 0.5 = 4.0
- 전체 평점 평균 + User의 bias(User는 Item에 평균적으로 점수를 얼마나 주는지) + Item의 bias(해당 Item은 평균적으로 몇 점을 받는지)
-
Collaborative Filtering
- Collaborative Filtering 값은 -1.0 이라고 가정하자.
- 기존의 Collaborative Filtering은 절대적인 평가 점수로 사용 됐기 때문에 양수였지만 여기선 상대적인 평가 점수로 사용 되기 때문에 음수값도 나온다.
- 해당 Item과 비슷한 Item이 사용자의 기본 평점(global baseline) 대비 몇 점이 높고 낮냐를 의미하는 값
- 구하고자 하는 Item의 평점을 기본 평점(global baseline)으로 잡아놨기 때문에
- 해당 Item의 평점이 기본 평점에서 얼마나 높은지, 낮은지를 구해야한다.
- 기본 평점(global estimate) 대비 몇 점이 높냐 낮냐를 학습해야
- 기본 평점(global estimate)과 더 했을 때 예측되는 점수가 나온다.
- rxj - bxj
- 유사한 아이템 j의 점수 - 기본 평점(global baseline)
- ex) 진원이는 "이태원 클라쓰"와 유사한 "사랑의 불시착"에 본인의 평점 평균보다 1.0을 낮게 줬다.
- 따라서, 이태원 클라쓰의 평점 평균을 본인의 평점 평균보다 1.0 낮게 주면 된다!
-
결과
- 진원이는 "이태원 클라쓰"에 4.0 - 1.0 = 3.0 점을 매길 것이다.
'Data > Recommender System' 카테고리의 다른 글
[추천 시스템] Tensor Decomposition (0) | 2021.12.04 |
---|---|
[추천시스템] Latent Factor Model with Pytorch (0) | 2020.10.29 |
[추천시스템] Latent Factor Model (0) | 2020.10.29 |
[추천시스템] 유사도(Similarity) 튜토리얼 (0) | 2020.10.22 |
[추천시스템] 유사도(Similarity) 구하는 방법 (0) | 2020.10.12 |