33
추천 시스템에 대한 좁고도 얕은 지식 최수경 Curation? Personalization? Recommendation!

Recommendatioin system basic

Embed Size (px)

Citation preview

Page 1: Recommendatioin system basic

추천�시스템에�대한��

좁고도�얕은�지식

최수경

Curation?�Personalizat

ion?�Recommendation!

Page 2: Recommendatioin system basic

시작하기�전에

Page 3: Recommendatioin system basic

이�문서는�전혀�새로운�내용이�아닙니다.��

인터넷에�친절하게�설명된�한글!자료를�읽고,��

나름대로�순서를�잡아�풀어냈을�뿐이죠.�

저의�이해를�도와주신�모든�분들께�감사드립니다.��^^

주로�참고한�싸이트�…�이외에도�자잘하게�많을거�같네요.�ㅎㅎ�

• https://brunch.co.kr/@cordiallys/7�

• 개인화/맞춤형�서비스의�한계와�포텐셜�(블로그)�

• http://rosaec.snu.ac.kr/meet/file/20120728b.pdf��

• 추천시스템�-�협업시스템�중심�(KAIST�ROSAEC�워크샵�발표자료)�

• http://readme.skplanet.com/?p=2509�

• MapReduce�기반�대용량�추천�알고리즘�(SK�planet�기술�블로그)�

• https://www.slideshare.net/deview/261-52784785�

• 실시간�추천엔진�노트북에서�돌아가게..(DEVIEW�2015�하용호님�발표자료)

Page 4: Recommendatioin system basic

내가�고민하는�추천�시스템의�대상은�무엇인가요?�

내용을�더�잘�이해하기�위해서��

하나의�앱�또는�시스템을�머릿속에�담고�따라가�보시길�추천합니다.�

이�아이콘이�등장할때마다�잠깐�멈춰서�답을�고민해보시구요.

Page 5: Recommendatioin system basic

일단�개념을�좀�잡아볼까요

Page 6: Recommendatioin system basic

큐레이션�Curation

Old�:��미술관에서�기획자들이�우수한�작품을�뽑아�전시하는�행위�

Now�:��모든�분야에서�양질의�콘텐츠를�선별,�조합해�특별한�의미를�부여하고�가치를�재창출하는�행위

빅뱅의�탑은�요즘�큐레이터로도�활동하고�있다네요

Page 7: Recommendatioin system basic

개인화�Personalization판매자가�소비자의�이름,�관심사,�과거�구매이력�등을�기반으로�시장에�전달할�메시지를�조정하여�특정�고객에�맞는�마케팅�메시지를�만들어내는�것

https://brunch.co.kr/@cordiallys/7

페이스북은�개인화의�대표적�사례입니다.�친구들의�싸이월드�미니홈피를�방문하던�시절과�비교해보세요.

Page 8: Recommendatioin system basic

개인화�Personalization

큐레이션�Curation

60억�인류 너란�사람N명의�유저�그룹

차이는�타겟�대상�그룹의�크기!

타게팅�대상을�얼마나�샤프~하게�다듬을�것이냐가�차이를�가른다고�할�수�있죠.

Page 9: Recommendatioin system basic

추천

매출�증대결국�최종�목표는?

그러거나�말거나,

Page 10: Recommendatioin system basic

추천방식에는�

종류가�여러가지�있습니다

Page 11: Recommendatioin system basic

추천을�위한�접근�방법

사람을�바탕으로�하는�Collaborative�Filtering

내용을�바탕으로�하는�Content-based�Filtering

?�collaborative��item_based��Filtering

이건�정확히�어느쪽인지�잘�모르겠더군요.�정리하신�분마다�조금씩�달라서…

Page 12: Recommendatioin system basic

사람을�바탕으로�하는�Collaborative�Filtering

내용을�바탕으로�하는�Content-based�Filtering

유사도�Similarity

결국�알아내야�하는건�

얼마나�비슷하냐는…

Page 13: Recommendatioin system basic

내용을�바탕으로�하는�

Content-based�Filtering

텍스트�위주의�문서인�경우�유사도�계산을�위해�보통�TF-IDF를�사용�

방법은�

1. 한�문서�안에서�여러번�등장하는�단어는�적게�등장하는�단어보다�

중요(Term�Frequency)�

2. 여러�문서에서�전체적으로�드물게�등장하는�단어는�자주�등장하는�

단어보다�중요�(Inverse�Document�Frequency)�

3. 짧은�문서가�긴�문서보다�더�중요�(Normalization)�

의�기준으로�처리한�숫자를�가지고�문서간�유사도를�추정

Page 14: Recommendatioin system basic

키워드를�추출해��수식에�입력�유사도�계산

하지만�TF-IDF�외에도��

누가�콘텐츠를�들여다�보고��

정보를�뽑아내느냐에�따라�방법은�수만가지…

기계 유저

A,B�콘텐츠를�모두�좋아하는�유저가��많을수록�높은�유사도

사람이�직접�보고��태깅하거나�분류

관리자

내용을�바탕으로�하는�

Content-based�Filtering

Page 15: Recommendatioin system basic

• 내가�고민하는�추천�시스템에는�어떤�방식이�좋을까요?�

기계 유저

키워드를�추출해��수식에�입력�유사도�계산

A,B�콘텐츠를�모두�좋아하는�유저가��많을수록�높은�유사도

사람이�직접�보고��태깅하거나�분류

관리자

아래�화살표�중�어딘가…�또는�완전히�새로운�어떤�방법…

Page 16: Recommendatioin system basic

• 다른�사용자의�정보나�평가�내역이�없이�사용가능�

• (아직�평가되지�않은)�새로�추가된�항목도�무리없이�추천�가능

내용을�바탕으로�하는�

Content-based�Filtering

관리자나�유저가�입력하는�방식은�collaborative�filtering의�item-based�방식과�유사한�장단점을�가집니다.�그�내용은�뒤에�나와요~~~�

(기계가�콘텐츠의�특징과�유사도를�추출하는�방식을�쓰는�경우)

• 명시적으로�표현된�특징만�다룰�수�있고�질적인�부분을�포착하지�못함�

• 추천항목이�비슷한�항목�내에만�머무르는�한계가�있음

Page 17: Recommendatioin system basic

내가�고민하는�시스템에�Content-based�Filtering을�적용한다면?

• 새로운�콘텐츠가�빠르게,�많이�유입되는�경우라면?�

•사용자가�반응한�이력이�쌓여�처리하지�않고�빠르게�추천�하기�위해서,�

content-based�filtering이�꼭�필요할�듯��

• 콘텐츠의�특징을�자동으로�추출하는�것이�가능한지?�

• 텍스트가�아닌�이미지나�동영상�콘텐츠가�많다면�이들의�특징을�추출하는�

방법에�대해�연구가�필요할�듯�

• 현재,�태그를�관리자가�입력하고�있다면?�

• 관리자의�업무�량을�줄이기�위해서,�자동적으로�특징을�1차�추출한�후�관리

자가�검수하는�방식으로�개선할�수�있을�듯

이런것들을�고민해볼�수�있을것�같아요.�

Page 18: Recommendatioin system basic

사람을�바탕으로�하는�

Collaborative�Filtering

사람기반으로�하면�-�User�Based�CF��

상품기반으로�하면�-�Item�Based�CF�인데�이건�Content-Based와�겹침�

사람기반이란?��

• 유사한�행동�패턴을�가진�사용자를�찾아�그들의�패턴을�예측정보로�제공��

수집하는�수위에�따라���

1. 구매�결정,�평점�정보�등�명확하고�능동적인�행위만�수집�

2. 콘텐츠를�들여다�본(=머무른)시간,�본�횟수�등�유저가�인지하기�어려

운�정보도�(몰래몰래!)�수집

분류�자체는�제�입장에선�중요하지�않아서�이�정도로�스킵�합니다.�^^;;;�

Page 19: Recommendatioin system basic

• 사람이�실�생활의�문제를�고민해서�공급한�정보이므로�정확도�높음�

• 여러�사람의�평가가�쌓이므로�집단지성이라�할�수�있음

사람을�바탕으로�하는�

Collaborative�Filtering

• 완전�자동화의�경우,�아이템이�무엇에�관한�것인지�왜�추천되는지�

전혀�알지�못하는�상태에서�추천이�이루어지는�위험을�안고�있음�

• 신규�유저는�성향이�파악되지�않아�추천할�수�없는�상황(Cold�

Start�Problem)이,�오래된�유저는�너무�많이�구매해서�선호가�분산

되므로�추천하기�어려운�상황�발생�

• 새로�추가된�상품은�평가가�없어서�추천되지�않는�상황(First�Rater�

Problem)�발생�

Page 20: Recommendatioin system basic

내가�고민하는�시스템에게�Collaborative�user-based�Filtering이란?

• 유저X상품�행렬의�크기는?�

• 대부분�일정�규모�이상이�되기�때문에�계산을�줄일�수�있는�방법을�(사전�

클러스터링�등)�고려�

• 얼마나�자주�계산해야�할지?�

• 실시간�처리의�수준을�고민�

• 인기가�없거나�새로�등록된�콘텐츠에�대한�처리는?�

• 일부는�content-base�filtering을�쓰거나,�적절한�초기값을�세팅하는�방

법을�고민

이런것들을�고민해볼�수�있을것�같아요.�

Page 21: Recommendatioin system basic

잠시,�추천�시스템하면�떠오르는�watcha�보고�가실께요.

• 선평가�후추천��

���(‘평가늘리기’�메뉴)�

• 추천�이유�공개�

• 추천�영화�pool�관리�

(reload시�다른�영화)

!�추천�이유를�공개하면�효과가�더�높다고…�!�사용자가�관심없어하는�추천�영화를����집요하게�추천하지�않도록,�풀관리를�꼭�해야…

Page 22: Recommendatioin system basic

여기서�잠깐!�

왓차는�Collaborative�Filtering�일까요?��아니면�Content-based�Filtering일까요?

저도�정확히�모르지만,���당연히�어느쪽�하나만�쓰진�않을거에요.�적당히�잘�섞어서�쓰고�있을�겁니다요~~~�호호호�

개념을�정리하는�차원에서�고민�해보시라도�드린�질문입니다.

Page 23: Recommendatioin system basic

그럼�어떻게�구현해야�할까요?

Page 24: Recommendatioin system basic

Content-based�Filtering�구현

TF-IDF�방식의�계산은…

Page 25: Recommendatioin system basic

Content-based�Filtering�구현

TF-IDF�방식의�계산은…

그�용어가�그�문서에서��얼마나�자주�등장한�놈인지�점수를�매기고,

일반적으로�아무�문서에나�자주�나오는��놈이라면�점수를�깍고,

1�이하의�값이�되도록�조정해서,

비교할�두�문서에�등장한�모든�용어별�W값을�이용해서�유사도를�계산�하는�거에요.

d는�document�t는�term�인데,

Page 26: Recommendatioin system basic

수식하나�알았다고�끝이�아닌것이,�

TF-IDF�방식이든�다른�방식이든간에,�

콘텐츠를�잘�표현할�수�있도록�용어(term)를�잘�분리해내고��뭐가�키워드이고�뭐가�아닌지를�골라내는�작업이�관건인거지,�뭐�수식은�컴퓨터가�잘�계산�해�줄거니까…�

그럼�아예�콘텐츠의�키워드를�사람이�골라내면�쉬운…?�

하지만,�관리자�한�사람이�태깅하는데는�한계가�있어.�

유저의�집단지성을�이용하자니�초기값이�필요하고…

이러지도�저러지도…�

Page 27: Recommendatioin system basic

User-based�CF�구현

나와�구매�이력이�비슷한�사용자들을�찾아,�그들이�많이�산�아이템을�추천

사용자#1의�상품�#1에�대한�추천�점수는요~�

=�SUM(�사용자�#N�과의�유사도�*�사용자#N의�구매여부)�

=�0.67�*�0�+�0�*�1�=�0

http://readme.skplanet.com/?p=2509

상품#1 상품#2 상품#3 상품#4

사용자#1 0 1 0 1

사용자#2 0 1 1 1

사용자#3 1 0 1 0

• 사용자#1과�사용자#2의�유사도는�

=�교집합�원소수�/�합집합�원소수�=�2/3�=�0.67�

• 사용자#2와�사용자#3�=�1/4�=�0.25�

• 사용자#1과�사용자#3�=�0/4�=�0

Page 28: Recommendatioin system basic

User-based�CF�구현

그런데�매트릭스가�엄청�커지면?�계산�불가…�그래서�미리�그룹핑(pre-clustering)을�약간해서�처리

­�1st�Map:�각�사용자별�구매�로그�기반�Minhash�key�계산�­�1st�Reduce:�Group�ID별�사용자�모으기�­�2nd�Map:�사용자별�grouping을�위해�다시�각�사용자를�key로�해서�emit.�

Page 29: Recommendatioin system basic

User-based�CF�구현

minHash는�뭔데?�어떻게�미리�그룹핑이�가능한거지?�

앞에서�설명한�유사도�계산�방식

• 사용자#1과�사용자#2의�유사도는�

=�교집합�원소수�/�합집합�원소수�=�2/3�=�0.67�

• 사용자#2와�사용자#3�=�1/4�=�0.25�

• 사용자#1과�사용자#3�=�0/4�=�0

랜덤한�순서를�가지는�hash함수를�선언

hash1�=�상품#2�>�3�>�1>�4�

hash2�=�상품#3�>�1�>�4�>�2�의�순으로�보다가�첫번째로�1이�나오는게�몇번째인지�구함

hash#1 hash#2

사용자#1 1 3

사용자#2 1 1

사용자#3 2 1

• 사용자#1과�사용자#2의�유사도는�

=�같은�숫자의�비율�=�1/2�=�0.5�

• 사용자#2와�사용자#3�=�1/2�=�0.5�

• 사용자#1과�사용자#3�=�0/2�=�0

상품#1 상품#2 상품#3 상품#4

사용자#1 0 1 0 1

사용자#2 0 1 1 1

사용자#3 1 0 1 0

위�결과를�보고,�또�로직을�생각해보면�‘대략’�비슷한�놈을�찾아�준다는�걸�알�수�있다.�물론�이후로도�더�생각해야�할�구현의�문제는�많지만,�너무�많고�난�잘�모르니�일단�여기까지만…�^^;�

https://www.slideshare.net/deview/261-52784785

Page 30: Recommendatioin system basic

결론은?

Page 31: Recommendatioin system basic

So�What?

지금까지�

• 큐레이션,�개인화,�추천이�뭔지�

• 어떤�종류가�있는지�

• 수식이�어떻고,�그래서�어떻게�구현할�수�있는지�

기본만�살펴봤다.��

그럼�이제?�

만드는�일이�남았다.

Page 32: Recommendatioin system basic

내가�만들고자�하는�시스템or앱의�상태를�잘�살펴서��

적절한�기법을�골라야�하는데,�

그럼에도,�

개념�하나로�될�리�만무하니,�여러�방법을�잘�조합해야�하고,�

반드시!�A/B�테스트하면서,�지속적으로�잘�튜닝해야�한다.

So�What?

Page 33: Recommendatioin system basic

끝�

감사합니다.