Advertisement

プロジェクトTakumi 〜レコメンデーション設定への挑戦者たち〜

May. 19, 2018
Advertisement

More Related Content

Similar to プロジェクトTakumi 〜レコメンデーション設定への挑戦者たち〜(20)

Advertisement

Recently uploaded(20)

プロジェクトTakumi 〜レコメンデーション設定への挑戦者たち〜

  1. プロジェクトTakumi ∼レコメンデーション設定への挑戦者たち∼ Silver Egg Technology 株式会社 本田裕昭
  2. 自己紹介 本田 裕昭 (ほんだ ひろあき) • シルバエッグ・テクノロジー所属エンジニア • レコメンドエンジンの顧客サイトへの導入・チューニング・運用を主に担当 • Pycon mini Osaka カメラ係
  3. SILVER EGG TECHNOLOGY AI技術を用いたパーソナライゼーションを実現する企業 レコメンデーションエンジンを中心とした製品群を提供 https://www.silveregg.co.jp/
  4. アイジェント・レコメンダーについて SaaS型レコメンドエンジンで国内売上高1位 https://www.silveregg.co.jp/archives/news/1216
  5. アイジェント・レコメンダーについて リアルタイム ● サイトにおけるユーザ行動をリアルタイムに分析、アイテム同士の関連性を計算 (ベイジアン協調フィルタリング) ● 今日追加された商品でも相関に基づいておすすめできる パスディペンデンシー ● 行動履歴に基づいて嗜好に合わせたアイテムをレコメンド レコメンドレシピ ● ページ(レコメンド枠)毎に設定されたレシピに基づいて最適なレコメンドを 提供
  6. レコメンドレシピのイメージ TOP ページ 検索結果 ページ 商品詳細 ページ カート ページ 決済完了 ページ 各ページの特性に合わせてレコメンドをデザイン 「その商品を見た人が 興味を持ちそうな商品」や 「より高価格帯の商品」 をおすすめ 「検索結果に対して 関連性が高い商品」 をおすすめ 「購入された商品の後で 買われる頻度が高い商品」 をおすすめ 「カート内の商品と一緒に 買われる頻度が高い商品」 をおすすめ
  7. レコメンドレシピ設定 - 設定項目1 レコメンドタイプ 相関 - アイテム同士の関連性 ○ BB(閲覧閲覧相関): このアイテムを見た人は、こんなアイテムも見ています ○ OO(同時購買相関): このアイテムを買った人は、こんなアイテムも一緒に買っています ○ BO(閲覧購買相関): このアイテムを見た人は、こんなアイテムを買っています ○ PO(過去購買相関): このアイテムを買った人は、過去にこんなアイテムを買っています ○ CB(カテゴリ閲覧相関): このカテゴリを見た人は、こんなアイテムを見ています ○ KB(キーワード閲覧相関): このキーワードで検索した人は、こんなアイテムを見ています ランキング ○ 閲覧ランキング ○ 購入ランキング Footprint(あしあと)
  8. レコメンドレシピ設定 - 設定項目2 レコメンドのキー 閲覧中アイテム カートに入れられたアイテム 行動履歴 ○ 閲覧履歴 ○ 購入履歴 ○ カート履歴 フィルタリング カテゴリフィルタ 価格フィルタ 行動によるフィルタ ○ 閲覧中 ○ 閲覧済み ○ 購入済み
  9. レコメンドレシピ設定 - 設定項目3 ロジック ● Pythonコードによりエンジンに指示を 出すためのもの ディスプレイ ● 商品情報表示のためのJavaScriptコード その他 ● マーチャント(顧客)コード ● クラスタ トラッキング ● 閲覧 ● カート投入 Backfill ※相関で要求数を満たせない場合の 補填方法
  10. レコメンドレシピ設定 ● 実体はCouch DB上のドキュメント(JSON) ● 1顧客サイトにつき1ドキュメント ● 1つのレコメンド枠に対して1SPEC ● SPEC: レコメンド設定一式をまとめたもの ● 1サイトにつき10∼100個以上のSPECを設定 ● 手で修正できる規模ではないのでPythonスクリプトにより生成(従来方式)
  11. アイジェント・レコメンダー構成 Load Balancer AP Server AP Server CouchDB レコメンドレシピ設定 デプロイ レコメンド要求 エンドユーザ または顧客サイトサーバ シルバーエッグ エンジニア Couch DBから レシピ設定をロードし、 枠に応じたレコメンドを返す
  12. 従来のワークフロー(導入時) 1. 仕様書作成(コンサル) 2. 仕様書レビュー(コンサル+エンジニア) 3. コンフィグ作成(エンジニア主担当) ○ レコメンドレシピ設定のためのPythonスクリプト 4. コンフィグレビュー(エンジニアサブ担当) 5. ステージング反映 6. 顧客側テスト 7. 本番反映 8. 顧客側リリース(利用開始) ※コンサル:営業とエンジニアの中間的な立ち位置で、顧客と直接やりとりして仕様を決める役割の人
  13. 従来方式の問題 1つ1つ手作りのPythonコード ● エンジニアでないといじれない ● 人手中心 ○ ミスを防ぐためのレビュー、ダブルチェックでさらに手間が ○ 導入、チューニングのリードタイムがどうしてもかかる ● マニアックな設定になると1人の人しか理解できない ○ ○○(とある顧客)のコンフィグは○○さんしか触れない
  14. あれ??全然AI企業っぽくない・・・
  15. ビジネス要求 ● 運用開始までの期間をもっと短くしたい ○ トラッキングを早期に開始する方が有利 ● 導入後のPDCAサイクルをもっと早く回したい ○ もっと頻繁にA/Bテストを ○ 顧客サイトの成長に合わせて最適なレコメンドを提供したい → 従来のやり方ではすぐ限界になる
  16. Takumi(匠) レコメンドレシピ生成・管理システム ● 1つ1つスクリプトを書くのではなく、Web画面上で設定できるように ● エンジニアでなくとも設定できるようにする
  17. レシピ入力 システムイメージ Takumi Web Git リポジトリ コンサル エンジニア Couch DB AP Server レコメンダー ステージング環境 Couch DB AP Server レコメンダー 本番環境 レシピをチェックアウト 必要に応じて修正&保存 デプロイ Takumi CLI デプロイ 保存 デプロイ
  18. 詳細画面で指定する項目 • レコメンドタイプ • 要求数(いつく返すか) • カテゴリフィルタ • 価格フィルタ(○○円∼○○円) • レコメンドのキー • 何をキーにするか • 個数 • Backfill(相関で要求数を満たせない場合の補 填) • ランキング(閲覧 or 購入) • 組み込みコードの指定 など
  19. Takumiの技術要素 ● Webアプリ ○ Pyramid + Chameleon + colander + deform + bootstrap ● YAML ○ 機械でハンドリングできる,かつ人間も読み書き可能 ● libgit2, pygit2 ● Jinja2
  20. Web Framework ● Pyramid ○ 採用に特に深い理由なし、強いて言えば社内的に実績があったから ● colander ○ schema定義+validation ● deform ○ colanderでschemaを書くとフォームを自動生成してくれる ● chameleon ○ xml型template engine ○ deformが標準で用意しているwidgetがchameleonなので
  21. libgit2, pygit2 ● libgit2 ○ gitリポジトリを操作するためのAPI(Cによる実装) ○ Bindingsが豊富 ■ https://github.com/libgit2/libgit2#language-bindings ○ Thread Safe & Reentlancy ● pygit2 ○ libgit2のPython binding ○ http://www.pygit2.org/ 変更があれば社内リポジトリにpush 社内リポジトリから1分おきにfetch いちいち作業ファイルを作らずにリポジトリのデータを読み書きできる
  22. pygit2の例1 リポジトリからのファイル取り出し
  23. pygit2の例2 ファイルのコミット
  24. pygit2の例2 ファイルのコミット(実行結果)
  25. 組み込みコード 問題 • プログラムコード(Python, JavaScript)をYAML内に書くのはつらい 解決策 • Jinja2テンプレートで記述してリポジトリに置く • YAMLから名前で参照
  26. 組み込みコードの例 {% custom_logic 'mylogic', '閲覧中・閲覧履歴から計n件除外', ('n',) %} .... xplen = {= n =} spec[Spec.EXCL_PRODS] = prods + browses_list[:xplen] {% end_custom_logic %} mylogic.py.jinja2 merchant: silveregg spec01: ... custom_logic: {name: mylogic, params:{n: 10}} ... config.yml 名前 説明 引数の定義 引数の値に置換される部分
  27. 組み込みコードの指定例 候補から使用したいコードを選択 コードに渡すパラメータを指定
  28. 導入後の変化 ● 非エンジニアでもレシピの作成ができるようになった! ● エンジニアが1からスクリプトを書く必要はなくなった → 工数の縮小 ● Pythonの書き間違いによるミスが激減(なくなったわけではない) ● リードタイムの縮小 ○ 簡単な変更であれば依頼から最短1時間程度で本番反映
  29. Before • 仕様書作成 • 仕様書レビュー • 生成スクリプトの作成 • コードレビュー • ステージング反映 • 顧客側テスト • 本番反映 導入後の変化 - 導入時ワークフロー After • 仕様書作成 • 仕様書レビュー • Takumi入力 • ステージング反映(画面から) • 顧客側テスト • 本番反映 Near Future • Takumi入力 • ステージング反映(画面から) • 顧客側テスト • 本番反映 仕様書も廃止していく予定
  30. 難しかった点、問題 ● レシピの設定項目が膨大→カバーするのが大変 ○ 未だに100%は網羅できていない ○ 使用率の高い項目から対応 ● Takumiで導入した後、未対応の機能を使うことに・・・ ○ そのサイトだけのパッチを当てて当座をしのぐ ○ 旧方式に戻す ● 入力ミスが結構多い ○ 入力後のチェックに稼働を取られる ■ チェック機能の強化(予定) ■ 設定内容を一覧化 → 自分で確認しやすく
  31. まとめ • アイジェントレコメンダーの運用ではレコメンドレシピの設定が必須 • 従来:1つ1つPythonスクリプトで生成 • 今後:Takumi • レシピ作成・管理の省力化 • 非エンジニアでもレシピの作成・修正ができるようになった • 旧方式から順次移行中
  32. まとめ AIというとスマートなイメージだけど 蓋を開けてみると実際の現場は泥臭い作業の連続だったり・・・ ● AIに食わせるデータのメンテナンス ● AIのパラメータチューニング ● AIのインシデント管理 ● AIの・・・ こういった作業こそ自動化していくべき
  33. 共感していただける方はぜひ、仲間になりましょう! シルバーエッグテクノロジー エンジニア募集中! https://www.silveregg.co.jp/recruit/recruit01.html
  34. ご清聴ありがとうございました。
Advertisement