Deview RecoPick팀 AWS에서 추쳔 구현하기

9,936 views

Published on

AWS에서 추천을 구현한 노하우와, 각종 구현 팁들, 추천 적용 팁들을 공유 합니다. 발표에 대한 후기는 아래 블로그를 참조 하시기 바랍니다. http://blog.recopick.com/19

Published in: Technology
1 Comment
80 Likes
Statistics
Notes
  • 잘봤습니다! 도움이 많이 되네요.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
9,936
On SlideShare
0
From Embeds
0
Number of Embeds
5,494
Actions
Shares
0
Downloads
1
Comments
1
Likes
80
Embeds 0
No embeds

No notes for slide

Deview RecoPick팀 AWS에서 추쳔 구현하기

  1. 1. AWS에서 추천 구현하기 http://recopick.com SK planet 이채현
  2. 2. 빅데이터 선행기술
  3. 3. 빅데이터 선행기술
  4. 4. 빅데이터 선행기술
  5. 5. x2.98
  6. 6. 이채현 Haptics
  7. 7. 추천 AWS Tips
  8. 8. Amazon 추천
  9. 9. Best Practice - Amazon 추천 함께 구매한 상품 이 상품을 본 다음 구매한 상품
  10. 10. Netflix 추천 당신의 취향에 맞게 추천
  11. 11. 효과는? • 아마존 매출의 30%는 추천을 통해 발생 by The Economist “Building with big data” http://www.economist.com/node/18741392/ • 약 75%의 사용자들이 추천 서비스를 통해 영화를 선택 by Nextflix “Netflix Recommendations” http://techblog.netflix.com/2012/04/netflixrecommendations-beyond-5-stars.html
  12. 12. 배워 봅시다
  13. 13. 큰 그림 데이터수집 데이터변환 추천계산 추천결과제공
  14. 14. 데이터수집 데이터변환 추천계산 로그 포맷? 서버 연동? 추가 개발? 추천결과제공 방화벽 오픈?
  15. 15. 데이터수집 데이터변환 • 스크립트 기반 수집 추천계산 추천결과제공
  16. 16. 데이터수집 데이터변환 모바일 단말 페이지 로딩 완료 추천결과제공 추천계산 이동통신망 웹서버 로그 전송 무선 구간 인터넷
  17. 17. 데이터수집 데이터변환 모바일 단말 페이지 로딩 완료 추천결과제공 추천계산 이동통신망 웹서버 로그 전송 무선 구간 cookie 기반 UID 생성 item id 추출 action id (view, order, basket) 인터넷
  18. 18. 데이터수집 데이터변환 추천계산 모바일 단말 페이지 로딩 완료 추천결과제공 이동통신망 웹서버 로그 전송 무선 구간 인터넷
  19. 19. 스크립트 기반 수집 • 장점 – 간편하다 – 서버 부하 감소 • 단점 – 일부 데이터 손실 가능
  20. 20. 데이터수집 데이터변환 추천계산 browser browser browser ELB 추천결과제공
  21. 21. 데이터수집 ELB 데이터변환 Auto Scaling 추천계산 추천결과제공 • Collector는 NodeJS로 구현 • NodeJS가 익숙하기 때문 • redis로 불의의 사 고를 대비하자 • Auto Scaling으로 비 용 절감
  22. 22. 데이터수집 + 7 6 5 4 3 2 1 데이터변환 + 추천결과제공 추천계산 + = m1.small 6대로 충분
  23. 23. 데이터수집 데이터변환 추천계산 추천결과제공 • 데이터의 임시 저장소 • Amazon RDS 사용 • 설정, 튜닝, 이중화 를 몰라도 된다 • Multi-AZ Deployments 사용 • 실시간 통계에 유용
  24. 24. 데이터수집 데이터변환 추천계산 Sqoop 추천결과제공
  25. 25. 데이터수집 데이터변환 추천계산 추천결과제공 1380956434257(uid) 3482724(item_id) 1(action) 2013-10-05 07:00:34 (time) http://m.11st.co.kr/MW/MyPage /todayProductList.tmall (referrer)
  26. 26. 데이터 수집완료
  27. 27. 추천의 종류 • user to item 추천 • item to item 추천
  28. 28. user to item 추천 • Collaborative filtering
  29. 29. user to item 추천 • Too many!  Minhash based filtering
  30. 30. user to item 추천 • Matrix factorization 1 5 1 4 4 = 5 2 5 x
  31. 31. item to item 추천 • Jaccard Coefficient 상품 A 상품 B 상품 관련성
  32. 32. 데이터수집 데이터변환 추천계산 가장 쉬운 방법 • http://mahout.apache.org 추천결과제공
  33. 33. Item to Item recommendation with Mahout • • • • wget http://apache.mirror.cdnetworks.com/mahout/0.8/mahout-distribution-0.8.tar.gz tar –xvzf mahout-distribution-0.8.tar.gz export MAHOUT_HOME=mahout-distribution-0.8 mahout itemsimilarity -s SIMILARITY_TANIMOTO_COEFFICIENT --maxSimilaritiesPerItem 10 --maxPrefsPerUser 10000 --minPrefsPerUser 3 --booleanData true -i parsed_input -o result --tempDir /tmp
  34. 34. mahout
  35. 35. Item to Item recommendation with Mahout mahout
  36. 36. 이걸로 끝?
  37. 37. 한계
  38. 38. 추가적인 feature
  39. 39. 데이터수집 데이터변환 추천계산 추천결과제공 전환 페이지에 따라 사용자A 사용자A 사용자B 사용자B 사용자C 사용자C 이 페이지의 가중치를 낮춥니다. 이 페이지의 가중치를 높입니다.
  40. 40. 데이터수집 데이터변환 추천결과제공 추천계산 행동 가중치 가중치 봤어요 장바구니에 담았어요 샀어요 action
  41. 41. 데이터수집 데이터변환 추천계산 추천결과제공 시간 가중치 2013/4/1 2013/4/10 2013/4/20 2013/4/30 가중치가 높아요 가중치가 낮아요
  42. 42. 이렇게 바뀝니다 메론 쌈채소 파파야메론 쌈채소 애플망고 채소 세트 상주참외 토마토 수달래사과 청견 쌈채소 양파
  43. 43. 추천 클릭률의 변화 5.7 % 4.2 % 기존 개선
  44. 44. 한계2
  45. 45. 실제 사례 ▼ 관련기사
  46. 46. Keyword Semantics Model (KSM) 0.6
  47. 47. 사용자 로그 + 아이템 유사도 0.6 0.5 0.2
  48. 48. 데이터수집 데이터변환 추천계산 추천결과제공 • 추천 결과는 Json으로 저장 – 결과에 대한 Hash 생성 (RecoHash) 1 [{"id":“10", "score":0.29,"method":"4"}, {"id":“11,"score":0.15,"method":"4"},{"id":“13","score":0.14, "method":"4"},{"id":“17","score":0.14,"method":"4"}] – MD5(“10/11/13/17”) = 7ff3949e2d0e0d1a – 어차피 추천 리스트가 자주 변하지는 않는다. – DB에 불필요한 update를 줄이자. – 실제로 평균 10~20% 정도만 리스트가 변경됨
  49. 49. 데이터수집 데이터변환 추천계산 추천결과제공 Auto Scaling ELB
  50. 50. 추천 구현 끝
  51. 51. Tips • • • • AWS CDH HBase 모니터링
  52. 52. AWS • 사용한 인스턴스 c1.medium X2, 5ECU 1.7 GiB • mapred.tasktracker.map.tasks.maximum=4 • mapred.tasktracker.reduce.tasks.maximum=1
  53. 53. AWS Amazon S3 Amazon EMR VS Hadoop on EC2
  54. 54. AWS – 자체 클러스터를 운영하는 경우
  55. 55. AWS – 자체 클러스터를 운영하는 경우
  56. 56. AWS – 자체 클러스터를 운영하는 경우 10.1.2.10 54.25.1.12 무료 유료 10.1.2.11 54.23.233.16
  57. 57. CDH • Hadoop만 설치할 거라면 apache 버전도 할만함 • HBase, oozie 등을 함께 쓴다면? – CDH가 100만 배 정도 편함 – 덤으로 모니터링도 – 대수 제한도 없어졌음 • CDH manager 4.6에 버그 있음 – 장비 추가 안됨 (API 사용 or 4.7 버전 업)
  58. 58. HDFS로 Data를 저장하는 경우 • 디렉토리로 파일 관리하기 귀찮음 – map task 파편화(?)를 막기 위한 file merge – 오래된 파일 삭제 – 로그 포맷이 변경되면? – 1주일/1달/5달 데이터를 쓰고 싶어요  -_-;
  59. 59. HBase • HBase를 쓰면 – file merge 따위 ㅋ – TTL을 이용해서 자동 삭제 – 컬럼 추가 및 삭제가 쉬움. NoSQL ㅋ – 설정으로 time filtering을 한 번에
  60. 60. HBase – parsed_log table 구성 row key service_id item_id column family timestamp uid action_id price referrer category
  61. 61. parsed_log sid=1 7월 8월 9월 Region Server #1 Region Server #2 Region Server #3 7월 sid=2 Region Server #4 8월 Region Server #5 9월
  62. 62. Region Server #1 Region Server #2 Region Server #3 Region Server #4 Region Server #5 2013년 7월 2013년 7월 2013년 8월 2013년 8월 2013년 9월 MR
  63. 63. Scan s = new Scan() s.setFilter(new RowFilter(start, stop)); sid=1 7월 map map 8월 map map 9월 7월 sid=2 8월 9월 map map map map sid=1, 8월~9월
  64. 64. Scan s = new Scan() s.setFilter(new RowFilter(start, stop)); sid=1 Scan s = new Scan(start, stop); sid=1, 8월~9월 7월 8월 map map 9월 7월 sid=2 8월 9월 map
  65. 65. Scan s = new Scan(start, stop); Scan s = new Scan() s.setFilter(new RowFilter(start, stop)); sid=1 sid=1, 8월~9월 sid=2, 9월 7월 8월 map map 9월 7월 sid=2 8월 9월 map map map map
  66. 66. new Scan(start, stop)  multi-scan sid=1 sid=1, 8월~9월 sid=2, 9월 7월 8월 map map 9월 map 7월 sid=2 8월 9월 map https://github.com/ christianrichter/ hbase_multisegment
  67. 67. 추가사항 • setCacheBlocks(true)  setCacheBlocks(false)
  68. 68. 결과 31분 391개 4개 2분 Map Task 수행시간
  69. 69. 모니터링 및 알람 • 장비 모니터링 및 alarm 시스템이 없었음 • 처음부터 만들려면 어려움 – open source customizing도 귀찮다 • aws 에서 제공되는 tool 을 사용하자 – Cloudwatch – SES (Simple Email Service) – SNS (Simple Notification Service)
  70. 70. 모니터링 및 알람 (cloudwatch) • 아래 코드 한 줄이면…
  71. 71. 모니터링 및 알람 (cloudwatch)
  72. 72. 모니터링 및 알람 (ses) • 아래 코드 한 줄이면…
  73. 73. 모니터링 및 알람 (ses) 받은 편지함
  74. 74. 기획자 여러분!
  75. 75. 추천 노출 위치에 따른 클릭률 변화 추 천 5.3% 2.3% 4.8%
  76. 76. 추천 아이템 수에 따른 클릭률 변화
  77. 77. 추천 아이템 수에 따른 클릭률 변화 5.3% 1 page (5개) 6.0% 2 page (10개)
  78. 78. 추가 정보 제공에 따른 클릭률 변화
  79. 79. 추가 정보 제공에 따른 클릭률 변화 2.3% ?
  80. 80. 인당 평균 PV 전체 사용자 추천 클릭 사용자
  81. 81. 구매전환율 전체 사용자 추천 클릭 사용자
  82. 82. 평균 구매건수 전체 사용자 추천 클릭 사용자
  83. 83. 개발자가 바빠요..
  84. 84. 개발자가 바빠요..
  85. 85. http://recopick.com
  86. 86. 스크립트 삽입
  87. 87. Admin Dashboard
  88. 88. 로그 수집 현황을 확인할 수 있습니다.
  89. 89. 상품 검색을 통해
  90. 90. 어떤 상품이 추천 되는지 확인할 수 있습니다.
  91. 91. 추천을 적용하고 싶어요!
  92. 92. 두 줄만 복사 하세요 • Script 한 줄 • 태그 한 줄
  93. 93. 이렇게 적용됩니다!
  94. 94. 간단하게 디자인 변경
  95. 95. 추천을 적용한 뒤에는..
  96. 96. 추천 성능 확인
  97. 97. PV와 매출의 증가를 직접 경험 해 보세요.
  98. 98. 끝내기 전에..
  99. 99. 정량화된 목표가 필요하지 않을까요?
  100. 100. http://recopick.com +100 like
  101. 101. 감사 합니다.

×