다시 이음

추천 시스템 - 협업 필터링 본문

채우기/추천 시스템

추천 시스템 - 협업 필터링

Taeho(Damon) 2022. 9. 6. 16:12

협업 필터링(Collaborative Filtering)

 

1. 유사도 지표(similarity index)

 

사용자간의 유사도를 구하는 것이 핵심

 

1) 상관계수(Correlation coefficient)

 

 

원래 사용되는 상관계수 식에서 사용자 x,y의 평균 평점과 s아이템에 대한 평점을 사용하여 상관계수를 측정할 수 있습니다.

 

평가 자료가 연속값인 경우에 가장 이해하기 쉬운 유사도로 사용된다.(-1에서 1사이의 값을 가짐)

 

그러나, 단점으로 늘 좋은 결과를 가져오지는 못한다.

 

2) 코사인 유사도

 

코사인 유사도에서는 각 아이템을 하나의 차원(dimention)으로 보고 사용자의 평가값을 좌표값으로 본다.

각 사용자의 평가값을 벡터로 해서 두 사용자 간의 벡터의 각도(코사인값)을 구할 수 있다.

 

def cos_sim(A, B):
  return dot(A, B)/(norm(A)*norm(B))

 

코사인 유사도 식

사용자 x,y가 공통적으로 평가한 아이템 i의 평가값을 사용하여 코사인 유사도를 추출할 수 있습니다.

 

코사인 값도 최소 -1 에서 최대 1까지의 값을 가진다.

 

만일 데이터가 이진값(binary)을 갖는다면?

 

상관계수와 코사인 유사도는 사용할 수 없기 때문에 타니모토 계수(Tanimoto coefficient)가 있다.

 

 

2. 기본 협업 필터링 알고리즘

 

현재 사용자와 취향이 비슷한 사용자 그룹을 따로 선정하지 않고 모든 사용자의 평점을 가지고 예측합니다.

 

1) 모든 사용자간의 평가의 유사도를 계산합니다. (상관계수, 코사인 유사도 사용)

2) 현재 추천 대상이 되는 사람과 다른 사용자와 유사도를 추출한다.

3) 현재 사용자가 평가하지 않은 모든 아이템에 대해서 현재 사용자의 예상 평가값을 구한다.

     - 예상 평가값은 다른 사용자의 해당 아이템에 대한 평가를 현재 사용자와 그 사용자와의 유사도를 가중하여 평균합니다.

4) 아이템 중에서 예상 평가값이 가장 높은 N개의 아이템을 추천한다.

 

3. 이웃을 고려한 협업 필터링

 

앞의 기본적인 협업필터링을 개선하기 위한 방법입니다.

 

모든 사용자가 아닌 유사도가 높은 사용자를 선정해서 그 사람들의 평점을 가지고 예측을 하는 것입니다.

 

이웃을 정하는 기준

 

1) 이웃의 크기를 미리 정해놓고 추천 대상 사용자와 가장 유사한 K명을 선택하는 KNN(K Nearest Neighbors) 방법

2) 이웃의 크기가 아닌 유사도의 기준을 정해놓고 그 기준을 충족시키는 사용자를 이웃으로 하는 Thresholding 방법

 

2) 방법이 1) 방법보다 정확하다고 하지만 정해진 기준을 넘는 사용자가 없어서 추천을 못하는 경우도 있어서 KNN 방법을 자주 사용한다.

 

4. 최적의 이웃 크기 결정

 

이웃의 크기가 커지면 집단별 취향을 확인 할 수 없고 정확도가 떨어지게 된다.

 

이웃의 크기가 작으면 사용자와 취향의 유사도가 아주 높은 소수의 이웃의 평가만 사용하게 됩니다. - 과적합의 위험

 

최적의 이웃의 크기는 도메인에 따라 다르며 큰 단위로 변화시키며 확인 후에 특정구간에서 세밀하게 확인하는 방법이 좋습니다.

 

5. 사용자의 평가경향을 고려한 협업 필터링

 

협업 필터링의 정확도를 개선시키는 하나의 방법으로 user bias(사용자의 평가경향)을 고려하여 예측치를 조정하는 것입니다.

 

예시로는 사용자에 따라 평가를 전체적으로 높게 혹은 낮게 하는 경우가 있습니다.

 

사용하는 알고리즘은

 

1) 각 사용자의 평점평균을 구합니다.

2) 각 아이템의 평점을 각 사용자의 평균에서의 차이(평점 - 해당 사용자의 평균) 으로 변환합니다

3) 2)에서 구한 편차를 사용해서 해당 아이템의 편차 예측값을 구합니다. = 해당 사용자의 이웃을 구하고 이들 이웃의 해당 아이템에 대한 평점편차와 가중평균합니다.

4) 이렇게 구한 편차 예측값은 평균에서의 차이를 뜻합니다. 변환을 위해 현 사용자의 평균에 이 편차 예측값을 더해줍니다.

 

식 : 

 

아이템 i 에 대한 사용자 a의 예상 평점 = 사용자 a의 전체 평점평균 + {(사용자a와u의 유사도)*(사용자u의 평점 - 사용자 u의 전체평점평균)의 합계 / 사용자a와 u의 유사도의 합계

 

6. 그외의 협업필터링 정확도 개선 방법

 

협업 필터링을 위해서는 우선 사용자a와 다른 사용자간의 유사도를 구해야합니다.

 

이 유사도는 사용자 a와 다른 사용자가 공통으로 평가한 아이템에 대한 평점을 사용해서 구해집니다.

 

그러나 이 공통으로 평가한 아이템의 수가 많을 수도 적을 수도 있습니다.

 

이중 많은 경우가 더 신뢰도가 높다고 판단하고 유사도의 가중을 신뢰도에 따라 가중치를 변화해주는 방법입니다.

 

이 방법에서는 가중치의 변화가 큰 차이를 만들 수 있어 일정 수준의 신뢰도 값보다 이상인 사용자만을 예측치 계산에 사용합니다.

 

7. 사용자 기반 / 아이템 기반 협업 필터링

 

7-1. 사용자 기반 협업 필터링 (UBCF)

 

취향이 비슷한 이웃 사용자를 알아내고 이 그룹에 속한 사용자들이 공통적으로 좋게 평가한 아이템 추천

 

- 각 사용자별로 맞춤형 추천을 하여 데이터가 많으면 정확한 추천이 가능

- 데이터가 바뀜에 따라 업데이트를 자주 실행해야한다.

**데이터 크기가 적고 각 사용자에 대한 충분한 정보가 있는 경우 UBCF

 

7-2. 아이템 기반 협업 필터링(IBCF)

 

사용자들의 평가 패턴을 바탕으로한 아이템 간의 유사도를 통해서 사용자의 특정 아이템에 대한 예측 평점을 계산하는 방식

 

- 정확도는 떨어지나 사용자별로 계산을 하지 않아 연산이 빠르다.

- 데이터가 바뀌어도 추천 결과에 큰 영향을 주지않아 업데이트를 자주 하지 않아도 된다.

**데이터가 크거나 각 사용자에 대한 정보가 충분하지 않는 경우 IBCF

 

 

8. 추천 시스템 평가지표

 

정확도 측정 방법으로는 (1) 아이템의 예상평점과 실제평점 차이 계산 , (2) 추천한 아이템과 사용자의 실제 선택을 비교 하는 방법이 있습니다.

 

(1)번 형태에서는 연속된 수에 대한 평가임으로 MSE, RMSE와 같은 지표를 사용합니다.

(2)번 형태에서는 이진값으로 나누어지게되어 정밀도(precision), 재현율(recall), f1-score, coverage 를 사용합니다.