フリーランチ食べたい

Python/機械学習/データ解析/ソフトウェア開発などなど

レコメンドアルゴリズム入門(非個人化推薦/コンテントベースフィルタリング/協調フィルタリング)

現在受講中のCourseraのRecommender Systemsコースの中で自社のサービスなどにレコメンド機能の導入を検討している方に有用だと思われる情報があったのでまとめてみました!

「レコメンドアルゴリズムって協調フィルタリングのこと?」というくらいの知識の方にオススメです。

CourseraのRecommender Systemsコースについて少しだけ

最初に少しだけコースについて説明させてもらおうと思います。

f:id:ikedaosushi:20190302162201p:plain Recommender Systems | Coursera

Recommender Systemsコースはレコメンドシステムのミネソタ大学のJoseph Konstan先生のコースです。 Joseph Konstan先生やこのコースについてはtakutiさんが書いてくださっている記事が参考になります。

Podcast "Data Skeptic" の推薦システム回が良すぎて3回聞いた | takuti.me

推薦システムの業界で知らぬものはいない、ミネソタ大学のレジェンド級プロフェッサーJoseph Konstan先生

Courseraの推薦システムのコースを修了した | takuti.me

全体として、コンパクトに推薦システムの世界がまとまった非常に良い内容だった。この分野は新しい手法が次から次へと生まれておりトレンドを追うのも一苦労だが、どのような手法でも基本は変わらない。このコースの内容さえ理解していればとりあえず推薦システムは作れるし、その良し悪しを議論することもできるだろう。

また、このコースの特徴として、エンジニアだけが対象というわけではなく、マーケターやプランナー、ディレクターも対象だと明確に述べられています。 実際、出題される課題のスプレッドシート、エクセルで簡単なレコメンドシステムが作れるような構成になっているので、エンジニア以外の方にもオススメです。

レコメンドアルゴリズムの分類

コンテキストや目的などによって、レコメンドシステムを分類することができるのですが、その中でもレコメンドアルゴリズムは、理解しておくとレコメンドシステム全体が理解しやすいと思うので、今回はそれについて書きます。

メインのアルゴリズムは次の通りです。

  • Non-Personalized Summary Statistics (非個人化推薦)
  • Content-Based Filtering (コンテントベースフィルタリング)
  • Collaborative Filtering (協調フィルタリング)

順番に説明していきたいと思います。

1. Non-Personalized Summary Statistics (非個人化推薦)

  • 統計的な指標のみを用いたレコメンドです。
  • 例で一番わかりやすいのがランキングですね。他にも「ホットトレンド」もここに含まれます。
  • つまり「ランキング表示」は立派なレコメンドシステムの1つだと言うことができます。
  • 「男性内購入数ランキング」「20代閲覧数ランキング」などセグメントを切ったものも、このカテゴリに含まれます。

こんなデータが必要

  • CV数/PV数/Click数など基本的なデータ
  • 統計的な集計に使える特徴量
    • ユーザーの年代
    • アイテムの特徴量

2. Content-Based Filtering (コンテントベースフィルタリング)

f:id:ikedaosushi:20190302204121p:plain
Content-Based Filteringのイメージ

  • アイテムをベースにしたレコメンドです。
  • 例えば、映画でのレコメンドを考えると、まず映画をそれぞれに「アクション1~5」「恋愛1~5」「コメディ1~5」のように特徴量を作っておき、「アクションとコメディの度合いが高い映画を観たユーザーには似ている属性の映画をレコメンドする」といった具合です。

こんなデータが必要

  • アイテムの特徴量
    • 映画だったら「アクション」「ロマンス」など
    • 音楽だったら「ロック」「ジャズ」などの
  • ユーザーがどのコンテンツを見たか/高く評価したか

3. Collaborative Filtering (協調フィルタリング)

f:id:ikedaosushi:20190302204614p:plain
Collaborative Filteringのイメージ

  • Amazonで使われているので耳にしたことがある方も多いのではないでしょうか。
  • Content-Based Filteringとの違いは、①コンテンツに関する特徴量を使わないこと、②他のユーザーの情報を予測に用いることです。
  • Collaborative Filteringは次のようなユーザーとアイテムの行列データ(アイテムに対する評価やClick/PV数など)を元に他のユーザー距離を予測します。

f:id:ikedaosushi:20190303003542p:plain

  • アイテム間の距離を元に予測するものを「Item-based filtering」「Item-item filtering」、ユーザー間の距離を元に予測するものを「User-based filtering」「User-User filtering」と呼びます。

こんなデータが必要

  • ユーザーがアイテムに対して行ったRating
    • 例えばAmazonのようにあるユーザーAがある商品1に対して1~5までの評価をしているデータです。
    • これを応用して「購入した/してない」「何回閲覧した」というようなデータでも可能です。

それぞれの使い分け

f:id:ikedaosushi:20190302202535p:plain

もちろん一概には言えないのですが、基本的には上の方が簡単でシンプルで、下の方が難しく複雑です。 ポイントは必ずしも協調フィルタリングが最強というわけではないということです。 ランキングだけで十分なときは、敢えて複雑にする必要がありません。なんでもかんでも「協調フィルタリング」とするのは封筒の封を空けたいときに「ちょっとハサミ貸して」と言ったら「はい日本刀どうぞ」って言われるようなものかなと思います。

まずシンプルに始めて、必要に応じて複雑にしていきましょう

さいごに

  • 今回はレコメンドアルゴリズムの入門的な内容を書きました。
  • もし興味がある方は是非Recommender Systemsコースを受講してみてください。
  • また、もし間違っている内容などあったら教えてください。正直に言うと、自分の英語力的な問題で勘違いしている内容もあるかもしれないので、どんどん指摘してもらえればと思いますmm
  • 実は自分もコースの半ばであと少しで修了なので引き続き頑張ってまたブログにまとめられたらと思っています。

f:id:ikedaosushi:20190302203403p:plain