ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [데이터분석개론] Collaborative Filtering
    IT&컴퓨터공학/데이터분석개론 2021. 2. 15. 23:26

    Collaborative Filtering

     

    다른 사용자들과의 협업을 통해 구현되는 알고리즘.

     

    즉, 다른 유저의 추천 데이터들을 바탕으로 시스템을 구현한다. 사용자들의 데이터를 바탕으로 추천을 구축하는데, 하위 항목으로 아이템 기반 필터링(Item-based Filtering) 과 유저 기반 필터링(User-based Filtering) 으로 구분된다.

     

    https://journals.plos.org/plosone/article/figure?id=10.1371/journal.pone.0199748.g002

    (좌)유저 기반 필터링의 경우, 추천을 받을 사용자(A)와 유사한 타 사용자(B)를 추천 리스트를 통해 찾아내고 B가 좋아하는 목록 중 아직 A가 경험한 적 없는 아이템을 추천해준다. 좌측 이미지에 해당한다.

     

    (우)아이템 기반 필터링의 경우, 아이템들에 대해서 사용자들의 선호도를 기반으로 유사한 아이템을 찾아 추천하는 기법이다. 우측 이미지처럼 User A/C/D 를 통해 유사한 Item 두 가지가 검증되어 해당 아이템을 추천하는 기법이다. 

     

    Item-User Matrix

     

    Collaborative filtering 에는 item-user 간 정보가 필요한데, 이를 Matrix 로 나타낼 수 있다.

     

    r(1,1) 의 경우 , 유저 1번의 아이템 1 번에 대한 생각을 나타낸다. 예를들어 하나를 샀다면 1, 혹은 rating 을 매긴경우 50점 등으로 나타낸다.

     

    그러나 이 matrix 에는 문제점이 있는데,  데이터 간 스케일이 너무 달라지는 경우가 발생한다.

    예를 들어 생필품을 몇번 샀는가 ? 를 나타낼때,

    에어컨의 경우는 거의 한 두번밖에 안사지만

    휴지의 경우는 아주 많이 사기 마련이다. 

    이런경우엔 데이터 간 스케일 차이가 너무 커져서 한쪽 아이템으로 쏠림 현상이 일어나는데,

    이를 해결하기위해 cosine similarity 가 등장했다.

     

    진행과정

     

    1. A라는 유저와 가장 비슷한 interest 를 가진 유저들을 찾는다. ( 이웃 )

    2. 이 이웃들이 구매한 아이템 중 A 유저가 아직 구매하지 않은 아이템이 있으면, 그 아이템을 A에게 추천해준다.

     

    이웃을 찾는다는 점에서 앞에서 본 K-NN 알고리즘과 유사하다.

    그러나 K-NN 알고리즘에서는 나와 비슷한 유저를 찾을 때 유클리드 거리를 사용했고,

    Collaborative Filtering 에서는 Measuring Proximity 를 사용한다.

     

    Measuring Proximity

     

    CF에서는 유클리드 거리가 잘 안맞아서, 상관관계 개념을 도입했다.

    유저1과 유저2의 상관관계는 이렇게 나타낼 수 있다.

    상관관계는 (-1 ~ +1 ) 사이의 값을 가지며, -1 의 경우엔 정 반대의 추천을 해주면 된다.

     

    노란색 줄을 친건 각 유저가 아이템별 rating 을 했을때 rating 값의 평균을 나타내는데,

    이 노란색 부분을 지우면 그게 바로 cosine similarity 가 된다.

     

    Cosine Similarity

     

    Cosine Similarity 에서는 아이템을 얼마나 많이샀는지는 고려하지않는다.

    이게 무슨말일까 ?

     

    해당 그래프에서 User1 과 User2 의 각도가 같다는걸 알 수 있다.

    각도가 같다는건 얘네 끼리 비슷한 패턴으로 item 을 산다는 것이다.

     

    차이점은 User2는 해당 아이템을 많이 사는 사람이라 벡터 자체가 클 뿐이고,

    User1은 해당 아이템을 적게 사는 사람이라 벡터 자체가 작을 뿐이다.

     

    그러나 본질적으로 두 유저는 item 구매에 있어서 비슷한 패턴을 가지고 있다.

    때문에 cosine similarity 에서는 두 데이터 간 얼마나 서로 비슷한 각도를 가지고 있는지로 가까운 이웃을 선택한다.

     

    아까 위에서 본 이 두 유저의 경우 같은 선상에 있으므로 θ = 0 이다 . 따라서 아이템을 산 양은 다르지만 

    두 유저는 서로 유사한 유저로 분류된다.

     

    Cold Start Problem

     

    CF 가 가지고 있는 큰 문제점이다.

    CF의 경우엔 서비스에 막 들어온 새로운 유저에게는 바로 추천을 해주기 어렵다.

     

    어느 정도 데이터가 쌓여서 이 유저가 어떤 패턴을 가지고 있는지 알아내야, 

    이 패턴과 비슷한 각도를 가진 유저들을 기반으로 새로운 아이템을 추천해줄 수 있는데

     

    데이터가 없는경우엔 패턴 자체를 구할 수가 없기 때문이다.

     

     

    Association Rules vs Collaborative Filtering

     

    Association Rules

    • 자주 등장하는 아이템 조합을 고려함
    • user dimension 은 무시한다

    Collaborative Filtering

    • 유저 선호도를 고려함
    • 수치로 표현할 수 있기때문에 좀 더 명확하다.

    댓글

Designed by Tistory.