各種レコメンドアルゴリズムの特徴・計算方法まとめ

各種レコメンドアルゴリズムの特徴をメモ。


間違いの指摘やご意見はお気軽に @ts_3156 までご連絡ください(^^)



レコメンドとは


何かしらの「アイテム」をユーザーにおすすめする仕組みのこと。


アイテムは場合によって様々で、ECサイトなら商品、ニュースサイトならブログ記事、ツイッターならユーザーそのもの、がアイテムに当たる。



代表的なレコメンドアルゴリズムの種類


ルールベース

決め打ちレコメンド。

例:(今はA社とタイアップ中だから、)うちの商品を買った人にA社の商品をおすすめしよう



コンテンツベース

アイテム間の類似度に基づいたレコメンド。

例:野球のバットを買った人には野球のボールをおすすめしよう



協調フィルタリング

レコメンドの話で一番話題に登るのはこのアルゴリズム。ユーザーの行動履歴からおすすめするアイテムを決める。アイテム情報を知らずにおすすめする点がポイント。アイテム情報を知らなくてもよいので、思いがけない発見につながるリコメンドができる。

例:この商品を買った人は、こんな商品も買っています


協調フィルタリングは、さらにアイテムベースとユーザーベースに分類される。



アイテムベース協調フィルタリング

ユーザーの行動履歴からアイテム間の類似度を計算し、類似するアイテムをおすすめする手法。

例:商品Aは商品Bと一緒に購入されることが多いから、商品Aの購入者に商品Bをおすすめしよう



ユーザーベース協調フィルタリング

ユーザーの行動履歴からユーザー間の類似度を計算し、おすすめするアイテムを決める手法。協調フィルタリングの中でもよく紹介されているのはユーザーベースの方。

例:Aさんに何かおすすめしたい、Aさんは商品a、商品b、商品cを買っている。同じような行動履歴のBさんは商品a、商品b、商品c、商品dを買っている、ということはAさんには商品dをおすすめできる



ベイジアンネットワーク

まだ発展途上らしい。私はよく知らない。



アソシエーション分析

というものもあるらしいです。アイテムの共起を見ておすすめするアイテムを決めるみたいなのですが、私は詳しくないです。詳しい資料を見つけたので、よかったら見てみてください → R言語による アソシエーション分析



どのレコメンドアルゴリズムがベストなのか


それぞれに長所・短所があり、どれか1つを選ぶものではない。ちなみに、レコメンドパッケージ商品は上記の手法を独自に組み合わせているものがほとんど。



各レコメンドアルゴリズムの長所・短所


それぞれの手法の長所(というか特徴)

まず前提として、だいたいのレコメンドシステムは協調フィルタリングをベースにする。このアルゴリズムが基本的には効果的だから。協調フィルタリングの長所は、人には考えつかない意外性のあるレコメンドができる、(細部を気にしないのなら)自動化できる、という点。


その上で、ありきたりなアイテムばかりリコメンドされるのを防ぐために、ルールベースやコンテンツベース等を一部取り入れたり、恣意的な重み付けを追加したりする。



それぞれの手法の短所

それぞれの短所というか、レコメンドシステム全体でよくある短所をつらつら書く。


  1. 同じようなアイテムばかりレコメンドされる
  2. 人気のアイテム、長期間掲載しているアイテムばかりレコメンドされる
  3. 数年に一度しか購入しない物に対するレコメンド結果がずっと表示される
  4. ユーザー行動履歴が十分に蓄積されていないと精度がでない
  5. データの管理コストがでかい
  6. レコメンドの計算コストがでかい


行動履歴の種類


購入以外にも使える履歴はある。よくある例として、アイテムを見た(閲覧)、アイテムをお気に入りやカートに入れた(興味)、最終的に手に入れた(購入)など。


ツイッターなら、ツイート、リツイート、お気に入り、などなど。対象とするシステムにより、具体的な行動履歴は全く違ったものになる。


工夫次第で購入履歴の種類はいくらでも増やせる。その中で効果的なものを選び出すのが大事。



それぞれどう計算すればいいの?


まず、どの手法にも絶対的な計算方法とかはない。「ユーザーの行動履歴からアイテムの類似度を求める」みたいな抽象的な枠組みだけが決まっている。


例えばユーザーの類似度を求めるにしても、下記のようにやりようはいくらでもある。


  1. 同じアイテムを購入したユーザーを似ているとみなす
  2. 同じ名前や誕生日なら似ているみなす
  3. 各ユーザーの特徴要素の集合をベクトルに見立て、コサイン類似度をユーザー間の類似度とみなす
  4. LDAを用いユーザーが言及しているトピックを見つけ、同じトピックに言及していたら似ているとみなす

ここで大事なのは、「難しい数式を使う計算方法だからといって、よい結果がでるとは限らない」ということ。そういう手法をそのまま使っても、だいたいはありきたりのすっごくつまらない結果になる。


ここからは個人的な意見ですが、レコメンドで重要なのは、「対象とするシステムに合わせた徹底的なチューニング」にあると私は考えます。



簡易的な計算方法


絶対的な計算方法はなくても、よく使われる模擬的な計算方法はあります。表や行列を使った計算が、見た目も計算内容も分かりやすいので簡易的な説明によく使わます。下記のページの説明が分かりやすいです。


アイテムベース協調フィルタリングの計算

ユーザーベース協調フィルタリングの計算



参考リンク


「あなたにおすすめの商品」のからくりとは?--ECサイトのレコメンド技術を考える(2)

協調フィルタリング技術を掘り下げる--ECサイトのレコメンド技術を考える(3)

協調フィルタリングの課題を解決する--ECサイトのレコメンド技術を考える(4)


協調フィルタリングについてまとめてみた

推薦システムのアルゴリズム(pdf)



まとめ


間違いの指摘やご意見はお気軽に @ts_3156 までご連絡ください(^^)

著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール