「使い心地のよいレコメンデーション」を狙いました
ホットペッパーフレンズとはリクルートライフスタイル社が運営する飲食店情報サイト「ホットペッパーグルメ」が提供する「お得なクーポン&飲食店検索」アプリ(以下、HPGアプリ)の姉妹分にあたるアプリです。通常のHPGアプリが検索条件をもとにお店を探すのに対し、ホットペッパーフレンズは友人との繋がりをもとにお店を探すアプリです。



このアプリの最大の特徴はお店の検索結果一覧です。

例えば「六本木 レストラン」などで検索すると通常は誰でも同じ順序で検索結果一覧が表示されますが、このアプリでは検索結果一覧そのものがソーシャルグラフ・レコメンド結果になっています。
ユーザーの友人がチェックインしているお店やユーザー自身がチェックインしたお店に類似したお店が検索結果一覧の上位に表示されるため、友人との繋がりやユーザ自身の嗜好でお店を検索することができ、行きたくなるお店を探しやすくなっています。
ここでのポイントは、前述したとおりソーシャルでのチェックイン数ランキング、すなわちソーシャルグラフ・ランキングではなく、ユーザーのチェックイン履歴にもとづいて嗜好も考慮されレコメンドされていることです。
それを実現するために主要な2つの評価軸を合計してレコメンドしています。2つの評価軸とは、次の2つです。
- ユーザーのチェックイン履歴にもとづいたお店のレコメンド(従来のItem to Itemのレコメンド
- ユーザーのFacebook内での友人のチェックイン履歴にもとづいたお店のレコメンド(いわゆるソーシャルグラフ・ランキング)
アルゴリズムは、1、2において、各レストランに独自に計算したスコアをつけ1、2軸のスコアの合計が最終的なスコアとなり、上位のものから表示される仕組みになっています。
友人のチェックイン数が多く、2でスコアが高いお店でもユーザーのチェックイン履歴と関係が薄いお店≒ユーザーの好みや趣味にあわないお店は1でスコアが低く、上位には表示されにくくなります。

前述したような単純なソーシャルグラフ・ランキングではなく、ユーザーの履歴を考慮し、好みや趣味にあったレストランが上位に表示される仕組みにしました。
また1、2の重みづけは一意ではなく、ユーザーの行動によって学習され重みづけが変更されます。ユーザーによって友人のチェックインを重視する人もいれば、ユーザー自身の好みを重視する人もいると想定し、学習が可能な設計にしました。
仕組みの概要は次の通りです。ある条件でお店を検索したときに、レストランA・Bが表示される場合のスコアを考えてみましょう。
- レストランAの1スコア:200点
- レストランAの2スコア:100点
- レストランBの1スコア:80点
- レストランBの2スコア:200点
とした場合、この時点ではまだ1、2の重みづけは同じです。この場合、各レストランのスコアは、次の通りで検索結果一覧ではA→Bの順番に表示されています。
- レストランAのスコア:200点×1.0+100点×1.0=300点
- レストランBのスコア:80点×1.0+200点×1.0=280点
この時、ユーザーが検索結果一覧からレストランBをクリックしたとします。ユーザーは2の友人のチェックイン履歴を重視したと判断されるので、1よりも2のスコアの重みづけを重く変更します。例えば、1の重みを0.9、2の重みづけを1.1に変更します。
すると次回から各レストランのスコアは、
- レストランAのスコア:200点×0.9+100点×1.1=290点
- レストランBのスコア:80点×0.9+200点×1.1=292点
となり、レストランBのスコアが高くなるため、次回からレストランBのほうが上位に表示されます。
実際は、各評価軸のウェイトはこのように単純には決まりませんが、今回は概念的に説明しました。また評価軸も2つだけではなく、友人の「いいね!」数やホットペッパーフレンズ独自の評価方法である「MyNote」機能の数なども評価軸に加えてレコメンドできるように実装しています。
このようにユーザーの選択によって逐次的な学習を行うことで、多様性のあるアルゴリズムを実現しています。学習が繰り返されることで、よりユーザーの嗜好にあったレコメンド結果となり精度がアップしていく仕組みを実装しました。その結果、ユーザーが使えば使うほど、レコメンド結果がユーザーの嗜好に近づき、ソーシャルグラフの結果が押し売りにならないように反映される――そんな使い心地のよいレコメンデーションを狙いました。