Retty Tech Blog

実名口コミグルメサービスRettyのエンジニアによるTech Blogです。プロダクト開発にまつわるナレッジをアウトプットして、世の中がHappyになっていくようなコンテンツを発信します。

Rettyレコメンドプロジェクト

Rettyでデータサイエンティスト兼うなぎ担当をしている岩永二郎です。
さて、今回はうなぎの話、、、ではなく、レコメンドプロジェクトのお話です。
2018年11月、オペレーションズ・リサーチ学会研究部会 最適化とその応用 (OPTA)にて講演してきた際のスライドを本ブログにて公開します。 以下にスライドを掲載し、本記事にていくつか解説をします。

発表スライド

www.slideshare.netRetty recommendation project


解説

以下にスライドのサマリを抜粋しました。

【お店レコメンドの取り組み】

2017年10月〜2018年9月の期間で開発したレコメンドモジュールのプロジェクト紹介をしました。 データサイエンス系プロジェクトはスキルだけあってもうまくいかない、というのは駆け出しのデータサイエンティストの多くが感じることです。 プロジェクトを推進するためにはスキルだけではなく、企画、設計、運営、実装、保守、運用など様々な課題をクリアしていかなければなりません。 データサイエンス系プロジェクトのケーススタディとして読者の参考になれば幸いです。

本プロジェクトは3つのフェーズを踏んで開発しました。

  1. レコメンドロジック実装
  2. デザインブラッシュアップ
  3. 配信最適化

それぞれのフェーズで何がポイントになり、どのようなプランニングをしたかについてはスライドをご覧ください。 ざっくりまとめると次のメッセージを伝えたいと思っています。

1. レコメンドロジック実装
  • レコメンドはユーザーさんの心理と理想の体験をイメージして設計する
  • レコメンドの勘所は「コンセプト」「ロジック」「デザイン」の3つ
  • DBをインターフェースにデータサイエンティストとWebエンジニアが作業分担できると開発効率がよい
  • 網羅的に実験することでユーザーさんのニーズがわかる
  • サイトの鮮度を保つためにランダム性を取り入れる
  • 「似ているお店」を数式で表現する
  • データの特性に合うアルゴリズムを選択する
  • データの質が良ければ簡単なアルゴリズムでもよいレコメンドになる
  • リリース前は定性評価、リリース後は定量評価に重みを置く
  • 保守・運用を意識した実装をする
2. デザインブラッシュアップ
  • アルゴリズムで伝わらないレコメンドのキモチをデザインで伝える
  • 情報設計の重要性と情報量のトレードオフを理解する
  • レコメンドの理由を表示しているサービスは国内には少ない
  • レコメンドのインパクトはロジックとデザインの掛け算で決まる
3. 配信最適化
  • レコメンドの質を高めて最後に量(価値)に変換する
  • バンディットアルゴリズムが効果的に適用できる条件を理解する
  • ElasticNetで過剰適合を避けたCTRの予測を行う
  • グロースを意識して適切な順序を踏み、定量的に成果を評価してプロジェクトを推進する

もし、上記の内容にご興味を持ちましたら是非ご一読いただると幸いです。

追記:プロジェクトのスピード感

本発表で話せなかったことにプロジェクトのスピード感があります。 データサイエンス系プロジェクトは時間がかかる上にリスクが高いため、適当なタイミングでプロジェクトの継続判断をする必要があります。 決められた期間で成果を出して継続判断をするためには実装すべき機能に集中し、必要ない実装を捨てる柔軟さが必要です。 例えば、本プロジェクトの場合、次のような開発期間で実装を進めました。

  • プロトタイプ実装フェーズ:1週間
  • PoC実装フェーズ:2ヶ月
  • サービス実装フェーズ:2ヶ月

プロトタイプ実装フェーズでは、インパクトの検討がつけばよいのでBigQueryから手動でデータをダウンロードし、Jupyter LabにPythonでべた書きをするという実装で済ませました。
PoC実装フェーズでは、インパクトが出るモデルを見つけることが重要なため探索的にデータ解析をする必要があります。 そのため、プログラムの自動化、および高速化、さらにはレコメンド結果の可視化の実装に集中して、実験と検証をストレスなく行える環境を優先的に実装しました。 このフェーズでは決められた期間内でどれだけ試行錯誤を繰り返せるかが重要であり、レコメンドの精度に直結してきます。 サービス実装フェーズでは、エラー処理やテストの実装に加え、柔軟にソースコードを改変できるように適度にモジュール化と関数化をしました。
また、プログラムが想定通りに動作しているかを検証する環境も必要になります。 いずれのフェーズにおいてもリファクタリングを繰り返し、そのフェーズに合った品質の実装に書き換えていきました。

時と場合によってプログラムの品質を変えることに気持ち悪さを感じるエンジニアは多いと思います。 しかし、開発期間内に目的に合わせて柔軟にプログラムの品質を変えるスキルは、 プロジェクトの推進力を上げ、最終的にプロジェクトの成功率を上げることに繋がります。 エンジニアの成長の1つの方向性として一度は意識して取り組んでみてはいかがでしょうか。

【閲覧履歴レコメンドの取り組み】

本発表の短編集として紹介した取り組みです。 ユーザーさんの閲覧履歴に含まれるアイテムに興味のスコアをつける方法の紹介になります。 一般にアイテムへの興味は「何度も閲覧する」「最近閲覧した」という事実に関連が強く、 この性質を数理最適化問題(凸二次計画問題)にモデリングすることでアイテムにスコアを付与します。

本手法は広い意味では機械学習におけるパラメータの推定を制約付きで学習するという提案になります。 また、よりサービスに近い観点ではパラメータ推定の時点ですでに知見がある場合にはその知見を制約に加えて学習することで より精度の良いパラメータ推定ができ、過学習も回避できることを示唆しています。 なお、こちらの手法は私が所属している研究チームが長く研究しているテーマなので、興味がありましたら次の参考文献をご一読いただければと思います。

参考文献

【お店口コミレコメンドの取り組み】

本発表の短編集として紹介した取り組みです。ユーザーさんがサイトから情報を取得する際の効率をテーマにしています。 CGMサイトにおいて情報(本問題では口コミ)が多すぎることでUXを損なうケースがあります。 本取り組みは文書要約技術(自然言語処理&数理最適化)を用いて情報の取得効率を改善させる提案を紹介しています。

また、PoC実施の際の検証方法も紹介しています。 本取り組みは社内でプレゼンを行うことでモデル検証をしたのですがいくつか仕込みをさせていただきました。

  • オンライン検証環境の用意:発表中に全員が検証に参加できる
  • オンラインアンケートの用意:発表中に全員から知見を集めることができる

実際の現場では個人の感性でモデリングしてしまうことが多いので、このような方法を利用することで多くの人の意見を取り込んだ定性評価を行うことができます。 自分ひとりでは気がつかない、意外なアイデアが得られるのでみなさまも一度、試してみてはいかがでしょうか。

【お店写真レコメンドの取り組み】

本発表の短編集として紹介した取り組みです。 お店ごとに魅力的な写真を選び出すというタスクの紹介です。まだまだ実験段階ですがサービスならではのポイントがあります。 一般的な魅力的な写真抽出の課題は主にピクセル情報を利用することが多いのですが、本取り組みではピクセル情報に加えて次の情報も利用しています。

  • EXIF情報(メーカーのカメラで撮ったなど)
  • 投稿情報(投稿の中で何番目に指定した写真か)
  • 投稿者の情報(フォロワーが多いユーザーさんの投稿か)

実際にRettyの投稿写真で実験してみてわかりましたが、ピクセル情報以外の情報も魅力的な写真判定に大きく寄与します。 これは画像解析がキラーコンテンツになるサービスを作る際には画像以外の情報も集めることでよりよいサービスにできるということです。 画像解析をサービスに繋げたいと思っている方にはご一読いただきたい内容です。


今後の取り組み

レコメンドプロジェクトはユーザーさんのニーズと数値的な成果を確認できた上で一旦終了となりました。 今後はRettyの内部にとどまらず、外部にレコメンド技術を提供していくことを検討しています。 具体的には、Rettyの店舗データ、CGMデータに加え、上記で開発したレコメンド技術を外部に提供していきたいと思っており、 実際に2018年10月よりRettyではデータコラボビジネスに向けた外部との取り組みを開始しました。 これはRettyのデータを全く別のサービスで利用することで新しいユーザー価値を創り出し、課題解決をしていくことを目的としています。

もし、ご興味がありましたら iwanaga@retty.me までご連絡ください。 新しいサービスについてディスカッションしましょう!

おわりに

昨今、データサイエンスの流行りもあり、様々な記事やコミュニティ、セミナー等が増えて入門の間口は広くなりました。 一方で、データサイエンスを実務に適用してインパクトを出す障壁は高く、多くのプロジェクトが頓挫し、志半ばで消えていきました。 これは今にはじまったことではなく昔からあるAIブームのたびに繰り返し起きていることです。 本ブログはデータサイエンス系プロジェクトに関わるデータサイエンティストのプロジェクト成功率を少しだけでも高められることを願って執筆しました。

謝辞

本資料は以下の発表を通して完成させました。お声をかけていただいたみなさまに感謝致します。

また、本取り組みのWebエンジニアリングまわりで貢献いただいた淡島弘吏様、久郷亮太様にも深く感謝致します。