Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レコメンド / 検索の 大規模展開に関する課題と解決策

Ce76f240e0238b21234b3cae2ef763ae?s=47 ryfuzy
May 23, 2019

レコメンド / 検索の 大規模展開に関する課題と解決策

2019/05/23に行われた「DMM x ZOZOを支える基盤技術」で発表した資料です。
https://dmm.connpass.com/event/129128/presentation/

DMMでのデータ活用によるプロダクト改善事例として、レコメンドと検索における課題とその解決策についての発表になります。

Ce76f240e0238b21234b3cae2ef763ae?s=128

ryfuzy

May 23, 2019
Tweet

Transcript

  1. DMM.com 藤井 亮太 2019/05/23 DMM x ZOZOを支える基盤技術 レコメンド / 検索の

    大規模展開に関する課題と解決策
  2. © DMM.com 合同会社 DMM.com プラットフォーム事業本部 カスタマーエンゲージメント部 レコメンド 兼 検索 チーム

    プロダクトオーナー 経歴 * 2016年にDMMに入社後、ビッグデータ部にてセグメンテー ションエンジン開発やワークフローエンジン、 BIツール導入など を行う * 2018年より、レコメンド/検索のPOを行う 2 (twitter: @r_megane) 藤井亮太
  3. © DMM.com • レコメンド/検索の利用状況 • レコメンド:ABテストの効率化 • 検索:ログを活用した大規模リファク タリング •

    まとめ Agenda
  4. © DMM.com レコメンド/検索の利用状況 4

  5. © DMM.com 5 手のひらと世界にいろどりを。 人類の想像をはるかにこえるスピードと スケールで、私たちの生活は変化してい ます。 DMM.comは1999年から時代のニーズに 合わせた多彩なコンテンツを、独自プラッ トフォームで安定的に提供しています。

    About DMM.com 40以上の幅広いサービスを展開 サービスについて
  6. © DMM.com 6 About DMM.com 40以上の幅広いサービスを展開 レコメンド レコメンド設置箇所 全10サービス 167種

    400箇所以上
  7. © DMM.com 7 About DMM.com 40以上の幅広いサービスを展開 検索 検索利用箇所 全14サービス 検索+各種リスト

  8. © DMM.com データ活用による改善 レコメンド: ABテストの効率化 検索: 大規模リファクタリング 本日お話したい事 8

  9. © DMM.com レコメンド: ABテストの効率化 9

  10. © DMM.com レコメンドの導入拡大は着実に進んでいるが、それ ぞれのレコメンドのKPIは伸び悩んでいる 課題 -レコメンド:ABテストの効率化- 10

  11. © DMM.com 施策をABテストで効率的に実施し、 改善の方向性を探りたい 方針 -レコメンド:ABテストの効率化- 11

  12. © DMM.com * オフライン評価で品質担保 * alias機能を用いたABテストの展開 * 効率的なABテスト比較 実施したこと -レコメンド:ABテストの効率化-

    12
  13. © DMM.com (単純化した) DMMのレコメンドの仕組み 13

  14. © DMM.com レコメンドの仕組み -レコメンド:ABテストの効率化- レコメンドAPI 14 レコメンドA tracking_id 対象itemと呼び出し レコメンド種類を指定し

    てAPIをcall item_id1
  15. © DMM.com レコメンドの仕組み -レコメンド:ABテストの効率化- レコメンドAPI 15 レコメンドA tracking_id レコメンドitem郡と 効果測定のための

    tracking_idを返却 item_id1
  16. © DMM.com 詳しく知りたい方は、こちらも参照ください Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化 https://www.slideshare.net/knagato/sparkrecommendtuning DMM.comにおけるレコメンドへの Deep Learningの活用 https://speakerdeck.com/dmmlabo/dmm-dot-comniokerurekomendohefalsedeep-learningfalsehuo-yong P3インスタンスではじめる

    Deep Learningと画像レコメンド https://speakerdeck.com/dmmlabo/p3insutansudehazimerudeep-learningtohua-xiang-rekomendo-1 レコメンドの仕組み -レコメンド:ABテストの効率化- 16
  17. © DMM.com オフライン検証 17

  18. © DMM.com ユーザの商品に対するレーティング(評価値)や購買など、利 用履歴を用いた評価(※1) ↓ リリース前に可能な評価手法 オフライン検証とは -レコメンド:ABテストの効率化- ※1 (引用)

    レコメンドつれづれ ~第 3回 レコメンド精度の評価方法を学ぶ~ 18
  19. © DMM.com オフライン評価 -レコメンド:ABテストの効率化- 19 Recall / Precision 顔ぶれ一致率 coverage

  20. © DMM.com オフライン評価 -レコメンド:ABテストの効率化- 20 Recall / Precision ユーザーの過去の行動を正解と仮定した場合の 再現率/適合率

  21. 2 1  Copyright © since 1998 DMM All Rights

    Reserved. Recall/Precision 再現率 適合率 Group.1 レコメンド候補 Group.2 過去のユーザー の行動履歴 (閲覧/購入) かつ かつ
  22. © DMM.com オフライン評価 -レコメンド:ABテストの効率化- 22 顔ぶれ一致率 既存レコメンドに対する、 新レコメンドの候補アイテムの一致率

  23. © DMM.com オフライン評価 -レコメンド:ABテストの効率化- 23 coverage 全アイテムに対する、 新レコメンドの候補アイテムの網羅率

  24. © DMM.com オフライン評価により、 一定の品質をリリース前に担保 オフライン評価 -レコメンド:ABテストの効率化- 24

  25. © DMM.com alias機能とABテスト 25

  26. © DMM.com 同一inputに対し 同一のitem群を 異なるtracking_idで返却する仕組み alias -レコメンド:ABテストの効率化- 26

  27. © DMM.com alias -レコメンド:ABテストの効率化- API 27 購入完了 レコメンドA tracking_id2 商品詳細

    レコメンドA tracking_id1 item_id1 item_id1
  28. © DMM.com alias -レコメンド:ABテストの効率化- API 28 購入完了 レコメンドA tracking_id2 商品詳細

    レコメンドA tracking_id1 item_id1 item_id1 同一input
  29. © DMM.com alias -レコメンド:ABテストの効率化- API 29 購入完了 レコメンドA tracking_id2 商品詳細

    レコメンドA tracking_id1 item_id1 item_id1 同一の item群
  30. © DMM.com 異なる tracking_id alias -レコメンド:ABテストの効率化- API 30 購入完了 レコメンドA

    tracking_id2 商品詳細 レコメンドA tracking_id1 item_id1 item_id1
  31. © DMM.com 同一のレコメンドを複数箇所で利用する際に、 それぞれ個別で効果測定を行うための仕組み alias -レコメンド:ABテストの効率化- 31

  32. © DMM.com 同一inputでの呼び出しに対し、 異なるロジックで生成したitem群を 異なるtracking_idで返却する仕組み ABテスト -レコメンド:ABテストの効率化- 32

  33. © DMM.com ABテスト -レコメンド:ABテストの効率化- API 33 商品詳細 レコメンドA tracking_idA logicA:80%

    logicB:10% logicC:10% 商品詳細 レコメンドB tracking_idB 商品詳細 レコメンドC tracking_idC 80% 10% 10% item_id1 item_id1 item_id1
  34. © DMM.com ABテスト -レコメンド:ABテストの効率化- API 34 商品詳細 レコメンドA tracking_idA logicA:80%

    logicB:10% logicC:10% 商品詳細 レコメンドB tracking_idB 商品詳細 レコメンドC tracking_idC 80% 10% 10% item_id1 item_id1 item_id1 同一item 同一レコメンド 種別 同一item 同一レコメンド 種別 同一input
  35. © DMM.com ABテスト -レコメンド:ABテストの効率化- API 35 商品詳細 レコメンドA tracking_idA logicA:80%

    logicB:10% logicC:10% 商品詳細 レコメンドB tracking_idB 商品詳細 レコメンドC tracking_idC 80% 10% 10% item_id1 item_id1 item_id1 同一item 同一レコメンド 種別 同一item 同一レコメンド 種別 異なるロジック で生成した item群
  36. © DMM.com ABテスト -レコメンド:ABテストの効率化- API 36 商品詳細 レコメンドA tracking_idA logicA:80%

    logicB:10% logicC:10% 商品詳細 レコメンドB tracking_idB 商品詳細 レコメンドC tracking_idC 80% 10% 10% item_id1 item_id1 item_id1 同一item 同一レコメンド 種別 同一item 同一レコメンド 種別 異なる tracking_id
  37. © DMM.com 異なるロジックで生成したレコメンドを、 設定した割合で出し分け、 それぞれの効果を測定する仕組み ABテスト -レコメンド:ABテストの効率化- 37

  38. © DMM.com 組み合わせるとどうなるか? alias機能とABテスト -レコメンド:ABテストの効率化- 38

  39. © DMM.com ABテスト -レコメンド:ABテストの効率化- API 39 商品詳細 レコメンドA tracking_id1A logicA:80%

    logicB:10% logicC:10% 80% 10% 10% 商品詳細 レコメンドB tracking_id1B 商品詳細 レコメンドC tracking_id1C 購入完了 レコメンドA tracking_id2A 購入完了 レコメンドB tracking_id2B 購入完了 レコメンドC tracking_id2C 10% 10% 80%
  40. © DMM.com それぞれのロジックのレコメンドを 異なるコンテキストで実施したときの効果を 同時に検証する仕組み alias機能とABテスト -レコメンド:ABテストの効率化- 40

  41. © DMM.com 効率的なABテスト比較 41

  42. © DMM.com aliasとABテストにより、 短期間でレコメンドのログを 取得可能になった 効率的なABテスト比較 -レコメンド:ABテストの効率化- 42

  43. © DMM.com ABテスト数×aliasの効果検証が必要 手作業で集計、分析を行うのは非効率 効率的なABテスト比較 -レコメンド:ABテストの効率化- 43

  44. © DMM.com 関連するレコメンド(ABテスト, alias)を 一括で比較可能なダッシュボードを作成し 分析を効率化 効率的なABテスト比較 -レコメンド:ABテストの効率化- 44

  45. © DMM.com 効率的なABテスト比較 -レコメンド:ABテストの効率化- 45

  46. © DMM.com 成果 -レコメンド:ABテストの効率化- 短期間で複数レコメンド施策を同時に実施可能 (1本/月 → 5本/2週間) 効果の薄い施策の早期発見 /

    停止 (リリースから1週間でABテスト停止判断) 46
  47. © DMM.com 検索: ログを活用した 大規模リファクタリング 47

  48. © DMM.com 検索システムについて -検索:ログを活用した大規模リファクタリング - 48 Solr SearchAPI 検索ライブラリ 動画

    電子書籍 通販 新規サービス
  49. © DMM.com 主要コンポーネントSolrのバージョン 4.10 (現在の最新バージョン 8.1) バージョンを上げて、新機能利用、性能改善を行い たい 課題 -検索:ログを活用した大規模リファクタリング

    - 49
  50. © DMM.com Solrが複数箇所から参照されており、 無停止のバージョンアップや置き換えが困難 課題 -検索:ログを活用した大規模リファクタリング - 50

  51. © DMM.com 参照元を集約し、Solrの切り替えなど コントロールを容易に行えるようにしたい 課題 -検索:ログを活用した大規模リファクタリング - 51

  52. © DMM.com 方針1(NG) -検索:ログを活用した大規模リファクタリング - 52 Solr SearchAPI 検索ライブラリ 動画

    電子書籍 通販 新規サービス × ×
  53. © DMM.com 検索ライブラリは、多くのサービスから利用されてい るため、参照先を切り替えるのは困難 方針1(NG) -検索:ログを活用した大規模リファクタリング - 53

  54. © DMM.com 方針2(採用) -検索:ログを活用した大規模リファクタリング - 54 Solr SearchAPI 検索ライブラリ 動画

    電子書籍 通販 新規サービス ×
  55. © DMM.com 検索ライブラリから SearchAPIを参照する形に組み換え Solrの参照元を集約する 方針2(採用) -検索:ログを活用した大規模リファクタリング - 55

  56. © DMM.com 1ファイル:4000〜6000行 × 24ファイル メンバ変数:30〜40個 / メソッド数:100個 という巨大クラスも含む。。。 検索ライブラリの構成

    -検索:ログを活用した大規模リファクタリング - 56
  57. © DMM.com ログベーステストを利用して、 検索ライブラリのリファクタリングを実施 検索ライブラリの課題 -検索:ログを活用した大規模リファクタリング - 57

  58. © DMM.com ログベーステストの流れ -検索:ログを活用した大規模リファクタリング - 58 hadoop 検索システム テストケース 検索ライブラリ

    エンジニア 検索ライブラ リ
  59. © DMM.com ログベーステストの流れ -検索:ログを活用した大規模リファクタリング - 59 hadoop 検索システム テストケース 検索ライブラリ

    エンジニア 検索ライブラ リ メソッド/引数/変数 のロギング
  60. © DMM.com ログベーステストの流れ -検索:ログを活用した大規模リファクタリング - 60 hadoop 検索システム テストケース 検索ライブラリ

    エンジニア 検索ライブラ リ hadoopに蓄積
  61. © DMM.com ログベーステストの流れ -検索:ログを活用した大規模リファクタリング - 61 hadoop 検索システム テストケース 検索ライブラリ

    エンジニア 検索ライブラ リ ログをテストケース に変換する
  62. © DMM.com ログベーステストの流れ -検索:ログを活用した大規模リファクタリング - 62 hadoop 検索システム テストケース 検索ライブラリ

    エンジニア 検索ライブラ リ 安全にリファクタリ ングを実施
  63. © DMM.com 自動生成した大量のケースにより網羅性の高いテス トを実施できる ユーザ利用の多いコードが沢山テストされる 仕様がわからないコードをテストできる ログベーステストのメリット -検索:ログを活用した大規模リファクタリング - 63

  64. © DMM.com 2名の担当者で割り込み作業を行いつつ、 4ヶ月で完了させることができた リリース後に大きなトラブルなし 成果 -検索:ログを活用した大規模リファクタリング - 64

  65. © DMM.com まとめ 65

  66. © DMM.com まとめ(レコメンド) 66 ユーザーのログデータを効率良く収集できる仕組み を構築し、ABテストのプロセス全体を効率化

  67. © DMM.com まとめ(検索) 67 ユーザー操作をトリガーにしたシステムログを活用 し、大規模なリファクタリングを効率的に実施

  68. © DMM.com DMMは、大規模プロダクトの価値向上やリプレース など、様々な課題にチャレンジできる環境です。 興味ある方は、ぜひお話しましょう。 まとめ 68