D040

1 minute read

Implementing Collaborative Filtering

CF 를 사용하기 위해서는 유사한 집합 N 을 찾아야 합니다.
사용자 혹은 아이템의 수는 굉장히 많기 때문에 계산량이 높습니다.
유틸리티 행렬의 크기만큼 (O(|U|)) 계산이 필요합니다.
때문에 LSH 나 클러스터링, 차원축소 같은 기법을 사용하여 N 을 찾습니다.
LSH 로 유사한 집합을 찾거나, 클러스터링을 통해 전체 아이템 중 일부(클러스터) 만 사용하여 연산을 수행합니다.

CF 는 콘텐츠 기반 추천과는 다르게 feature를 선택할 필요가 없습니다.
사전작업이 불필요하고, 설정한 feature 에 표현하지 못한 특성들도 반영될 수 있습니다.

그러나 다음과 같은 단점도 존재합니다.

  • Cold Start
    사용자가 충분히 많지 않다면, 유사한 집합에 해당하는 사람도 적을 것이고, 그 특성을 나타내기가 어려울 것 입니다.
  • Sparsity
    사용자가 레이팅한 것이 희소하기 때문에
    해당 아이템에 다른 레이팅 정보가 없으면 유사한 아이템을 추천하기가 어렵습니다.
  • First rater
    새로운 아이템이 추가된다면, 점수가 없기 때문에 이 아이템은 추천이 될 수 없습니다.
  • Popularity bias
    전체적으로 점수가 높은 아이템의 경우
    사람의 취향과 관계없이 대부분의 사람들에게 많이 추천됩니다.
    사람의 특정한 취향에 대한 추천이 흐려질 수 있습니다.

이와 같이 CF에도 구조상 발생할 수 밖에 없는 문제들이 있습니다.
때문에 다른 방식과 결합한 방식을 사용합니다.

콘텐츠 기반 방식에 CF 를 결합할 수 있습니다.
새로운 아이템에 아이템 프로필을 추가하여, 해당하는 사용자에게 추천하는 방식으로 시스템을 구성할 수 있습니다.

이 방식 외에도 두개 이상의 추천방식을 합쳐서 사용할 수 있습니다.

Global baseline 방식을 예를 들어 보자면,
전체 영화의 평균 평점이 3.7이고,
A 라는 영화의 평점은 평균 0.5 점 높습니다.
사용자 x 는 영화에 대해 0.2 정도 낮게 레이팅을 합니다.
이 경우 Baseline 추정치는 3.7+0.5-0.2 = 4 입니다.
즉, 사용자 x 가 A 라는 영화에 대해 4를 줄 것이라고 추정하는 것 입니다.

만약 x 가 A와 유사한 영화 B에 대해 1정도 낮게 레이팅을 했다면,
이 정보(CF)를 반영해서 Baseline 에서 1을 뺍니다.
최종적으로 A 라는 영화를 4-1 = 3 으로 추정할 수 있습니다.

위의 방식을 적용하여 다음 같은 식을 세울 수 있습니다.

\[r_{xi} = b_{xi} - \frac{\sum_{y \in N}s_{xy}(r_{yi}-b_{yi} )}{\sum_{y \in N}s_{xy}}\]

\(b_{xi} = \mu + b_x + b_i\) ,
( $\mu$ : 전체 영화 평균, $b_x$ : 사용자 x의 평점 분산, $b_i$ : 영화 i 의 분산)

이와 같이 실제 상황에 따라 여러 방식을 결합하여
추천시스템을 구현할 수 있습니다.

다음 포스팅에서는 추천시스템의 성능을 어떻게 평가하는지 다루겠습니다.

Updated:

Comments