協調フィルタリング

紀要原稿初稿校正。 やばい18ページもある。 あと少しで20ページいっちゃうところだった。 若干書き過ぎた。

さて、推薦システムには「協調フィルタリング」と「コンテントに基づくフィルタリング」とそれらを両方ハイブリッドにした方法があるらしいのだが、 顧客情報からアイテムの類似性を求めるというのは「協調フィルタリング」の方だけなので、 「コンテントに基づくフィルタリング」についてはとりあえず無視して良い。 また、私がやってることは単にアイテムの類似度(のようなもの)を出しているだけなので、推薦システムとはやや違うのかもしれない。

アイテム間の類似度を計算するには、評価値がなくてはならないのだが、 そもそも今のところ評価値を利用してないので類似度も計算できない。 もしかすると私のやっていることは協調フィルタリングに似ているが実は違うことだったのかもしれない。 まあともかく私として必要なのは類似した既存の手法があるかどうかを調べることなので、 類似手法が存在しないというのであればそれはそれで良い。

アイテム間(まったく双対なのでユーザ間、と言っても良い)の類似度を計算するには、 相関係数 (Pearson correlation coefficient) を使う方法、 コサイン(アイテム間の角度)を使う方法、 平均自乗誤差を使う方法、などがあるらしい。 今から私がやろうとしていることとは、あまり今は詳しく書きたくないが、 あまり関係ない気がしてきた。

というか、あるユーザAがあるアイテムIを編集した量(バイト数)や編集回数などを、 ユーザAのアイテムIに対する評価(rating)とみなしても良いのであり、 そうすると上の相関係数やら類似度やらを導入した推薦システムを作ることができ、 それはそれで有意義なのかもしれんが、 私としてはそういうものをたぶん作りたいわけではないのだろうなと思う。 つまり、何かマニアックなやつが居て、大量または頻繁に編集したとしてそれが結果に対して重み付けになり偏った傾向が出るのが嫌。 wikipedia の場合、一部の人がしつこく編集したアイテムよりも、 たくさんの人が少しずつ編集したアイテムの方が私には価値が高いと思えるのだ。

また、通常の推薦システムの場合には、ユーザAに適切に推薦するにはAとよく似た趣味の別のユーザBをうまく見つけ出さなくてはならず、 それが最大の問題となる。 AがマニアックならばBもマニアックでなくてはならず、 Aが一般人ならばBも一般人でなくてはならない。 AとBとはratingや購買履歴、書評などありとあらゆる統計学的指標が近くなくてはならない。 だが、今やっていることはユーザどうしの類似性というのはあまり重要ではなく、 アイテムどうしがどのくらい似ているか、関連しているかということだけがわかれば良い。 そしてあまりユーザ一人一人の特異な傾向が結果に反映されても困る、 できれば平均してならした結果がほしいというわけだ。

だがまあそれはそれとして、ユーザ間の相関も計算してみて、ユーザのグループ分けもしたいと考えているところではあるから、 そのうち相関係数も導入するかもしれん。