ローコストで手軽な高精度のレコメンデーションシステム

このエントリーをはてなブックマークに追加
2017年06月08日

column14.jpg

モノ、ヒト、コンテキストを加味したレコメンデーションを実現する

現在、アマゾンや楽天をはじめとするECサイトには、必ずといってよいほどレコメンデーションシステムが実装されています。

ウェブブラウザを起動して、アマゾンのトップページを表示させてみると、さまざまなジャンルの「おすすめ商品」が表示されます。

おそらく、私たちが直近で購入あるいはチェックした商品を実際に買った人が他にも買っている商品を、「協調フィルタリング」で分析して表示しているのでしょう。

あるいは、私たちが購入またはチェックした商品のジャンルなどのメタ情報を用いて、コンテンツベースフィルタリングを行っているのかもしれません。

いずれにせよ、一般的なレコメンデーションでは、モノとモノとの関係だけに注目してレコメンドを行っています。

しかし、関係性技術においては、モノとモノとの関係性だけでなく、人と人との関係性、あるいはコンテキスト(メタ情報)同士の関係性も、分析に組み込むことができます。そのため、従来の技術よりも高い精度のレコメンドができる可能性があります。

また、データの取り扱いが容易であるため、中小企業の担当者や個人店舗のオーナーであっても、手軽にレコメンデーションを試してみることができます。

従来のレコメンデーションシステムは、大手ECサイトが膨大な予算をかけてつくりあげるものでした。関係性技術であれば、個人商店でも、自社の持つ顧客の購入情報から、レコメンデーションシステムをつくりあげることができます。

漫画のレコメンドシステムを検証してみました

6人の漫画好きな消費者にサンプルになってもらって、過去数カ月間に購入した漫画の履歴から、仮想的なレコメンデーションシステムを立ち上げてみました。

漫画の購入履歴には、次のようなデータが含まれています。

  • 消費者名(個人情報保護のため、消費者A~Fの記号でマスキングしてデータを取得)
  • 購入した漫画のタイトル(巻数は考慮しない。たとえば1巻と2巻を買った場合は2冊とカウントする)
  • 漫画を購入した店舗名(店舗名をメタ情報として関係性を取得) 

これらの情報からつくりあげた関係性データが、オープンツール・クライアントにサンプルデータとして収録されている「漫画購入ログ」です。

消費者Aを基点に抽出する

たとえば、消費者Aを起点ノードにすると、次のような関係性が示されます。

消費者Aの漫画購入ログの関係性グラフと距離ランキング
消費者Aの漫画購入ログの関係性グラフと距離ランキング

消費者Aにとって最も距離が近いのは「出町柳駅店」で、次に距離が近いのは「三条駅店」です。おそらくこの二つの店舗で漫画を買うことが多いのでしょう。その次に「消費者D」と「消費者E」が並んでいるので、消費者Aは、DとEの二人と漫画の好みが共通する可能性が高いことがわかります。

消費者Aで抽出された漫画タイトルのホップ数を見る

消費者Aが実際に購入した漫画を知るために、漫画タイトル以外の「ノード」を取り除いて、「ホップ数」の少ない順番に20位までソートしたものが次のようなリストになります。

消費者Aに関係する漫画(ホップ数でソート)
消費者A に関係する漫画(ホップ数でソート)

リストの中で「ホップ数」が1になっているものが、消費者Aが実際に購入した漫画のタイトルです。「ホップ数」が2以上のものは、消費者Aはまだ購入していないものの、興味を持つ可能性が高い漫画になります。では、他の消費者を基点にしてみると、どうなるでしょうか。

消費者Bを基点に抽出する

次の図は、消費者Bを基点にしたグラフとリストです。

消費者Bの漫画購入ログの関係性グラフと距離ランキング
消費者B の漫画購入ログの関係性グラフと距離ランキング

消費者Bの場合は「八尾駅店」と「京橋駅店」で漫画を買うことが多いようです。また、他の消費者との距離が遠いことから、似た傾向の消費者が少なく、独自の基準で漫画を選んでいることがわかります。

消費者Bで抽出された漫画タイトルのホップ数を見る

同じく、消費者Bが実際に購入した漫画を知るために、漫画タイトル以外の「ノード」を取り除いて、「ホップ数」の少ない順番に、20位までソートしてみました。

消費者Bに関係する漫画(ホップ数でソート)
消費者B に関係する漫画(ホップ数でソート)

リストの中で「ホップ数」が1になっているものが、消費者Aが実際に購入した漫画のタイトルです。「ホップ数」が2の漫画が、レコメンデーションの対象となりうるタイトルです。

消費者Bは、漫画の好みが6人の中で特に偏っているようで、15位以下の漫画は、ホップ数が見つからない(消費者Aとつながっていない)結果となりました。

消費者A、Bにレコメンドできる漫画は?

以上の結果から、まず関係性技術を用いることで、消費者ごとに明らかに異なるレコメンデーションリストが作成できることがわかりました。

ちなみに、消費者Aにレコメンドされる漫画タイトルは次のとおりです。

  • 『君と僕。』
  • 『名探偵コナン』
  • 『BLEACH』
  • 『NARUTO』

 一方、消費者Bにレコメンドされる漫画タイトルは次のようになります。

  • 『SKET DANCE』
  • 『HUNTER×HUNTER』
  • 『おおきく振りかぶって』
  • 『銀魂』

趣味嗜好のグループ化は「類似度」でも

さらに、消費者Aのグラフから、消費者Aと消費者Dと消費者Eの距離が近く、同じような趣味嗜好を持つ可能性が高いことがわかります。

実際に類似度(共通ノードの数)でソートしてみると、次のような結果が出てきます。

消費者 との類似度でソート
消費者Aとの類似度でソート

この3人の購入した漫画を比較してみると、3人とも『3月のライオン』を2冊ずつ買っているなど、たしかな類似が見つかりました。また、消費者AとDはそのほかに『進撃の巨人』、『咲-saki-』など複数の漫画購入が共通しています。

消費者ごとの購入したタイトルと冊数
消費者ごとの購入したタイトルと冊数

これらの結果は、特別に協調フィルタリングなどを行わなくても、関係性技術が、消費者同士の類似性や特性を抽出可能であることを示しています。

さて、レコメンデーションできそうなことは検証できました。次回は、SNSへの書き込みから「次に知りたい情報」をつかむにはどうするか、についてです。お楽しみに。

前回:なぜ「関係性技術」によるデータ活用では手軽に高精度の結果を得られるのか

次回:SNSへの書き込みから「次に知りたい情報」をつかむ

関係性コラムトップ

トップへ戻る