読者です 読者をやめる 読者になる 読者になる

レコメンドエンジンを作りたい part1

レコメンドエンジンに興味がある。

オープンソースのレコメンドエンジンはあるものの、自分の欲しい機能だけを持ったミニマルなレコメンドエンジンが欲しい。

あと、自分でそういうのを考えるのも好きだし。

というわけで、自分でレコメンドエンジンを作ってみようかな。と思い立ったのだ。

そうは言っても、頭がわるいのであんまり高度なレコメンドは出来ないだろうが。

購入履歴から似たユーザーを探す

そういうわけで、まずは購入履歴から、似ているユーザーを探す機能を考えた。

下調べした結果、ベクトルがどーのこーのとかって難しい話が出てきたので、まずモデルを単純化して考えることに。

f:id:omiya6048:20130613003903p:plain

上図が、購入履歴だとする。ユーザーのカテゴリ別、購入件数の集計結果だ。

全体の購入件数とカテゴリ別の購入件数から、どのカテゴリの購入割合が高いかを計算する。
(カテゴリ別購入件数 / 全体の購入件数)

そして、それを元に、ユーザー座標を計算する。

今回は、考えやすいようにカテゴリを4つとしたので、次の条件でユーザー座標を計算した。

  • 文庫の割合分だけ、X座標を加算する。(90度方向に進む)
  • 新書の割合分だけ、X座標を減算する。(270度方向に進む)
  • コミックの割合分だけ、Y座標を加算する。(180度方向に進む)
  • 単行本の割合分だけ、Y座標を減算する。(0度方向に進む)

括弧書きで書いたのが、本来の考え方だ。

カテゴリが4つなので、単純にX,Y座標に対する加算と減算だけで計算できるが、例えばカテゴリが6つある場合は、60度刻みに座標を進めなくてはいけない。

(ここでベクトルが登場するわけだ。)

ベクトルとか、よく分からないので今回はカテゴリを4つにしたのだ。へへーん。頭良いだろう。(悪いよ!)

f:id:omiya6048:20130613003908p:plain

ともかく、そうやって何やかんやで、ユーザーの嗜好を座標に変換すると上図のように図示できる。

ユーザー座標が得られれば、あとは単純な範囲検索で嗜好の似たようなユーザーを取得できるというわけだ。


というわけで、今回はここまで。

次回は、実装をしてみよう。(あ、実装ではカテゴリ4つ以外も考慮に入れます)

何で実装しようかな。PHPで良いかな。WordPressのプラグインに再利用できるし。