[추천알고리즘] 협업필터링,Collaborative Filtering(CF)

Posted by 알 수 없는 사용자
2015. 9. 20. 03:48 프로그래밍/빅데이터

추천알고리즘(Recommender Algorithm) : 어떤 아이템에 대한 사용자의 선호도를 바탕으로 예측하여 다른 아이템을 알려주는 방법


데이터수집 -> 데이터가공 -> 추천계산 -> 결과도출


데이터수집 : 말 그대로 추천에 사용할 유저행동 데이터를 수집하는것

데이터가공 : 현실속 데이터는 개판이기 때문에..어느정도 가공할 필요성은 있다

추천계산 : 본포스팅에서 주로 다룰 추천계산방법....CF기준

결과도출 : 유사도를 뽑아낸뒤 sort하여 최상위 N개를 뽑아내면 완료


협업필터링,Collaborative Filtering(CF)

1. 나와 가장 유사한 성향지닌 사람을 기반으로 그 사람이 들은 아이템을 추천해주는 것

2. 내가 선호하는 아이템을 기반으로 가장 유사한 성향의 아이템을 추천해주는 것

[그림1] 행위기반 추천 예제


자 이제 유사한(similarity) 성향이라는것은 어떻게 가늠할까?

추천해줄 대상(아이템)의 선호도를 바탕으로 계산된다.

각각의 선호도, 그림1에서 과일들을 구매한횟수, 먹은횟수 가장 최근에 접한 날짜에 대한 데이터 등을 바탕으로 집계한 선호도를 바탕으로 

아래의 공식에 적용시킨다


피어슨상관관계(Pearson product-moment correlation coefficient) : -1부터 1의 값을 가지며 -1은 역으로 동일 , 0 데이터끼리 관계가 전혀 없음, 1은 완전 동일


[공식1]

사용자x와 사용자y의 유사도를 구하는 공식


cosine similarity : 0에서 1까지 값을 가지며 0은 관계없음 1은 완전히 동일


[공식2]

사용자A와 사용자B의 유사도를 구하는 공식



하지만 실제 현실에선 횟수라던지 최근치라던지 그런 데이터들은 집계되지않는 경우가 많다, 집계될시  Y/N, 유무만 기록되기 때문에 합집합의 교집합을 집계로 하는 유사도 상관계수인 타니모토계수를 사용하기도한다

Tanimoto(jaccard)0에서 1까지 값을 가지며 0은 관계없음 1은 완전히 동일

[공식3]

사용자A와 사용자B의 유사도를 구하는 공식

그외 유클리디언 상관계수..는 생략


이렇게 열심히 유사도를 계산해도..

data는 sparse하기 때문에 두드러진 유사도를 찾기 힘들다, 이렇기 때문에 클러스터링이 추가되고......분류가 시작되고....거기에서 또 필터링을 시작하고....