Slide 1

Slide 1 text

DMM.com 藤井 亮太 2019/05/23 DMM x ZOZOを支える基盤技術 レコメンド / 検索の 大規模展開に関する課題と解決策

Slide 2

Slide 2 text

© DMM.com 合同会社 DMM.com プラットフォーム事業本部 カスタマーエンゲージメント部 レコメンド 兼 検索 チーム プロダクトオーナー 経歴 * 2016年にDMMに入社後、ビッグデータ部にてセグメンテー ションエンジン開発やワークフローエンジン、 BIツール導入など を行う * 2018年より、レコメンド/検索のPOを行う 2 (twitter: @r_megane) 藤井亮太

Slide 3

Slide 3 text

© DMM.com ● レコメンド/検索の利用状況 ● レコメンド:ABテストの効率化 ● 検索:ログを活用した大規模リファク タリング ● まとめ Agenda

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

© 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

Slide 17

Slide 17 text

© DMM.com オフライン検証 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

© DMM.com オフライン評価 -レコメンド:ABテストの効率化- 19 Recall / Precision 顔ぶれ一致率 coverage

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

2 1  Copyright © since 1998 DMM All Rights Reserved. Recall/Precision 再現率 適合率 Group.1 レコメンド候補 Group.2 過去のユーザー の行動履歴 (閲覧/購入) かつ かつ

Slide 22

Slide 22 text

© DMM.com オフライン評価 -レコメンド:ABテストの効率化- 22 顔ぶれ一致率 既存レコメンドに対する、 新レコメンドの候補アイテムの一致率

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

© 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

Slide 34

Slide 34 text

© 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

Slide 35

Slide 35 text

© 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群

Slide 36

Slide 36 text

© 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

Slide 37

Slide 37 text

© DMM.com 異なるロジックで生成したレコメンドを、 設定した割合で出し分け、 それぞれの効果を測定する仕組み ABテスト -レコメンド:ABテストの効率化- 37

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

© 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%

Slide 40

Slide 40 text

© DMM.com それぞれのロジックのレコメンドを 異なるコンテキストで実施したときの効果を 同時に検証する仕組み alias機能とABテスト -レコメンド:ABテストの効率化- 40

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

© DMM.com 検索: ログを活用した 大規模リファクタリング 47

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

© DMM.com 方針1(NG) -検索:ログを活用した大規模リファクタリング - 52 Solr SearchAPI 検索ライブラリ 動画 電子書籍 通販 新規サービス × ×

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

© DMM.com 方針2(採用) -検索:ログを活用した大規模リファクタリング - 54 Solr SearchAPI 検索ライブラリ 動画 電子書籍 通販 新規サービス ×

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

© DMM.com まとめ 65

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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