Collaborative Filtering
항목의 내용 기반 특성을 사용하지 않고, 유사한 사용자를 찾아 그들의 선호템을 추천하는 방식
사용자 x와, 그가 사용하지 않은 항목 i를 생각해보자.
1. x와 '비슷한' 평점을 가진 사용자 N 집합을 찾는다.
2. i에 대한 N의 평점을 기반으로 x의 i에 대한 평점을 추정한다.
그럼 저 N을 찾으려면 어떻게 해야 하느냐,
사용자의 행을 유틸리티 행렬에서 가져와 비교 후,
행 벡터의 유사성으로 사용자간 유사성을 판별
유사도는 또 어떻게 측정하느냐 하면, 사용자들의 평점 벡터 rx와 ry를 활용하는데, 이들의 코사인 유사도를 사용한다.
공식은 아래와 같고, 작은 각도가 나오면 선호도가 비슷하단 얘기. 근데 직관적이진 않다.
뭐가 직관적이지 않냐면, 결측값 처리나 사용자의 개별 평가 기준을 고려하지 않기 때문.
만약 유틸리티 행렬에서 우리의 예측으로는 sim(A, B) > sim(A, C)였는데,
실제로 sim(A,B)=0.38 > sim(A,C)=0.32 라면? 뭐.. 맞긴 한데.. 그닥 큰 차이가 없다 이거임
또, C는 스타워즈를 사랑하고, A는 스타워즈를 싫어하고, B는 스타워즈를 안 봤다면..? 이런 의견 차이를 반영하지 못한다.
그리고 그냥 웬만하면 4점을 다 주는 사용자는.. 별로 유용하지가 않다.
그래서 이를 해결하기 위해 평균 중심화 유틸리티 행렬을 사용한다.
각 사용자의 평균 평점을 계산 후, 이를 각 평점에서 빼는 방식으로 정규화를 진행한다.
그럼 비교 결과를 훨씬 직관적으로 만들 것이다.
예를 들어 위에서 A, B, C의 유사도를 평균 중심화 유틸리티 행렬로 다시 계산해본다면,
Cos(A, B) = 0.092, Cos(A, C) = -0.559로, 우리가 예상한 것처럼 엄청 차이가 난다.
공통 평가 항목을 기준으로 유사성을 계산하는 것도 있는데,
두 사용자가 공통으로 평가한 항목만 사용하는 것이다. null값들은 빼고 코사인 유사도 다시 계산!
Mean-centered overlapping-item cosine similarity
만약 rx가 x'의 별점이고, rx_bar가 rx의 null을 제외한 것들의 평균이라면?
평균 중심화된 공통 코사인 유사도는 다음과 같이, 피어슨 상관계수처럼 계산할 수 있다.
(여기서 Sxy는 두 사용자가 모두 평가한 항목 집합)
일단 x' 사용자의 별점 벡터를 rx라 하고,
항목 i를 평가한 k개의 사용자 집합을 N이라고 하자.
그럼 x의 i에 대한 예측은,
N이 i를 평가한 것의 평균으로 주어진다.
또는 나와의 유사성에 의한 가중합으로 표현할 수 있다.
그리고 만약 그 유틸리티 행렬 R을 Q*P.T로 나타낸다면, R의 결측치들을 Q*P.T로 계산할 수 있다.
'AI > 데이터과학' 카테고리의 다른 글
Centrality (0) | 2024.12.14 |
---|---|
Page Ranks and Random Walks in Graph (3rd page 계산 추가) (1) | 2024.12.14 |
NN(Neural Networks), Convolution, Pooling (0) | 2024.12.14 |
Vector Space Model, TFIDF, Word2vec (68-70p 추가) (2) | 2024.12.13 |
결정트리(Decision Tree) (1) | 2024.12.12 |