[뇌가번쩍] Collaborative Filtering
What is CF?
Content-based recommendation 과는 다르게 사용자나 아이템에 대한 정보가 필요 없어요.
사용자의 과거의 행동들
에 기반해서아이템을 추천
해요
Categories
User-based
사용자와 다른 사용자들의 유사도를 측정해요
Item-based
사용자의 인터랙션(구매, 평가.. etc) 들의 유사도를 측정해요
비슷한 사용자는 비슷한 관심요소를 가지고, 사용자는 비슷한 아이템들을 좋아한다.
요게 키포인트 입니다.
자, 이제 m 명의 사용자와 n 개의 아이템들이 있다고 가정을 해봐요. 그리고 m * n 사이즈를 가지는 사용자의 과거 행태를 나타내는 매트릭스를 만듭니다. 매트릭스 각각의 셀은 해당 아이템들에 대한 사용자의 Opinion 또는 Feedback 을 나타내요.
예를 들어 M_{i,j} 는
사용자 i 가 아이템 j 를 얼마나 좋아하는 지
나타내고 이걸 Utility Matrix 라고 불러요.
CF 는 Utility Matrix의 빈 셀(사용자가 아직 보거나 평가하지 않은 아이템
)에 사용자나 아이템 간의 유사성을 토대로 채우는것과 같아요.
이렇게 빈 셀을 채울 데이터는 크게 두가지 타입이 있습니다.
Data types
바로 Explicit 과 Implicit 입니다.
Explicit Opinion
사용자가 그 아이템을 어떻게 평가한지 그냥 직접적으로 보여줍니다. 데이터 크기가 그렇게 크지는 않습니다.
영화 평점, 앱 평가, 좋아요 etc..
Implicit Opinion
사용자가 어떤 아이템을 좋아하는지에 대한 정보를 제공하는 역할만 해요.
명확한게 아닌 사용자의 행동들을 나타낸다고 보면 됩니다.
클릭 수, 방문 수, 방문 시간, 조회수 etc…
요렇게 비교가 됩니다.
Explicit Opinion은 그 숫자가 뭘 의미하는지 생각할 필요가 없어요. 그래서 Implicit Opinion 보다 더 직관적입니다.
한 가지 예를 들어볼께요. 한 사용자가 매우 좋아하는 노래가 있어요. 근데 너무 바빠서 한 번만 들어요. 만약에 Explicit Opinion (여기선 음악에 대한 별점?정도
) 이 없다면 어떨까요? 좋아하는 지 아닌지 확실히 알 수가 없게 됩니다. 하지만 대부분의 데이터는 Implicit 한 것들입니다. 그만큼 Implicit 한 데이터의 양은 어마어마 합니다. 최근에는 Implicit 한 데이터를 적극 활용합니다.
자 그럼 어떻게 사용하는지 알아봅시다.
How it Works?
User-based CF
앞에서 간단하게 User-based 는 사용자 간의 유사도를 측정한다고 말했습니다. 그럼 어떻게 그 유사도를 측정할까요?
여기 이렇게 생긴 사용자들의 책 rating 을 나타낸 Utility Matrix 가 있습니다.
사용자 간 유사도를 측정하기 위한 방법 중에 가장 대표적인 두가지가 있습니다.
Pearson Correlation
가장 흔히 쓰이는 Correlation에요. 일반적으로 Correlation 하면 Pearson을 의미합니다.
r = X 와 Y 가 함께 변하는 정도 / X와 Y가 각각 변하는 정도
r이 -1.0과 -0.7 사이이면, 강한 음적 선형관계,
r이 -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계,
r이 -0.3과 -0.1 사이이면, 약한 음적 선형관계,
r이 -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계,
r이 +0.1과 +0.3 사이이면, 약한 양적 선형관계,
r이 +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계,
r이 +0.7과 +1.0 사이이면, 강한 양적 선형관계
입니다.
Cosine Similarity
속성 A, B의 벡터값이 각각 주어졌을 때, 코사인 유사도 cos(θ)는 벡터의 스칼라곱과 크기로 다음과 같이 표현할 수 있습니다.
계산공식자리
계산된 유사도는 −1에서 1까지의 값을 가지며, −1은 서로 완전히 반대되는 경우, 0은 서로 독립적인 경우, 1은 서로 완전히 같은 경우를 의미합니다.
Similarity Example
아래 Utility Matrix 로 한번 설명해 봅시다요.
The Avengers | Sherlock | Transformers | Matrix | Titanic | Me Befor You | |
---|---|---|---|---|---|---|
A | 2 | - | 2 | 4 | 5 | - |
B | 5 | - | 4 | - | - | 1 |
C | - | - | 5 | - | 2 | - |
D | - | 1 | - | 5 | - | 4 |
E | - | - | 4 | - | - | 2 |
F | 4 | 5 | - | 1 | - | - |
Item-based CF
Item-based는 사용자간의 유사성이 아닌 타겟 사용자가 평가한 아이템
들 사이의 유사도를 판단합니다.
The Avengers | Sherlock | Transformers | Matrix | Titanic | Me Befor You | |
---|---|---|---|---|---|---|
A | 2 | - | 2 | 4 | 5 | - |
B | 5 | - | 4 | - | - | 1 |
C | - | - | 5 | - | 2 | - |
D | - | 1 | - | 5 | - | 4 |
E | - | - | 4 | - | - | 2 |
F | 4 | 5 | - | 1 | - | - |
Item-based 또한 유사도를 측정하기 위한 방법 중으로 위에서 말한
Pearson Correlation 과 Cosine Similarity 가 있습니다.
여기서 차이점이 중요합니다.
CF 는 Utility Matrix의 빈 셀(
사용자가 아직 보거나 평가하지 않은 아이템
)에 사용자나 아이템 간의 유사성을 토대로 채우는것과 같아요.
라고 앞서 말했어요. Item-based 는 수직으로 채워 넣는 작업, User-based는 가로로 채워 넣는 작업이라고 생각하시면 되요.
아래 예시를 보시면 한번에 이해가 가실꺼에요
The Avengers | Sherlock | Transformers | Matrix | Titanic | Me Befor You | |
---|---|---|---|---|---|---|
A | 2 | - | 2 | 4 | 5 | - |
B | 5 | - | 4 | - | - | 1 |
C | - | - | 5 | - | 2 | - |
D | - | 1 | - | 5 | - | 4 |
E | - | - | 4 | - | - | 2 |
F | 4 | 5 | - | 1 | - | - |