[Machine Learning] 협업 필터링

협업 필터링

협업 필터링은 많은 사용자들로부터 얻은 기호 정보(taste information)에 따라
사용자들의 관심사들을 자동적으로 예측하게 해주는 방법입니다.

예를 들어, 아래와 같은 데이터가 있고,
혜린이의 항목 4에 대한 기호 정보를 알고 싶다고 하겠습니다.

이름 항목 1 항목 2 항목 3 항목 4
지원 4 3 4 4
혜린 4 3 5 ?

이 경우에 혜린이의 항목1, 2, 3에 대한 기호 정보가 지원이와 유사하기 때문에
혜린이는 지원이와 비슷하다고 할 수 있고, 따라서 혜린이가 항목 4에 높은 점수를 줄 것이라 예측할 수 있습니다.

실제로는 데이터가 훨씬 많을 경우를 다루게 될 텐데
예를 들어 혜린이와 항목 1, 2, 3이 비슷한 사람이 1000명 있다면
그 1000명의 항목 4에 대한 평균을 혜린이의 항목 4에 대한 예측 값으로 사용하면 됩니다.

비슷함의 정의

누가 누구와 비슷한지 평가할 기준이 있어야 하는데,
그 기준으로 두가지 기준을 한 번 살펴보겠습니다.

유클리드 거리

n개의 항목이 있을 때
그 n개의 항목에 대한 값 각각을 각 차원축에 해당하는 값으로 사용합니다.
그렇게 해서 n차원에 각 데이터에 해당하는 점들을 나타내고,
그 점들 간의 거리를 유사한 정도로 사용합니다.

점들 간의 거리가 가깝다면 유사한 것이고,
점들 간 거리가 멀다면 유사하지 않은 것입니다.

이렇게 구한 거리를 유클리드 거리라고 합니다.

이를 수식으로 표현하면 아래와 같습니다.

\[ \displaystyle dist(a, b) = \sqrt{\sum_{i=1}^{n}(r_{i}^{(a)} - r_{i}^{(b)})^{2}} \]

코사인 유사도

유클리드 거리에서는 각 데이터를 점으로 나타냈는데,
코사인 유사도에서는 내적공간의 두 벡터간 코사인 값을 이용하여 그 유사도를 측정합니다.

코사인 유사도는 클수록 두 데이터가 비슷하고,
작을수록 두 데이터가 다릅니다.
코사인 함수가 두 벡터가 이루는 각이 크면 클수록 더 작은 값을 반환하는 성질을 이용하는 것입니다.

이와 관련된 예시는 그림과 함께 보기 위해 아래 코드를 참고하세요.

이를 수식으로 나타내면 아래와 같습니다.

\[ \displaystyle cos(\theta) = \frac{A \cdot B}{\Vert A \Vert \times \Vert B \Vert} \]

기호 정보 데이터 전처리

모든 데이터에, 데이터 각각의 모든 항목에 모든 기호 정보에 대한 값이 다 있을 경우는 현실적으로 없습니다.
군데군데 비어있을 수 밖에 없을 텐데요,
이럴 경우에 데이터를 처리할 수 있는 방법을 알아보겠습니다.

0으로 계산

빈 칸을 모두 0으로 생각하고 계산할 수 있는데,
이 경우에는 정확도에 큰 영향을 줄 수 있기 때문에 별로 좋은 방법이 아닙니다.

평균값 이용하기

비어있는 항목을 값이 있는 항목들의 평균값으로 채워넣는 방식입니다.
이렇게 하면 0을 사용하는 것보다 훨씬 합리적입니다.

Mean Normalization 이용하기

비어있는 항목을 값이 있는 항목들의 평균값으로 채워넣은 다음
mean normalization을 해주기 위해 각 항목에 평균을 빼줍니다.

이렇게 하면 모르는 값들을 합리적으로 채워넣을 수 있고,
까다로운 데이터에 대한 처리 또한 가능합니다.

그러니까, 어떤 사람은 완전 좋아도 3점, 어떤 사람은 조금만 좋아도 4점을 줄 수 있겠죠
이런 경우에 유저들의 평균 평점을 0으로 맞춰주면
더 싫거나 보통이거나 좋아하는 항목에 대해 비슷한 값을 가질 수 있어
비슷한 유저를 찾을 때 더 직관적으로 찾을 수 있습니다.

상품 기반 협업 필터링

여태는 유저 기반 협업 필터링을 다뤘는데,
이론상으로는 별 차이가 없지만,
실제로는 유저들이 상품보다 복잡하기 때문에 상품 기반 협업 필터링이 더 성능이 좋은 경우가 많습니다.

상품 기반 협업 필터링에서는 유저가 좋아하는 항목을 하나 찾고
그 항목과 비슷한 항목을 찾아 유저에게 추천합니다.

협업 필터링 장단점

장점

  • 속성을 찾거나 정할 필요가 없다.
  • 좀 더 폭넓은 상품을 추천할 수 있다.
  • 내용 기반 추천보다 성능이 더 좋게 나오는 경우가 많다.

단점

  • 데이터가 많아야 한다.
  • 인기가 많은 소수의 상품이 추천 시스템을 장악할 수 있다.
  • 어떤 상품이 왜 추천됐는지 정확히 알기 힘들다.

Updated:

Leave a comment