SlideShare a Scribd company logo
1 of 33
Download to read offline
추천 시스템에 대한
좁고도 얕은 지식
최수경
Curation? Personalization? 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?
끝
감사합니다.

More Related Content

Similar to Recommendatioin system basic

Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리SANG WON PARK
 
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스Minkyu Cho
 
유사 이미지 검색 기술 동향 - Pinterest 사례
유사 이미지 검색 기술 동향 - Pinterest 사례유사 이미지 검색 기술 동향 - Pinterest 사례
유사 이미지 검색 기술 동향 - Pinterest 사례Geunhee Cho
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System Kwangseob Kim
 
Survey - 카페 추천 기술기획 (2014-02-10)
Survey - 카페 추천 기술기획 (2014-02-10)Survey - 카페 추천 기술기획 (2014-02-10)
Survey - 카페 추천 기술기획 (2014-02-10)병국 민
 
창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝Sang-Min Park
 
데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립승화 양
 
[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자
[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자
[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자Dylan Ko
 
온라인 서비스 개선을 데이터 활용법 - 김진영 (How We Use Data)
온라인 서비스 개선을 데이터 활용법  - 김진영 (How We Use Data)온라인 서비스 개선을 데이터 활용법  - 김진영 (How We Use Data)
온라인 서비스 개선을 데이터 활용법 - 김진영 (How We Use Data)Jin Young Kim
 
AI 유저리서치를 할 수 있을까?
AI 유저리서치를 할 수 있을까?AI 유저리서치를 할 수 있을까?
AI 유저리서치를 할 수 있을까?Myuserable
 
카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험Ohgyun Ahn
 
게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기ByungChun2
 
If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기광영 김
 
UX 디자인 7가지 비밀: 비밀 4
UX 디자인 7가지 비밀: 비밀 4UX 디자인 7가지 비밀: 비밀 4
UX 디자인 7가지 비밀: 비밀 4Nammin Lee
 
전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)
전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)
전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)Yan So
 
Recommendation System History
Recommendation System HistoryRecommendation System History
Recommendation System HistoryTae Young Lee
 
데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력Youngjae Kim
 
진화하는 소셜 큐레이션 서비스와 관련 기술
진화하는 소셜 큐레이션 서비스와 관련 기술진화하는 소셜 큐레이션 서비스와 관련 기술
진화하는 소셜 큐레이션 서비스와 관련 기술Taegon Kim
 
Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Youngbin Han
 

Similar to Recommendatioin system basic (20)

Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리Machine Learning Foundations (a case study approach) 강의 정리
Machine Learning Foundations (a case study approach) 강의 정리
 
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스
 
유사 이미지 검색 기술 동향 - Pinterest 사례
유사 이미지 검색 기술 동향 - Pinterest 사례유사 이미지 검색 기술 동향 - Pinterest 사례
유사 이미지 검색 기술 동향 - Pinterest 사례
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
[PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System [PYCON Korea 2018] Python Application Server for Recommender System
[PYCON Korea 2018] Python Application Server for Recommender System
 
Survey - 카페 추천 기술기획 (2014-02-10)
Survey - 카페 추천 기술기획 (2014-02-10)Survey - 카페 추천 기술기획 (2014-02-10)
Survey - 카페 추천 기술기획 (2014-02-10)
 
창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝
 
데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립데이터가 흐르는 조직 만들기 - 마이리얼트립
데이터가 흐르는 조직 만들기 - 마이리얼트립
 
[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자
[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자
[우리가 데이터를 쓰는 법] 온라인 서비스 개선을 위한 데이터 활용법 - 마이크로소프트 김진영 데이터과학자
 
온라인 서비스 개선을 데이터 활용법 - 김진영 (How We Use Data)
온라인 서비스 개선을 데이터 활용법  - 김진영 (How We Use Data)온라인 서비스 개선을 데이터 활용법  - 김진영 (How We Use Data)
온라인 서비스 개선을 데이터 활용법 - 김진영 (How We Use Data)
 
AI 유저리서치를 할 수 있을까?
AI 유저리서치를 할 수 있을까?AI 유저리서치를 할 수 있을까?
AI 유저리서치를 할 수 있을까?
 
카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험
 
게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기
 
If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기
 
UX 디자인 7가지 비밀: 비밀 4
UX 디자인 7가지 비밀: 비밀 4UX 디자인 7가지 비밀: 비밀 4
UX 디자인 7가지 비밀: 비밀 4
 
전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)
전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)
전혀 새로운 방법의 데이터 탐색 - 김민수 (Tableau)
 
Recommendation System History
Recommendation System HistoryRecommendation System History
Recommendation System History
 
데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력데이터를 얻으려는 노오오력
데이터를 얻으려는 노오오력
 
진화하는 소셜 큐레이션 서비스와 관련 기술
진화하는 소셜 큐레이션 서비스와 관련 기술진화하는 소셜 큐레이션 서비스와 관련 기술
진화하는 소셜 큐레이션 서비스와 관련 기술
 
Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기
 

Recommendatioin system basic

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