tak's data blog

추천시스템(Recommendation system) 유사도(similarity) 본문

Machine Learning

추천시스템(Recommendation system) 유사도(similarity)

hyuntaek 2021. 3. 26. 14:13
반응형
SMALL

 

 

지난 추천시스템 설명에 이어서 user collaborative filtering의 유사도에 대해서 살펴보겠습니다.

 

collaborative filtering이란 사용자를 고려하는 방식으로, 취향이 비슷한 집단에서 누군가 선호한 아이템을 아직 접하지 않았다면 그 아이템을 추천하는 방식입니다.

 

 

 

사용자 기반

 

사용자 기반의 협업 필터링에서의 유사도는 두 사용자가 얼마나 유사한 항목(아이템)을 선호했는지를 기준으로 합니다.

 

사용자 기반에서는 한 사용자가 평가한 영화들의 점수들을 벡터로 나타낼 수 있다.

 

두 사용자 간의 유사도는 두 벡터 간의 유사도로 정의할 수 있는데, 이 유사도를 구하기 위해서 다양한 방법이 사용될 수 있습니다.

 

 

 

 

1) 코사인 유사도(cosine similarity)

평점들을 '벡터'로 생각하고 2개의 각 벡터사이의 각도를 '유사도'라고 가정하는 방법이다. 데이터가 많지 않을 때에는 예측의 정확도가 높지 않습니다.

 

코사인 유사도의 값은 -1~1사이 값을 가지게 되며 해석은 다음과 같습니다.

  • 두 벡터의 방향이 동일한 경우 : 1 → 유사도가 높다.
  • 두 벡터가 90도의 각을 가지는 경우 : 0
  • 두 벡터의 방향이 반대인 경우 : -1 → 유사도가 낮다.

 

 

 

2) 피어슨 유사도

 

피어슨 유사도는 두벡터의 상관계수를 의미한다.

 

유사도가 가장 높을 경우 값이 1, 가장 낮을 경우 -1의 값을 가진다.

 

(특정인물의 점수 기준이 극단적으로 너무 낮거나 높을 경우 유사도에 영향을 크게 주기 때문에, 이를 막기 위해 상관계수를 사용하는 것이다.)

 

 

 

ex) 두 아이템의 유사도를 구할 때 (5,5,5,5,5,5) , (1,1,1,1,1,1) 이 때 둘간의 유사도는1이다. 이렇게 코사인 유사도에서는 유저마다의 개인적인 평가 성향을 반영하지 못한다는 단점이 있습니다.

 

피어슨 유사도에서는 사용자의 평점값에서 사용자의 평점의 평균값을 빼줌으로써, 위의 문제를 어느 정도 해결합니다.

 

사용자 기반의 협업 필터링에서 피어슨 유사도를 사용하면 각 사용자의 평가 성향을 반영하지 못한다는 '단점'이 있습니다.

그러므로 가중치를 활용하여 평가하는 방법으로 조정할 수 있습니다.

 

 

 

 

 

보정된 코사인 유사도로, 여기서는 사용자의 평균 평가 값을 뺌으로써 문제 해결에 기여한다.

 

실제 알고리즘에서는 한 유저와 가장 유사한 K명의 점수를 이용하는 KNN기법을 사용.

 

최근접 이웃의 수를 N이라 하고 해당 유저와 i번째 최근접 이웃과의 유사도를 sim i, 그 이웃이 준 평점을 Ri라 하면, 한 유저의 해당 영화에 대한 예상 평점Rpredict는 다음과 같다.

 

 

피어슨 유사도의 방식과 비슷하게 KNN방식으로 평점을 가중 평균하는 공식도 볼 수 있다. 유저의 평점을 유저 평점의 평균값으로 보정하여 아래와 같은 식을 사용할 수 있다.

 

 

 

 

 

여기까지 강의를 듣고 우리 맛집 추천시스템에 대해서 의문이 들었다.

 

상위 몇개의 음식점을 추천해주는 방향이므로 그래서 지하철역을 대상으로 음식점을 크롤링 할 때 편향을 방지?하기 위해 예를 들어 모든 음식점을 크롤링 하는 것이 아닌 하나의 기준(카테고리별로 나눈다 배달음식/ 매운음식 등)을 정해서 평점이 지나치게 낮거나 지나치게 높은 음식점들은 제외하고 크롤링 해서 유사도를 구하는 방법이 있을 것 같다.

반응형
LIST

'Machine Learning' 카테고리의 다른 글

추천시스템(Recommendation system)  (1) 2021.03.26
Decision Tree(의사결정나무)  (0) 2021.03.02
Model training(모델 훈련)  (0) 2021.02.10
classification(분류)  (0) 2021.02.02
머신러닝이란?  (0) 2021.01.26