協調フィルタリングの作り方

今日は協調フィルタリングの作り方を考えてみたいと思います。「考えてみたい」というのは実際に協調フィルタリングを利用したシステムの構築経験が自分にはないからです。企画は何度も書いているんですけどね。。

なので、役に立つかはわかりません。

材料

材料として最も重要なのが、フィルタリングの対象となるデータです。このフィルタリングの対象となるデータによって、協調フィルタリングの質が変わってきます。

この材料のポイントは2つです。

  1. 数のデータとなるもの。
  2. 勧めたいもの。

1つ目ですが、これはよく考えられるものとして、「商品」や「コンテンツ」があります。このデータは1回(セッション)の利用で、複数のデータとして保持できるものをご用意ください。

また、協調フィルタリングは基本的にレコメンデーションの仕組みの1つですので、その材料をもとに別の材料を勧めるといった形になります。よって、ユーザーに勧めたいものを材料として選択してください。

例えばAmazonの場合は商品を材料としています。この場合は、ある商品を買い物カゴに入れたり、購入したことでその商品に基づくレコメンデーションを行っているわけです。

その他の材料としてはデータベースなどが必要となりますが、まぁ、その辺は適宜揃えてください(ここでは触れてもあまり意味がないので…)。

作り方

1:材料を用意する(データの蓄積)

まずは材料の用意しないと意味がありません。あるポイントを絞り込んでその時点でのデータを取るようにします。商品を材料とする場合は、一番判りやすいのは購入などだと思います。

また、コンテンツの場合はセッションごとに参照したページを集計する必要があります。これは結構大変なのですが、WEB解析システムによっては工夫すればデータとして取得することも可能です。

イメージとしては…

ユーザー1 商品A 商品B 商品C
ユーザー2 商品A 商品D 商品C
ユーザー3 商品A 商品E 商品C

といった感じでしょうか(あくまでイメージ)。

2:調理する(相関の計算)

データがある程度溜まったら、材料ごとの相関を計算します。頑張ればリアルタイムで計算もできるかもしれないですが、大変なので多分定期的にバッチ処理をする感じだと思います。

この計算は、そういった処理を出来るパッケージなどもあります。自分で作ると…多分相関の計算は大変だと思います。

上記で挙げたデータでは「商品A」と「商品C」の相関が高くなります。つまり「商品A」を買おうとしている人に「商品C」を勧めると同時購入の確立が高そうということになるわけですね。

ちなみに相関を計算する際、複数の材料をグルーピングして相関を計算するという方法もありますが、組み合わせの数がすごい数になってしまう可能性がありますので、お勧めはしません(出来るならレコメンデーションの確立はアップすると思います)。

この結果はコンテンツから参照できる何かしらのDBに格納しておきます。

3:盛り付ける(レコメンデーションする)

材料の相関が取得できれば、後はこのデータを利用して相関性の高いものをレコメンデーションするだけです。

この際にレコメンデーションする場所を決めておく必要があります。商品を利用する場合は、その商品の詳細ページや実際に買い物カゴに入れたページなどが当てはまるかもしれません。この辺はそれぞれのサイトに併せて適量を適切なタイミングで投入してください。

場所が決定したら、先ほどDBに格納した相関データをコンテンツが表示される際にDBから抜き出して利用します。

4:シェフの応用

協調フィルタリングは、基本的にはユーザーの利用されたデータをもとに相関を計算して表示するものです。

これの利点として、同じ組み合わせであれば、相関性の高いものを表示すればそれだけランダムでお勧めするより必要である可能性が高いというところにあります。

あとはシステムを作ってしまえばある程度自動で行うことも可能だと思います。

また、デメリットとして企業側がお勧めしたい商品をコントロール出来ないという部分があります。

この部分については相関の計算を行う際に、係数などを持たせてコンテンツの表示した重み付けをしておくことである程度はコントロールできるかもしれません。

ただ、そもそもの協調フィルタリングとは違った形になると思います。

まとめ

今回は協調フィルタリングの作り方について書いてみました。冒頭にも書きましたとおり、実際に協調フィルタリングのシステムを構築した経験がありません。なので、システム的に無理があるところもあるかもしれません(多分、相関の処理のところあたり)。

この辺は、自分のサイトに併せて適量を利用して頂ければと思います。

さて、随分と長いエントリーになってしまいましたが、といった感じで協調フィルタリングを利用したレコメンデーションロジックの作り方でした。

You Might Also Like