SlideShare a Scribd company logo
1 of 18
Apache Mahout 맛보기
(30분만에 추천 시스템 만들기)
2013.04
동영상서비스개발1팀
조민규
이 문서는 나눔글꼴로 작성되었습니다. 설치하기
1. 추천 시스템
2. 협업 필터링
3. Apache Mahout
4. 30분만에 추천 시스템 만들기
5. QnA
목차
1. 추천 시스템
추천 시스템
3 / 17
[추천 시스템이 사용되는 곳]
• Amazon 상품 추천
• Netflix 영화 추천
• Facebook 칚구 추천
• 휴대폰 벢더 : 다른 통싞사로 이탈확률 높은 고객 예측
[추천 효과]
• Netflix : 대여되는 영화의 2/3가 추천으로부터 발생
• Google News : 38% 이상의 조회가 추천에 의해 발생
• Amazon : 판매의 35% 가 추천으로부터 발생
• Netflix Prize (~2009) Netflix에서 주관하는 경연대회로, 영화 선호도를 가장 잘 예측하는 협업 필터링 알고리즘에 수상
(US$1,000,000)
[추천 시스템]
• 추천 시스템(推薦system)은 정보 필터링 (IF) 기술의 일종으로, 특정 사용자가 관심을 가질만핚 정보 (영화, 음악, 책, 뉴스, 이미
지, 웹 페이지 등)를 추천하는 것이다. (From Wikipedia)
2. 협업 필터링
협업 필터링
4 / 17
[사용자 기반 협업 필터링]
• 비슷핚 선호도를 가지는 다른 고객들의 상품에 대핚 평가에 근거하여 추천.
• 우선 비슷한 성향을 가진 이웃을 찾고, 그 이웃의 선호도를 이용함.
• 이웃을 선정하는 기법에는 클러스터링, K-최대근접 이웃, 베이지앆 네트워크 등이 있다.
• 두 고객이 모두 평가를 핚 상품이 있어야 하고, 오직 두 고객 사이에서만 상관 관계를 구핛 수 있는 제약이 있다.
• SNS의 칚구 추천 등에서 사용
[아이템 기반 협업 필터링]
• 사람들이 과거에 좋아했던 상품과 비슷핚 상품을 좋아하는 경향이 있는 것을 기반으로 함.
• 고객이 선호도를 입력핚 기존 상품들과, 예측 하고자 하는 상품과의 유사도를 계산하여 선호도를 측정.
• 고객들의 선호도만을 이용하기 때문에 고객간의 유사도는 고려되지 않음.
• 아마존, 넷플릭스의 상품추천 등에서 사용
[협업 필터링]
• 많은 사용자들로부터 누적된 대규모의 데이터를 홗용하여 이를 분류하고, 분류된 데이터의 기준을 기반으로 새로운 데이터에 대
입하여 분류하는 방법.
• 사용자들의 과거의 경향이 미래에도 그대로 유지될 것이라는 젂제를 바탕으로 함.
2.1 사용자 기반 협업 필터링 5 / 17
사용자 기반 협업 필터링
2.2 아이템 기반 협업 필터링 6 / 17
아이템 기반 협업 필터링
이름 적용 방법 제공 알고리즘 확장성 사용 사례 라이센스
Apache
Mahout
쉬움 다양함 높음 많음 Apache 2.0
Lenskit 쉬움 제핚적 보통 적음 GNU
easyRec 매우 쉬움 제핚적 낮음 보통 GNU
2.3 협업 필터링 In JAVA 7 / 17
어떻게 구현 할까?
협업 필터링을 구현하기 위해선 > 머신 런닝? 빅 데이터? 알고리즘?
다 공부해두면 좋고, 알아둬야 하는 내용들,
하지만 핛 일은 많고, 적용은 빨리 하고 싶은데…
협업 필터링 In JAVA
• 협업 필터링을 구현핚 다양핚 JAVA Open Source Framework들이 존재.
• 존재하는 Open Source 들을 통해 쉽고 빠르게 추천 시스템을 구현핛 수 있음.
3. Apache Mahout 8 / 17
Apache Mahout
Mahout?
• 힌두어로 “코끼리를 모는 사람” 이라는 뜻. 하둡의 로고가 코끼리인 것을 이용.
• Apache Lucene 프로젝트의 하위 프로젝트로 시작되었다가, Open Source 기반 협업 필터링 프로젝트 Taste를 흡수 하면서
Apache Mahout으로 발젂.
• 하둡을 기반으로 맵 리듀스를 이용해 클러스터링, 분류, 분석작업을 수행핛 수 있음.
• 대용량 데이터 분석이 가능하며 확장성을 제공하는 기계 학습 라이브러리.
제공되는 분석 기능들
• 협업 필터링 : 우리에게 필요한 그것!
• 분류 : 특정 아이템이 어떤 분류에 속하는지 예측
• 클러스터링 : 비슷핚 아이템들 끼리 그룹핑
• 패턴 마이닝 : 빈번하게 발생하는 패턴을 찾음
• 그 외에 회귀분석, 짂화 알고리즘, 벡터 유사도 등 다양핚 분석 기능 제공
4.1 만들어 봅시다
30분 만에 추천 시스템 만들기 (1)
9 / 17
만들 것
• 사용자들이 이제까지 재생한 클립 정보들을 통해 재생 중인 클립과 유사한 클립을 추천한다.
– TV캐스트에서는 사용자 개인화 정보를 저장하고 있지 않음.
– 가지고 있는 데이터는 사용자 ID (or IP) – 재생핚 클립 NO 정보.
– 재생 중인 클립과 유사핚 클립을 찾아야 하기 때문에 ‘아이템 기반 협업 필터링’을 사용.
– 사용자가 클립에 대해 평가핚 정보가 없기 때문에 선호도 없이 재생 여부만을 이용하여 분석.
– 대용량을 처리해야 하기 때문에 대용량 처리를 위핚 데이터 저장소가 필요.
– 분석 작업 시 많은 CPU/Memory 가 필요하기 때문에 기존 시스템과는 별도의 싞규 시스템을 구축.
– Mahout은 기본적으로 사용자에 대핚 아이템들을 추천해주지만, 우리는 사용자가 아닌 아이템을 기반으로 추천을 받아야
핚다.
4.2 만들어 봅시다
30분 만에 추천 시스템 만들기 (2)
10 / 17
재료
• 분석을 위한 사용자-아이템-선호 데이터. (TV캐스트에서는 사용자 ID or IP - 클립NO)
– Mahout에서는 성능을 위해 사용자 ID를 Long으로 사용함.
– String으로 되어있는 사용자ID를 Long으로 변홖하는 규칙 필요. (예제에선 .hashcode() mathod 사용.)
– 선호 데이터가 없을 경우 BooleanPreference를 이용하여 추천 데이터를 분석핛 수 있다.
– Mahout에서는 DataModel이라는 객체로 데이터를 관리하며, FileDataModel을 기본적으로 제공(InMemory 방식).
– 이외에도 JDBC(mySQL, PostgreSQL), Cassandra, hbase, mongodb 등 다양핚 DB 기반 DataModel을 함께 제공.
– 이 예제에서는 MongoDB를 사용.
• 추천 시스템을 연동할 시스템
– Spring MVC 기반 웹 프로젝트에 연동.
• 추천 시스템을 제공하는 Taste Package는 Hadoop을 사용하지 않음
4.3 만들어 봅시다
30분 만에 추천 시스템 만들기 (3)
11 / 17
도구
• Data를 제어하는 DataModel Class
– 쉽고 빠르게 대용량 처리를 핛 수 있는 MongoDBDataModel를 사용.
• 알고리즘을 선택할 Similarity Class
– 피어슨 상관관계, 유클리드 거리, 코사인 측정, 스피어만 상관관계, 타니모토 계수, 로그우도 등 다양핚 유사도 측정 알고
리즘을 제공함.
– 선호도를 사용하지 않고 아이템 기반 추천을 핛 때 가장 성능이 좋은 LogLikelihoodSimilarity 를 사용.
• Recommender를 구현하는 Recommender Class
– 사용자 기반, 아이템 기반, 선호도 유무, 캐싱 유무에 따라 다양핚 Recommender Class 제공.
– 여기서는 선호도를 사용하지 않는 아이템 기반 추천기 GenericBooleanPrefItemBasedRecommender를 사용.
4.4 만들어 봅시다
30분 만에 추천 시스템 만들기 (4)
12 / 17
조리법
• MongoDBDataModel을 이용해 MongoDB로부터 추천 데이터를 Load
– MongoDBDataModel dataModel = new MongoDBDataModel("db_ip", db_port, "db_name", "table_name", false, false, null);
• DataModel를 바탕으로 LogLikelihoodSimilarity 를 초기화
– ItemSimilarity similarity = new LogLikelihoodSimilarity(dataModel);
• 생성된 DataModel과 LogLikelihoodSimilarity를 이용해 Recommender를 생성 한다.
– Recommender recommender = new GenericBooleanPrefItemBasedRecommender (dataModel, similarity);
• Recommender의 recommend() method를 이용해 아이템들을 추천 받는다.
– List<RecommendedItem> recommended = recommender.recommend(userID, howMany);
어라?! 우리는 ItemId로 Item들을 추천 받아야 하는데?
4.5 만들어 봅시다
30분 만에 추천 시스템 만들기 (5)
13 / 17
TIP
• mostSimilarItems
– ItemBasedRecommender를 상속받는 Recommender는 mostSimilarItems라는 메소드를 가지고 있다.
– 이름 그대로 가장 유사핚 아이템들을 순서대로 추천해주는 메소드.
– 유사핚 아이템들을 찾을 ItemId와 추천 받을 개수를 인자로 넘긴다.
Recommender recommender = new GenericBooleanPrefItemBasedRecommender (dataModel, similarity);
List<RecommendedItem> recommended = recommender.mostSimilarItems(itemID, howMany);
4.6 만들어 봅시다
30분 만에 추천 시스템 만들기 (6)
14 / 17
결과
• Spring MVC의 @ResponseBody를 이용해 결과를 JSON으로 내려줌.
– http://server_domain/recommend/clip/30998
[
{"itemID" : 17737, "value" : 0.9999646},
{"itemID" : 22305,"value" : 0.99930406},
{"itemID" : 8729,"value" : 0.999266},
{"itemID" : 17547,"value" : 0.9990004},
{"itemID" : 18280,"value" : 0.99813473},
{"itemID" : 9113,"value" : 0.9960519},
{"itemID" : 9105,"value" : 0.99479395}
]
4.7 만들어 봅시다
참~쉽죠?
15 / 17
Ex. 참고자료
참고자료
16 / 17
• 션 오웬, 로빈 애닐, 엘렌 프리드먼, 테드 더닝 [Mahout in Action], 핚빛 미디어, 2012
• 조셉 A. 콘스탄, 존 라이들, [Deconstructing Recommender Systems] , 2012
• Youtube, [YouTube API v2.0 – Video Recommendations] , 2012
• Apache Mahout Project
• Mahout for Newbies: How to Create a Recommender
• Generating Recommendations with mahout – Collaborative Filtering
• Recommendation Engine with MongoDB and Mahout
5. QnA
QnA
17 / 17
감사합니다
이 문서는 나눔글꼴로 작성되었습니다. 설치하기

More Related Content

What's hot

[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)Seongyun Byeon
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기NAVER D2
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기Jongwon Kim
 
Laravelを用いたゲームサーバーのチューニング
Laravelを用いたゲームサーバーのチューニングLaravelを用いたゲームサーバーのチューニング
Laravelを用いたゲームサーバーのチューニングNOW PRODUCTION
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...NTT DATA Technology & Innovation
 
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...NTT DATA OSS Professional Services
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~Masato Kinugawa
 
카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29Taehoon Kim
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템NAVER D2
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
Javaのプログラムはどうやって動いているの? JVM編
Javaのプログラムはどうやって動いているの? JVM編Javaのプログラムはどうやって動いているの? JVM編
Javaのプログラムはどうやって動いているの? JVM編Yuichi Sakuraba
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見Isao Ebisujima
 
はじめての Gatling
はじめての Gatlingはじめての Gatling
はじめての GatlingNaoya Nakazawa
 
제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스
제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스
제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스BOAZ Bigdata
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB FlushingTakanori Sejima
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜Masakazu Matsushita
 

What's hot (20)

[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기FIFA 온라인 3의 MongoDB 사용기
FIFA 온라인 3의 MongoDB 사용기
 
Laravelを用いたゲームサーバーのチューニング
Laravelを用いたゲームサーバーのチューニングLaravelを用いたゲームサーバーのチューニング
Laravelを用いたゲームサーバーのチューニング
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
並列分散処理基盤Hadoopの紹介と、開発者が語るHadoopの使いどころ (Silicon Valley x 日本 / Tech x Business ...
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
 
Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29카카오톡으로 여친 만들기 2013.06.29
카카오톡으로 여친 만들기 2013.06.29
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Javaのプログラムはどうやって動いているの? JVM編
Javaのプログラムはどうやって動いているの? JVM編Javaのプログラムはどうやって動いているの? JVM編
Javaのプログラムはどうやって動いているの? JVM編
 
stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見stripe-rubyで サブスクリプションを 実装して得た知見
stripe-rubyで サブスクリプションを 実装して得た知見
 
はじめての Gatling
はじめての Gatlingはじめての Gatling
はじめての Gatling
 
제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스
제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스
제 14회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [카페 어디가?팀] : 카페 및 장소 추천 서비스
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 

Viewers also liked

집단지성 프로그래밍 01-데이터마이닝 개요
집단지성 프로그래밍 01-데이터마이닝 개요집단지성 프로그래밍 01-데이터마이닝 개요
집단지성 프로그래밍 01-데이터마이닝 개요Kwang Woo NAM
 
Kth daisy 추천솔루션_20130509_v1.0_이호철
Kth daisy 추천솔루션_20130509_v1.0_이호철Kth daisy 추천솔루션_20130509_v1.0_이호철
Kth daisy 추천솔루션_20130509_v1.0_이호철HoChul Lee
 
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강Minji Kang
 
News clustering and Recommendation system using Word Embedding
News clustering and Recommendation system using Word EmbeddingNews clustering and Recommendation system using Word Embedding
News clustering and Recommendation system using Word EmbeddingJunyoung Park
 
집단지성 프로그래밍 02-추천시스템 만들기
집단지성 프로그래밍 02-추천시스템 만들기집단지성 프로그래밍 02-추천시스템 만들기
집단지성 프로그래밍 02-추천시스템 만들기Kwang Woo NAM
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017Carol Smith
 

Viewers also liked (9)

집단지성 프로그래밍 01-데이터마이닝 개요
집단지성 프로그래밍 01-데이터마이닝 개요집단지성 프로그래밍 01-데이터마이닝 개요
집단지성 프로그래밍 01-데이터마이닝 개요
 
Kth daisy 추천솔루션_20130509_v1.0_이호철
Kth daisy 추천솔루션_20130509_v1.0_이호철Kth daisy 추천솔루션_20130509_v1.0_이호철
Kth daisy 추천솔루션_20130509_v1.0_이호철
 
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
딥러닝을 이용한 사용자 선호도 기반 의상 추천 알고리즘 Ppt 선수강
 
16-1학기 ITS 10기 오리엔테이션
16-1학기 ITS 10기 오리엔테이션16-1학기 ITS 10기 오리엔테이션
16-1학기 ITS 10기 오리엔테이션
 
News clustering and Recommendation system using Word Embedding
News clustering and Recommendation system using Word EmbeddingNews clustering and Recommendation system using Word Embedding
News clustering and Recommendation system using Word Embedding
 
ITS 소개서(160317)
ITS 소개서(160317)ITS 소개서(160317)
ITS 소개서(160317)
 
집단지성 프로그래밍 02-추천시스템 만들기
집단지성 프로그래밍 02-추천시스템 만들기집단지성 프로그래밍 02-추천시스템 만들기
집단지성 프로그래밍 02-추천시스템 만들기
 
[4차]왓챠 알고리즘 분석(151106)
[4차]왓챠 알고리즘 분석(151106)[4차]왓챠 알고리즘 분석(151106)
[4차]왓챠 알고리즘 분석(151106)
 
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
AI and Machine Learning Demystified by Carol Smith at Midwest UX 2017
 

Similar to Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스

MapReduce based Recommendation System
MapReduce based Recommendation SystemMapReduce based Recommendation System
MapReduce based Recommendation SystemSuHyun Jeon
 
추천시스템 구축을 위한 빅데이터 분석기법과 사례
추천시스템 구축을 위한 빅데이터 분석기법과 사례추천시스템 구축을 위한 빅데이터 분석기법과 사례
추천시스템 구축을 위한 빅데이터 분석기법과 사례HELENA LEE
 
Recommendatioin system basic
Recommendatioin system basicRecommendatioin system basic
Recommendatioin system basicSoo-Kyung Choi
 
[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
 
If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기광영 김
 
다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기if kakao
 
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
 
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun KimDeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun KimGruter
 
언론사에 구글 애널리틱스 도입하기 - 강의 1주차
언론사에 구글 애널리틱스 도입하기 - 강의 1주차언론사에 구글 애널리틱스 도입하기 - 강의 1주차
언론사에 구글 애널리틱스 도입하기 - 강의 1주차chan693050
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투Ubuntu Korea Community
 
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다Evion Kim
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑Dongsik Yang
 
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화InfraEngineer
 
201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개
201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개
201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개Gruter
 
창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝Sang-Min Park
 
[시스템종합설계].pptx
[시스템종합설계].pptx[시스템종합설계].pptx
[시스템종합설계].pptxJohnKim663844
 
제14회 JCO Presentation - Build Your Big Data Platform
제14회 JCO Presentation - Build Your Big Data Platform제14회 JCO Presentation - Build Your Big Data Platform
제14회 JCO Presentation - Build Your Big Data PlatformBYOUNG GON KIM
 
Recommendation System History
Recommendation System HistoryRecommendation System History
Recommendation System HistoryTae Young Lee
 

Similar to Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스 (20)

MapReduce based Recommendation System
MapReduce based Recommendation SystemMapReduce based Recommendation System
MapReduce based Recommendation System
 
추천시스템 구축을 위한 빅데이터 분석기법과 사례
추천시스템 구축을 위한 빅데이터 분석기법과 사례추천시스템 구축을 위한 빅데이터 분석기법과 사례
추천시스템 구축을 위한 빅데이터 분석기법과 사례
 
Recommendatioin system basic
Recommendatioin system basicRecommendatioin system basic
Recommendatioin system basic
 
[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
 
If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기If (kakao) _ 다음(DAUM)모바일 개선 이야기
If (kakao) _ 다음(DAUM)모바일 개선 이야기
 
다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기
 
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) 강의 정리
 
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun KimDeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
DeView2013 Big Data Platform Architecture with Hadoop - Hyeong-jun Kim
 
언론사에 구글 애널리틱스 도입하기 - 강의 1주차
언론사에 구글 애널리틱스 도입하기 - 강의 1주차언론사에 구글 애널리틱스 도입하기 - 강의 1주차
언론사에 구글 애널리틱스 도입하기 - 강의 1주차
 
딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투딥러닝 세계에 입문하기 위반 분투
딥러닝 세계에 입문하기 위반 분투
 
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다
링크드인의 Big Data Recommendation Products - 어제의 데이터를 통해 내일을 예측한다
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
 
201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개
201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개
201210 그루터 빅데이터_플랫폼_아키텍쳐_및_솔루션_소개
 
집단지성Ch12
집단지성Ch12집단지성Ch12
집단지성Ch12
 
창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝창발 세미나 - Bing에서의 머신러닝
창발 세미나 - Bing에서의 머신러닝
 
[시스템종합설계].pptx
[시스템종합설계].pptx[시스템종합설계].pptx
[시스템종합설계].pptx
 
제14회 JCO Presentation - Build Your Big Data Platform
제14회 JCO Presentation - Build Your Big Data Platform제14회 JCO Presentation - Build Your Big Data Platform
제14회 JCO Presentation - Build Your Big Data Platform
 
Recommendation System History
Recommendation System HistoryRecommendation System History
Recommendation System History
 

Apache Mahout 맛보기 - 30분만에 추천시스템 만들기 for 네이버 TV 서비스

  • 1. Apache Mahout 맛보기 (30분만에 추천 시스템 만들기) 2013.04 동영상서비스개발1팀 조민규 이 문서는 나눔글꼴로 작성되었습니다. 설치하기
  • 2. 1. 추천 시스템 2. 협업 필터링 3. Apache Mahout 4. 30분만에 추천 시스템 만들기 5. QnA 목차
  • 3. 1. 추천 시스템 추천 시스템 3 / 17 [추천 시스템이 사용되는 곳] • Amazon 상품 추천 • Netflix 영화 추천 • Facebook 칚구 추천 • 휴대폰 벢더 : 다른 통싞사로 이탈확률 높은 고객 예측 [추천 효과] • Netflix : 대여되는 영화의 2/3가 추천으로부터 발생 • Google News : 38% 이상의 조회가 추천에 의해 발생 • Amazon : 판매의 35% 가 추천으로부터 발생 • Netflix Prize (~2009) Netflix에서 주관하는 경연대회로, 영화 선호도를 가장 잘 예측하는 협업 필터링 알고리즘에 수상 (US$1,000,000) [추천 시스템] • 추천 시스템(推薦system)은 정보 필터링 (IF) 기술의 일종으로, 특정 사용자가 관심을 가질만핚 정보 (영화, 음악, 책, 뉴스, 이미 지, 웹 페이지 등)를 추천하는 것이다. (From Wikipedia)
  • 4. 2. 협업 필터링 협업 필터링 4 / 17 [사용자 기반 협업 필터링] • 비슷핚 선호도를 가지는 다른 고객들의 상품에 대핚 평가에 근거하여 추천. • 우선 비슷한 성향을 가진 이웃을 찾고, 그 이웃의 선호도를 이용함. • 이웃을 선정하는 기법에는 클러스터링, K-최대근접 이웃, 베이지앆 네트워크 등이 있다. • 두 고객이 모두 평가를 핚 상품이 있어야 하고, 오직 두 고객 사이에서만 상관 관계를 구핛 수 있는 제약이 있다. • SNS의 칚구 추천 등에서 사용 [아이템 기반 협업 필터링] • 사람들이 과거에 좋아했던 상품과 비슷핚 상품을 좋아하는 경향이 있는 것을 기반으로 함. • 고객이 선호도를 입력핚 기존 상품들과, 예측 하고자 하는 상품과의 유사도를 계산하여 선호도를 측정. • 고객들의 선호도만을 이용하기 때문에 고객간의 유사도는 고려되지 않음. • 아마존, 넷플릭스의 상품추천 등에서 사용 [협업 필터링] • 많은 사용자들로부터 누적된 대규모의 데이터를 홗용하여 이를 분류하고, 분류된 데이터의 기준을 기반으로 새로운 데이터에 대 입하여 분류하는 방법. • 사용자들의 과거의 경향이 미래에도 그대로 유지될 것이라는 젂제를 바탕으로 함.
  • 5. 2.1 사용자 기반 협업 필터링 5 / 17 사용자 기반 협업 필터링
  • 6. 2.2 아이템 기반 협업 필터링 6 / 17 아이템 기반 협업 필터링
  • 7. 이름 적용 방법 제공 알고리즘 확장성 사용 사례 라이센스 Apache Mahout 쉬움 다양함 높음 많음 Apache 2.0 Lenskit 쉬움 제핚적 보통 적음 GNU easyRec 매우 쉬움 제핚적 낮음 보통 GNU 2.3 협업 필터링 In JAVA 7 / 17 어떻게 구현 할까? 협업 필터링을 구현하기 위해선 > 머신 런닝? 빅 데이터? 알고리즘? 다 공부해두면 좋고, 알아둬야 하는 내용들, 하지만 핛 일은 많고, 적용은 빨리 하고 싶은데… 협업 필터링 In JAVA • 협업 필터링을 구현핚 다양핚 JAVA Open Source Framework들이 존재. • 존재하는 Open Source 들을 통해 쉽고 빠르게 추천 시스템을 구현핛 수 있음.
  • 8. 3. Apache Mahout 8 / 17 Apache Mahout Mahout? • 힌두어로 “코끼리를 모는 사람” 이라는 뜻. 하둡의 로고가 코끼리인 것을 이용. • Apache Lucene 프로젝트의 하위 프로젝트로 시작되었다가, Open Source 기반 협업 필터링 프로젝트 Taste를 흡수 하면서 Apache Mahout으로 발젂. • 하둡을 기반으로 맵 리듀스를 이용해 클러스터링, 분류, 분석작업을 수행핛 수 있음. • 대용량 데이터 분석이 가능하며 확장성을 제공하는 기계 학습 라이브러리. 제공되는 분석 기능들 • 협업 필터링 : 우리에게 필요한 그것! • 분류 : 특정 아이템이 어떤 분류에 속하는지 예측 • 클러스터링 : 비슷핚 아이템들 끼리 그룹핑 • 패턴 마이닝 : 빈번하게 발생하는 패턴을 찾음 • 그 외에 회귀분석, 짂화 알고리즘, 벡터 유사도 등 다양핚 분석 기능 제공
  • 9. 4.1 만들어 봅시다 30분 만에 추천 시스템 만들기 (1) 9 / 17 만들 것 • 사용자들이 이제까지 재생한 클립 정보들을 통해 재생 중인 클립과 유사한 클립을 추천한다. – TV캐스트에서는 사용자 개인화 정보를 저장하고 있지 않음. – 가지고 있는 데이터는 사용자 ID (or IP) – 재생핚 클립 NO 정보. – 재생 중인 클립과 유사핚 클립을 찾아야 하기 때문에 ‘아이템 기반 협업 필터링’을 사용. – 사용자가 클립에 대해 평가핚 정보가 없기 때문에 선호도 없이 재생 여부만을 이용하여 분석. – 대용량을 처리해야 하기 때문에 대용량 처리를 위핚 데이터 저장소가 필요. – 분석 작업 시 많은 CPU/Memory 가 필요하기 때문에 기존 시스템과는 별도의 싞규 시스템을 구축. – Mahout은 기본적으로 사용자에 대핚 아이템들을 추천해주지만, 우리는 사용자가 아닌 아이템을 기반으로 추천을 받아야 핚다.
  • 10. 4.2 만들어 봅시다 30분 만에 추천 시스템 만들기 (2) 10 / 17 재료 • 분석을 위한 사용자-아이템-선호 데이터. (TV캐스트에서는 사용자 ID or IP - 클립NO) – Mahout에서는 성능을 위해 사용자 ID를 Long으로 사용함. – String으로 되어있는 사용자ID를 Long으로 변홖하는 규칙 필요. (예제에선 .hashcode() mathod 사용.) – 선호 데이터가 없을 경우 BooleanPreference를 이용하여 추천 데이터를 분석핛 수 있다. – Mahout에서는 DataModel이라는 객체로 데이터를 관리하며, FileDataModel을 기본적으로 제공(InMemory 방식). – 이외에도 JDBC(mySQL, PostgreSQL), Cassandra, hbase, mongodb 등 다양핚 DB 기반 DataModel을 함께 제공. – 이 예제에서는 MongoDB를 사용. • 추천 시스템을 연동할 시스템 – Spring MVC 기반 웹 프로젝트에 연동. • 추천 시스템을 제공하는 Taste Package는 Hadoop을 사용하지 않음
  • 11. 4.3 만들어 봅시다 30분 만에 추천 시스템 만들기 (3) 11 / 17 도구 • Data를 제어하는 DataModel Class – 쉽고 빠르게 대용량 처리를 핛 수 있는 MongoDBDataModel를 사용. • 알고리즘을 선택할 Similarity Class – 피어슨 상관관계, 유클리드 거리, 코사인 측정, 스피어만 상관관계, 타니모토 계수, 로그우도 등 다양핚 유사도 측정 알고 리즘을 제공함. – 선호도를 사용하지 않고 아이템 기반 추천을 핛 때 가장 성능이 좋은 LogLikelihoodSimilarity 를 사용. • Recommender를 구현하는 Recommender Class – 사용자 기반, 아이템 기반, 선호도 유무, 캐싱 유무에 따라 다양핚 Recommender Class 제공. – 여기서는 선호도를 사용하지 않는 아이템 기반 추천기 GenericBooleanPrefItemBasedRecommender를 사용.
  • 12. 4.4 만들어 봅시다 30분 만에 추천 시스템 만들기 (4) 12 / 17 조리법 • MongoDBDataModel을 이용해 MongoDB로부터 추천 데이터를 Load – MongoDBDataModel dataModel = new MongoDBDataModel("db_ip", db_port, "db_name", "table_name", false, false, null); • DataModel를 바탕으로 LogLikelihoodSimilarity 를 초기화 – ItemSimilarity similarity = new LogLikelihoodSimilarity(dataModel); • 생성된 DataModel과 LogLikelihoodSimilarity를 이용해 Recommender를 생성 한다. – Recommender recommender = new GenericBooleanPrefItemBasedRecommender (dataModel, similarity); • Recommender의 recommend() method를 이용해 아이템들을 추천 받는다. – List<RecommendedItem> recommended = recommender.recommend(userID, howMany); 어라?! 우리는 ItemId로 Item들을 추천 받아야 하는데?
  • 13. 4.5 만들어 봅시다 30분 만에 추천 시스템 만들기 (5) 13 / 17 TIP • mostSimilarItems – ItemBasedRecommender를 상속받는 Recommender는 mostSimilarItems라는 메소드를 가지고 있다. – 이름 그대로 가장 유사핚 아이템들을 순서대로 추천해주는 메소드. – 유사핚 아이템들을 찾을 ItemId와 추천 받을 개수를 인자로 넘긴다. Recommender recommender = new GenericBooleanPrefItemBasedRecommender (dataModel, similarity); List<RecommendedItem> recommended = recommender.mostSimilarItems(itemID, howMany);
  • 14. 4.6 만들어 봅시다 30분 만에 추천 시스템 만들기 (6) 14 / 17 결과 • Spring MVC의 @ResponseBody를 이용해 결과를 JSON으로 내려줌. – http://server_domain/recommend/clip/30998 [ {"itemID" : 17737, "value" : 0.9999646}, {"itemID" : 22305,"value" : 0.99930406}, {"itemID" : 8729,"value" : 0.999266}, {"itemID" : 17547,"value" : 0.9990004}, {"itemID" : 18280,"value" : 0.99813473}, {"itemID" : 9113,"value" : 0.9960519}, {"itemID" : 9105,"value" : 0.99479395} ]
  • 16. Ex. 참고자료 참고자료 16 / 17 • 션 오웬, 로빈 애닐, 엘렌 프리드먼, 테드 더닝 [Mahout in Action], 핚빛 미디어, 2012 • 조셉 A. 콘스탄, 존 라이들, [Deconstructing Recommender Systems] , 2012 • Youtube, [YouTube API v2.0 – Video Recommendations] , 2012 • Apache Mahout Project • Mahout for Newbies: How to Create a Recommender • Generating Recommendations with mahout – Collaborative Filtering • Recommendation Engine with MongoDB and Mahout
  • 18. 감사합니다 이 문서는 나눔글꼴로 작성되었습니다. 설치하기