-
[RecSys] 4-1. Collaborative Filtering인공지능/부스트캠프 Ai Tech 2022. 3. 11. 18:14728x90
[RecSys] 4-1. Collaborative Filtering In [1]:from IPython.core.display import display, HTML display(HTML("<style>.container { width:90% !important; }</style>"))
협업필터링(Collaborative Filtering, CF)¶
'많은 유저들로부터 얻은 기호 정보'를 통해 유저의 관심사를 자동으로 예측하는 방법
더 많은 유저/아이템 데이터가 축적될수록 협업의 효과는 커지고 추천이 정확해질 것이란 가정에서 출발
목적 : 유저 u가 아이템 i에 부여할 평점을 예측
방법
- 주어진 데이터를 활용해 유저-아이템 행렬 생성
- 유사도 기준을 정하고, 유저 혹은 아이템 간의 유사도를 구함
- 주어진 평점과 유사도를 활용해 행렬의 비어 있는 값(아직 소비하지 않은 평점) 예측
TF-IDF와는 달리 아이템이 가진 속성을 사용하지 않고 추천을 한다.
CF 분류¶
- Neighborhood-based CF (Memory-based CF)
- Model-based CF
- Hybrid CF
Neighborhood-based CF¶
- User-based CF
User-based CF(UBCF)¶
두 유저가 얼마나 유사한 아이템을 선호하는지? 유저간 유사도를 구한 뒤, 타겟 유저와 유사도가 높은 유저들이 선호하는 아이템을 추천
- 특징
- 구현이 간단하고 이해가 쉽다
- 아이템이나 유저가 계속 늘어날 경우 확장성이 떨어짐(Scalability)
- 주어진 평점/선호도 데이터가 적을 경우, 성능이 저하(Sparsity)
Scalability, Sparsity는 MF 과 같은 Model-Based로 해결한다.
Sparsity¶
주어진 데이터를 활용해 유저-아이템 행렬을 만들게 되어 행렬의 대부분 원소는 비어있는 Sparse matrix를 만들게 된다.
- NBCF를 적용하기 위해선 적어도 sparsity ratio가 99.5%를 넘지 않는게 좋다
- 그렇지 않다면 모델 기반 CF를 사용해야 한다.(Matrix Factorization)
- sparsity ratio : 행렬 전체 원소 중 비어 있는 원소의 비율
K-Nearest Neighobors CF¶
아이템 ${i}$에 대한 평점 예측을 하기 위해서는 ${\Omega_i}$에 속한 모든 유저와의 유사도를 구해야 한다.
- ${\Omega_i}$ : 아이템 ${i}$ 에 대해 평가를 한 유저 집합
그러나 유저가 많아질 경우 연산량은 늘어나고 성능은 저하되는 문제가 발생하여 이를 방지 하기 위해 KNN의 아이디어를 가져온다.
KNN¶
${\Omega_i}$에 속한 유저 가운데 유저 ${u}$와 가장 유사한 K명의 유저를 이용해 평점을 예측
- 유사하는 것은 정의한 유사도 값이 크다는 것을 의미
- K는 하이퍼 파라미터
유사도 측정법¶
두 개채 간의 유사성을 수량화 하는 실수 값 함수 혹은 척도
일반적으로는 유사도는 거리의 역수 개념을 사용, 따라서 두 개체 간 거리를 어떻게 측정하느냐에 따라 유사도 측정방법이 달라진다.
추천 시스템, KNN에서는 아래의 4가지의 유사도 측정법을 주로 사용한다. 서비스의 특징과 offline test에서 가장 좋은 성능을 가진 유사도를 사용한다.
Mean Squared Difference Similarity¶
주어진 유저-아이템 rating에 대하여,
$${msd(u,v) = {1 \over |I_{uv}|} \cdot \sum_{i \in I_{uv}}(r_{ui} - r_{vi})^2 , msdsim(u,v) = {1 \over msd(u,v) + 1}}$$$${msd(i,j) = {1 \over |U_{ij}|} \cdot \sum_{i \in U_{ij}}(r_{ui} - r_{vi})^2 , msdsim(i,j) = {1 \over msd(i,j) + 1}}$$각 기준에 대한 점수의 차이를 계산, 유사도는 유클리드 거리에 반비례한다.
- 각 기준의 점수가 비슷할수록 msd는 0에 가까워지므로 유사도는 1에 가까워진다.
- 분모가 0이 되는걸 방지하기 위해 분모에 1을 더함(smoothing)
Cosine Similarity¶
주어진 두 벡터 X, Y에 대하여
$${cos(\theta) = cos(X,Y) = {X \cdot Y \over |X||Y|} = {\sum_{i=1}^N X_iY_i \over \sqrt{\sum_{i=1}^N X_i^2} \sqrt{\sum_{i=1}^N Y_i^2}}}$$두 벡터의 각도를 이용해 구할 수 있는 유사도
- 두 백터의 차원이 같아야 한다.
직관적으로는 두 벡터가 가리키는 방향이 얼마나 유사한지를 의미한다.
Pearson Similarity¶
주어진 두 벡터 X, Y에 대하여
$${pearsonsim(X,Y) = {\sum_{i=1}^N (X_i - \bar{X})(Y_i - \bar{Y}) \over \sqrt{\sum_{i=1}^N(X_i - \bar{X})^2}\sqrt{\sum_{i=1}^N(Y_i - \bar{Y})^2}}}$$각 벡터를 표본평균으로 정규화한 뒤에 코사인 유사도를 구한 값, 정규화를 하여 편차를 줄였고, 여느 도메인에서도 잘 작동한다고 알려져 있다.
- (X와 Y가 함께 변하는 정도) / (X와 Y가 따로 변하는 정도)
- 1에 가까우면 양의 상관관계, 0일 경우는 서로 독립, -1에 가까우면 음의 상관관계
Jaccard Similarity¶
주어진 두 집합 A, B에 대하여
$${J(A,B) = {|A \cap B| \over |A \cup B|} = {|A \cap B| \over |A| + |B| - |A \cap B|}}$$집합의 개념을 사용한 유사도
- Cosine, Pearson과 달리 길이(차원)이 달라도 이론적으로 유사도 계산이 가능
- 두 집합이 같은 아이템을 얼마나 공유하고 있는지를 나타낸다.
- 두 집합이 가진 아이템이 모두 같으면 1 , 겹치는게 없으면 0
In [ ]:'인공지능 > 부스트캠프 Ai Tech' 카테고리의 다른 글
[RecSys] 4-3. Collaborative Filtering-MBCF_SVD (0) 2022.03.11 [RecSys] 4-2. Collaborative Filtering - Rating Prediction (0) 2022.03.11 [RecSys] 3-2. 추천 시스템 Basic - TF-IDF (0) 2022.03.11 [RecSys] 3-1. 추천 시스템 Basic - 추천 시스템 기법과 연관분석 (0) 2022.03.10 [RecSys] 2. 추천시스템 Basic - 평가지표와 인기도 기반 추천 (0) 2022.03.10