빅데이터

간략하게 알아보는 추천시스템

CyberI 2017. 12. 29. 16:33


이번에는 추천시스템에 대해 간략하게 알아보겠습니다.


추천시스템은 Content-basedCollaborative Filtering으로 크게 두 가지로 나뉠 수 있습니다.

Content-based는 말 그대로 추천하고자 하는 아이템에 대한 정보를 기반으로 추천하는 알고리즘입니다. 영화를 예로 들면 특정 배우 혹은 장르와 같은 아이템의 정보들을 기준으로 추천을 합니다. 많은 사용자의 이용 정보 없이도 충분히 추천이 가능하지만 모델링 방식에 따라 정확도가 많이 달라지고, 비슷한 아이템끼리만 추천이 가능하여 추천 범위가 제한되는 단점이 있습니다.

Collaborative Filtering는 위와 같이 영화를 예로 들면 해리포터를 좋아하는 A와 성향이 비슷한 B역시 해리포터를 좋아 할 것이라는 것을 활용한 기법으로 아이템 또는 사용자 간 유사도에 중점을 둔 추천시스템이며 가장 많이 쓰이는 알고리즘 중 하나입니다. 정확도가 content-based보단 비교적 좋고 사용자의 행동 패턴에 따라 적절한 추천이 가능합니다. 하지만 수집된 정보의 양이 많아야 좋은 결과가 나오는 단점이 있습니다.

 

Collaborative filtering도 두 가지로 나뉠 수 있는데 item-based CFuser-based CF가 있습니다.

 

쉽게 설명하자면 item-based는 상품 간의 유사도를 기반으로 콜라를 자주 사먹는 사람에게 콜라와 비슷한 탄산음료를 추천하는 기법이며 user-based는 유저 간의 유사도를 기반으로 상품을 추천하는 것을 예로 피자와 파스타를 먹는 사람들이 주로 탄산음료를 같이 먹기 때문에 피자를 구매 시 탄산음료를 추천하는 기법입니다..

 

유사도를 계산하는 알고리즘은 유클리디안(Euclidean) 거리 점수 기반,코사인(Cosine) 기반,자카드 계수 (Jaccard) 기반, 피어슨 상관계수, 맨해튼 거리 등 여러 가지가 있습니다.

 

CF에 대해 간단히 알아보았으니 영화 관람 여부를 기반으로하여 item-based CF로 간단한 영화 추천을 해보려고 합니다.


영화 관람 여부는 아래와 같습니다.

영화의 관람여부를 true 1 false 0으로 정하도록 하였습니다.

 

Lord of the Rings

Man of Steel

INCEPTION

Avengers

John

1

0

1

0

Peter

0

1

0

1

Sam

0

0

1

1

Nolan

1

1

0

1

Derrick

1

0

1

0

john에게 영화를 추천하려고 합니다. 보지 않은 영화인  man of steel avengers 중 어떤 것부터 추천해야 할지 알아보도록 하겠습니다.

보았던 영화들과 보지 않은 영화의 유사도를 구해보려고 합니다. 먼저 Man of Steel과 Lord of the Rings 의 유사도를 먼저 구하려고 합니다.

 

Lord of the Rings

Man of Steel

INCEPTION

Avengers

John

1

0

1

0

Peter

0

1

0

1

Sam

0

0

1

1

Nolan

1

1

0

1

Derrick

1

0

1

0

 두 영화의 유사도는 코사인 유사도를 이용하여 구하겠습니다.

각 영화를 벡터화를 시키면 Lord of the rings [1,0,0,1,1] Man of Steel [0,1,0,1,0]이 됩니다.

코사인 유사도는 두 단위 벡터의 내적을 이용해서 벡터 간의 내각의 크기로 유사도를 측정합니다.

측정값은 0 1사이의 값을 가지며 해당 값의 의미는 0에 가까울수록 일치하는 것이 없다고 보며 1에 가까울수록 일치하는 것이 많으며 1일 때 완전히 같은 값이고, 0일 때 서로 일치하는 것이 하나도 없다고 봅니다.

수식은 다음과 같습니다.


벡터 계산이 좀 쉽도록 numpy라이브러리를 이용하여 간략하게 두 영화의 유사도를 비교하면 다음과 같습니다

두 영화 간의 유사도가 0.41 정도가 나왔습니다이젠 Man of Steel John이 보았던 다른 영화(INCEPTION)와 다시 비교를 합니다결과는 0으로 나옵니다보았던 모든 영화와 비교해서 나온 결과를 합산한 값이 추천의 지표가 됩니다이제 보지 않았던 avengers에 대해서도 Man of Steel과 똑같이 관람했던 영화들과의 유사도의 합을 구해봅니다.

결과는

Man of Steel과의 유사도

Lord of the Rings : 0.408248290464

INCEPTION : 0

Man of Steel의 추천 점수 : 0 + 0.408248290464

Avengers와의 유사도

Lord of the Rings : 0.333333333333

INCEPTION : 0.333333333333

Avengers 의 추천 점수0.333333333333 + 0.333333333333 = 0.666666666667

 

Lord of the Rings

Man of Steel

INCEPTION

Avengers

John

1

0.408

1

0.666

Peter

0

1

0

1

Sam

0

0

1

1

Nolan

1

1

0

1

Derrick

1

0

1

0


점수가 높을수록 기존의 영화들과의 연관성이 높다고 판단하기 때문에 john에게는 avengers를 먼저 추천하는 결과를 얻을 수 있습니다.




'빅데이터' 카테고리의 다른 글

클라우드 환경을 손쉽게 구축하기위한 DC/OS 알아보기  (0) 2018.01.12
[Spark] Streaming에서 DataFrame Tip  (0) 2017.11.30
Apache Phoenix 활용  (0) 2017.11.28
NoSQL 데이터 모델링  (0) 2017.10.30
HBase 개념 정리  (0) 2017.09.21