이 글은 부스트캠프 AI Tech 3기 강의를 듣고 정리한 글입니다.
K-Nearest Neighbors CF
NBCF의 한계
NBCF 는 아이템 i에 대한 평점을 예측하기 위해서는 Ωi에 속한 모든 유저와의 유사도를 구해야 한다.
- Ωi : 아이템 i에 대한 평가를한 유저 집합
이때 유저가 많아질수록 계속해서 연산량을 늘어나게 되고 오히려 성능은 떨어지기도 한다.
KNN 협업 필터링 기본 아이디어
Ωi에 속한 유저 가운데 유저u와 가장 유사한 K명의 유저(KNN)를 이용해 평점을 예측
(유사하다는 것은 우리가 정의한 유사도 값이 크다는 것을 의미)
K는 보통 25~30 을 많이 사용하지만 사용자가 설정해주어야 한다 (하이퍼파라미터)
KNN 예시 ) 1-NN CF(K=1 인 경우)
User B와 가장 유사한 1명인 유저 A의 평점 데이터를 이용해 평점을 예측한다.
이 표에서 User B와 가장 유사한 User 는 A이 이므로 A가 스타워즈에 매긴 평점은 곧 User B가 스타워즈에 매길 평점으로 예측된다.
유사도 측정법 Similarity Measure
유사도 측정법이란 두 개체간의 유사성을 수량화하는 함수 혹은 척도이다.
유사성에 대한 여러 정의가 존재하지만 일반적으로는 거리의 역수 개념을 사용 한다.
따라서 두 개체 간 거리를 어떻게 측정하냐에 따라서 유사도 측정법이 달라진다.
이렇게 다양한 유사도측정법이 있지만 여기서는 4가지 유사도 측정법을 알아보도록 하자.
※ 유사도는 딱 정해진 것이 없다. 우리가 가진 데이터와 서비스의 특징을 고려하고, Off-line Test에서 가장 좋은 유사도를 선택하는 것이 일반적이다.
Mean Squered Difference Similarity
Mean Squered Difference Similarity 는 주어진 user-item rating에 대해서 다음과 같이 계산한다.
msd(u,v)=∣Iuv∣1⋅∑i∈Iuv(rui−rvi)2,msdsim(u,v)=msd(u,v)+11msd(i,j)=∣Uij∣1⋅∑u∈Uij(rui−ruj)2,msdsim(i,j)=msd(i,j)+11
수식을 간단히 해석해 보면 유저 or 아이템 끼리 비교 했을 때 두 평점을 빼준 값들의 평균이다.
분모가 0이 되는 것을 방지하기 위해 분모에 +1을 해준다.
Mean Squered Difference Similarity 는 거의 추천시스템에서만 쓰이는 유사도이다.
각 기준에 대한 점수의 차이를 계산하기 때문에 유사도는 유클리드 거리에 반비례 한다.
Cosine Similarity
이전 글(TF-IDF) 에서 다룬 것과 동일하게 적용한다.
cos(θ)=cos(X,Y)=∣X∣∣Y∣X⋅Y=∑i=1NXi2∑i=1NYi2∑i=1NXiYi
벡터의 절대적 크기보다 각도를 중심으로 유사도를 측정하기 때문에 상대적인 유사도를 구하기 용이하다.
Pearson Similarity (=Pearson Correlation)
주어진 두 벡터 X,Y에 대하여
pearson_sim(X,Y)=∑i=1N(Xi−Xˉ)2∑i=1N(Yi−Yˉ)2∑i=1N(Xi−Xˉ)(Yi−Yˉ)
각 벡터를 표본 평균으로 정규화한 뒤 코사인 유사도를 구한 값이다.
해석하면 상관관계해석과 마찬가지로 (X와 Y가 함께 변하는정도)/(X와 Y가 따로 변하는 정도) 로 볼 수 있다.
- 1에 가까울수록 양의 상관관계
- 0은 서로 독립
- -1에 가까울스록 음의 상관관계
코사인 유사도와 다른 점은 정규화를 했다는 것인데, 이는 Rating의 크기를 고려한 것으로 해석할 수 있다.
Jaccard Similarity
Jaccard Similarity는 Cosine,Pearson유사도와 달리 집합의 개념을 사용한 유사도이다.
J(A,B)=∣A∪B∣∣A∩B∣=∣A∣+∣B∣−∣A∩B∣∣A∩B∣
Jaccard 유사도의 특징은 집합을 사용했기 때문에 Cosine,Pearson유사도와 달리벡터의 차원이 달라도 이론적으로 유사도 계산이 가능하다는 점이다.
즉 두 집합이 같은 아이템을 얼마나 공유하고 있는지를 나타낸다.
- 두 집합이 가진 아이템이 모두 같으면 1
- 두 집합이 겹치는 아이템이 하나도 없으면 0
Jaccard 유사도 예시
uA와 uB가 평점 4, 5 점을 준 영화 목록을 보고 Jaccard 유사도를 계산해보자
u4:m1,m3uB:m2,m3,m4.J(A,B)=∣{m1,m3,m4∣∣⌊{m1,m3}∣=32