recommendatioin system basic
Post on 21-Apr-2017
114 Views
Preview:
TRANSCRIPT
추천�시스템에�대한��
좁고도�얕은�지식
최수경
Curation?�Personalizat
ion?�Recommendation!
시작하기�전에
이�문서는�전혀�새로운�내용이�아닙니다.��
인터넷에�친절하게�설명된�한글!자료를�읽고,��
나름대로�순서를�잡아�풀어냈을�뿐이죠.�
저의�이해를�도와주신�모든�분들께�감사드립니다.��^^
주로�참고한�싸이트�…�이외에도�자잘하게�많을거�같네요.�ㅎㅎ�
• 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�하용호님�발표자료)
내가�고민하는�추천�시스템의�대상은�무엇인가요?�
내용을�더�잘�이해하기�위해서��
하나의�앱�또는�시스템을�머릿속에�담고�따라가�보시길�추천합니다.�
이�아이콘이�등장할때마다�잠깐�멈춰서�답을�고민해보시구요.
일단�개념을�좀�잡아볼까요
큐레이션�Curation
Old�:��미술관에서�기획자들이�우수한�작품을�뽑아�전시하는�행위�
Now�:��모든�분야에서�양질의�콘텐츠를�선별,�조합해�특별한�의미를�부여하고�가치를�재창출하는�행위
빅뱅의�탑은�요즘�큐레이터로도�활동하고�있다네요
개인화�Personalization판매자가�소비자의�이름,�관심사,�과거�구매이력�등을�기반으로�시장에�전달할�메시지를�조정하여�특정�고객에�맞는�마케팅�메시지를�만들어내는�것
https://brunch.co.kr/@cordiallys/7
페이스북은�개인화의�대표적�사례입니다.�친구들의�싸이월드�미니홈피를�방문하던�시절과�비교해보세요.
개인화�Personalization
큐레이션�Curation
60억�인류 너란�사람N명의�유저�그룹
차이는�타겟�대상�그룹의�크기!
타게팅�대상을�얼마나�샤프~하게�다듬을�것이냐가�차이를�가른다고�할�수�있죠.
추천
매출�증대결국�최종�목표는?
그러거나�말거나,
추천방식에는�
종류가�여러가지�있습니다
추천을�위한�접근�방법
사람을�바탕으로�하는�Collaborative�Filtering
내용을�바탕으로�하는�Content-based�Filtering
?�collaborative��item_based��Filtering
이건�정확히�어느쪽인지�잘�모르겠더군요.�정리하신�분마다�조금씩�달라서…
사람을�바탕으로�하는�Collaborative�Filtering
내용을�바탕으로�하는�Content-based�Filtering
유사도�Similarity
결국�알아내야�하는건�
얼마나�비슷하냐는…
내용을�바탕으로�하는�
Content-based�Filtering
텍스트�위주의�문서인�경우�유사도�계산을�위해�보통�TF-IDF를�사용�
방법은�
1. 한�문서�안에서�여러번�등장하는�단어는�적게�등장하는�단어보다�
중요(Term�Frequency)�
2. 여러�문서에서�전체적으로�드물게�등장하는�단어는�자주�등장하는�
단어보다�중요�(Inverse�Document�Frequency)�
3. 짧은�문서가�긴�문서보다�더�중요�(Normalization)�
의�기준으로�처리한�숫자를�가지고�문서간�유사도를�추정
키워드를�추출해��수식에�입력�유사도�계산
하지만�TF-IDF�외에도��
누가�콘텐츠를�들여다�보고��
정보를�뽑아내느냐에�따라�방법은�수만가지…
기계 유저
A,B�콘텐츠를�모두�좋아하는�유저가��많을수록�높은�유사도
사람이�직접�보고��태깅하거나�분류
관리자
내용을�바탕으로�하는�
Content-based�Filtering
• 내가�고민하는�추천�시스템에는�어떤�방식이�좋을까요?�
기계 유저
키워드를�추출해��수식에�입력�유사도�계산
A,B�콘텐츠를�모두�좋아하는�유저가��많을수록�높은�유사도
사람이�직접�보고��태깅하거나�분류
관리자
아래�화살표�중�어딘가…�또는�완전히�새로운�어떤�방법…
• 다른�사용자의�정보나�평가�내역이�없이�사용가능�
• (아직�평가되지�않은)�새로�추가된�항목도�무리없이�추천�가능
내용을�바탕으로�하는�
Content-based�Filtering
관리자나�유저가�입력하는�방식은�collaborative�filtering의�item-based�방식과�유사한�장단점을�가집니다.�그�내용은�뒤에�나와요~~~�
(기계가�콘텐츠의�특징과�유사도를�추출하는�방식을�쓰는�경우)
• 명시적으로�표현된�특징만�다룰�수�있고�질적인�부분을�포착하지�못함�
• 추천항목이�비슷한�항목�내에만�머무르는�한계가�있음
내가�고민하는�시스템에�Content-based�Filtering을�적용한다면?
• 새로운�콘텐츠가�빠르게,�많이�유입되는�경우라면?�
•사용자가�반응한�이력이�쌓여�처리하지�않고�빠르게�추천�하기�위해서,�
content-based�filtering이�꼭�필요할�듯��
• 콘텐츠의�특징을�자동으로�추출하는�것이�가능한지?�
• 텍스트가�아닌�이미지나�동영상�콘텐츠가�많다면�이들의�특징을�추출하는�
방법에�대해�연구가�필요할�듯�
• 현재,�태그를�관리자가�입력하고�있다면?�
• 관리자의�업무�량을�줄이기�위해서,�자동적으로�특징을�1차�추출한�후�관리
자가�검수하는�방식으로�개선할�수�있을�듯
이런것들을�고민해볼�수�있을것�같아요.�
사람을�바탕으로�하는�
Collaborative�Filtering
사람기반으로�하면�-�User�Based�CF��
상품기반으로�하면�-�Item�Based�CF�인데�이건�Content-Based와�겹침�
사람기반이란?��
• 유사한�행동�패턴을�가진�사용자를�찾아�그들의�패턴을�예측정보로�제공��
수집하는�수위에�따라���
1. 구매�결정,�평점�정보�등�명확하고�능동적인�행위만�수집�
2. 콘텐츠를�들여다�본(=머무른)시간,�본�횟수�등�유저가�인지하기�어려
운�정보도�(몰래몰래!)�수집
분류�자체는�제�입장에선�중요하지�않아서�이�정도로�스킵�합니다.�^^;;;�
• 사람이�실�생활의�문제를�고민해서�공급한�정보이므로�정확도�높음�
• 여러�사람의�평가가�쌓이므로�집단지성이라�할�수�있음
사람을�바탕으로�하는�
Collaborative�Filtering
• 완전�자동화의�경우,�아이템이�무엇에�관한�것인지�왜�추천되는지�
전혀�알지�못하는�상태에서�추천이�이루어지는�위험을�안고�있음�
• 신규�유저는�성향이�파악되지�않아�추천할�수�없는�상황(Cold�
Start�Problem)이,�오래된�유저는�너무�많이�구매해서�선호가�분산
되므로�추천하기�어려운�상황�발생�
• 새로�추가된�상품은�평가가�없어서�추천되지�않는�상황(First�Rater�
Problem)�발생�
내가�고민하는�시스템에게�Collaborative�user-based�Filtering이란?
• 유저X상품�행렬의�크기는?�
• 대부분�일정�규모�이상이�되기�때문에�계산을�줄일�수�있는�방법을�(사전�
클러스터링�등)�고려�
• 얼마나�자주�계산해야�할지?�
• 실시간�처리의�수준을�고민�
• 인기가�없거나�새로�등록된�콘텐츠에�대한�처리는?�
• 일부는�content-base�filtering을�쓰거나,�적절한�초기값을�세팅하는�방
법을�고민
이런것들을�고민해볼�수�있을것�같아요.�
잠시,�추천�시스템하면�떠오르는�watcha�보고�가실께요.
• 선평가�후추천��
���(‘평가늘리기’�메뉴)�
• 추천�이유�공개�
• 추천�영화�pool�관리�
(reload시�다른�영화)
!�추천�이유를�공개하면�효과가�더�높다고…�!�사용자가�관심없어하는�추천�영화를����집요하게�추천하지�않도록,�풀관리를�꼭�해야…
여기서�잠깐!�
왓차는�Collaborative�Filtering�일까요?��아니면�Content-based�Filtering일까요?
저도�정확히�모르지만,���당연히�어느쪽�하나만�쓰진�않을거에요.�적당히�잘�섞어서�쓰고�있을�겁니다요~~~�호호호�
개념을�정리하는�차원에서�고민�해보시라도�드린�질문입니다.
그럼�어떻게�구현해야�할까요?
Content-based�Filtering�구현
TF-IDF�방식의�계산은…
Content-based�Filtering�구현
TF-IDF�방식의�계산은…
그�용어가�그�문서에서��얼마나�자주�등장한�놈인지�점수를�매기고,
일반적으로�아무�문서에나�자주�나오는��놈이라면�점수를�깍고,
1�이하의�값이�되도록�조정해서,
비교할�두�문서에�등장한�모든�용어별�W값을�이용해서�유사도를�계산�하는�거에요.
d는�document�t는�term�인데,
수식하나�알았다고�끝이�아닌것이,�
TF-IDF�방식이든�다른�방식이든간에,�
콘텐츠를�잘�표현할�수�있도록�용어(term)를�잘�분리해내고��뭐가�키워드이고�뭐가�아닌지를�골라내는�작업이�관건인거지,�뭐�수식은�컴퓨터가�잘�계산�해�줄거니까…�
그럼�아예�콘텐츠의�키워드를�사람이�골라내면�쉬운…?�
하지만,�관리자�한�사람이�태깅하는데는�한계가�있어.�
유저의�집단지성을�이용하자니�초기값이�필요하고…
이러지도�저러지도…�
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
User-based�CF�구현
그런데�매트릭스가�엄청�커지면?�계산�불가…�그래서�미리�그룹핑(pre-clustering)을�약간해서�처리
�1st�Map:�각�사용자별�구매�로그�기반�Minhash�key�계산��1st�Reduce:�Group�ID별�사용자�모으기��2nd�Map:�사용자별�grouping을�위해�다시�각�사용자를�key로�해서�emit.�
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
결론은?
So�What?
지금까지�
• 큐레이션,�개인화,�추천이�뭔지�
• 어떤�종류가�있는지�
• 수식이�어떻고,�그래서�어떻게�구현할�수�있는지�
기본만�살펴봤다.��
그럼�이제?�
만드는�일이�남았다.
내가�만들고자�하는�시스템or앱의�상태를�잘�살펴서��
적절한�기법을�골라야�하는데,�
그럼에도,�
개념�하나로�될�리�만무하니,�여러�방법을�잘�조합해야�하고,�
반드시!�A/B�테스트하면서,�지속적으로�잘�튜닝해야�한다.
So�What?
끝�
감사합니다.
top related