レコメンデーションまとめ書き
レコメンデーション
Lastmod: 2021-07-17

概要

レコメンデーションとはECサイトなどでおすすめしてくる「あれ」である。 レコメンデーションの手法について調べたのでここにざっとまとめる。

手法全体像

  • ポピュラリティ(人気ランキング)
  • ルールベース
  • コンテンツベースフィルタリング
  • 協調フィルタリング
    • 近傍ベース(メモリベース)
    • モデルベース
  • ハイブリッド

ポピュラリティ

要するに人気ランキング。特に触れない。

ルールベース

一番シンプルなレコメンデーションの手法です。 レコメンドする側があらかじめ「この属性の人には、これをおすすめする」というルールを決めておき、そのルールに基づき配信することです。

メリット

  • レコメンドする側がおすすめしたいものをはっきりと認識している場合、それを全面に押し出すことができる点です。PR枠などで使いやすい。

デメリット

  • ルールで決めたものしか配信できない。いわゆるパーソナライズはされていない。その分目に止まるアイテムの数が少なくなってしまい、嗜好性の幅を狭めてしまう可能性がある。
  • ルールの管理がめんどくさい。嗜好性の幅を狭めてしまわないように逐次データと見比べながら設定をする必要がある。またルールが増えてくるとルール自体の管理も煩雑になる。

コンテンツベースフィルタリング

コンテンツベースフィルタリングでは、その名の通りコンテンツの類似度をベースとしたレコメンデーションです。 例えばユーザが過去選んだ商品と類似度の高い商品を選択したり、ユーザが選択したカテゴリをもとに類似度の高い商品を選択したりといったことです。

メリット

  • 新規性に強い。
    • 利用者数が少ない段階でもアイテムベースの類似度なので大丈夫
    • 新しい商品などで、他のユーザからの評価がない段階でも大丈夫

デメリット

  • 多様性を持たせることができない。あくまでも一人のユーザが選んだ商品をベースにしているので、どうしても過去選んだ商品に類似してしまう。
  • ドメイン知識が必要になる。コンテンツの類似度の計算の際に、コンテンツをベクトル変換する必要がある。つまりそのコンテンツに対して適切なベクトルにするドメイン知識が必要になる。

協調フィルタリング

協調フィルタリングはコンテンツベースとは違い、ユーザの評価(ユーザが買ったか、満足度等)のデータを用いてレコメンドを行います。 つまりレコメンドする側が明示的にコンテンツをベクトル表記する必要がなくなるということです。

また協調フィリタリングはさらに2つの手法に分解することが可能です。

  • 近傍ベース(メモリベース)
  • モデルベース

近傍ベース(メモリベース)

その名の通り、メモリにデータセットをそのまま落とし込んで推論するイメージです。 近傍ベースでもさらに2つの手法に分割することができます。

  • ユーザーベース協調フィルタリング: ユーザの評価をもとに、ユーザ間の類似度に基づいてレコメンドをする
  • アイテムベース協調フィルタリング: ユーザの評価をもとに、アイテム間の類似度に基づいてレコメンドをする

メリット

  • アイテムの特性を掴みやすい

デメリット

  • 新規のユーザやアイテムをレコメンドすることができない
  • スケーラビリティに懸念がある
  • ユーザがつけた評価に依存してしまう

モデルベース

モデルベースでは、データセットからあらかじめ何らかの情報を抽出しておいて、その情報に基づきレコメンドを行います。 メモリベースではデータセットそのまま使っていたのに対して、モデルベースではデータセットからモデリングするというワンクッションが挟まります。 いくつかのモデルを例示しておきます。

  • ベイジアンネットワーク
  • 単純ベイズ
  • KNN
  • PCA

メリット

  • 予測性能の向上
  • スケールしやすい

デメリット

  • PCAなどで次元削減をした場合、有益な情報がなくなる可能性がある。

ハイブリッド

ハイブリッド型とは、要するに複数のレコメンド手法のいいとこ取りをすることであり、協調フィリタリングとコンテンツベースのハイブリッドだったり、メモリベースとモデルベースのハイブリッドだったりする。

最後に

レコメンデーションシステムに関してざっとまとめた。細かい部分に関してはまた実務等で必要になったら深めていきたい。