「予測できますか?」で欠損データを「協調フィルタリング」による類似性で推定する話をしました。主観的な方法で類似性を決めましたが、数理的な方法がありますので、説明します。相関係数を利用します。相関係数については、「いい加減に覚えると後が大変」をご覧ください。
資料はこちら → 情報検索その5
p.1 「コサイン類似法」となっていますが、相関係数と同意です。左上の表のように、item1とitem2について、user1~6が評価して点数を付けたとします。右図のようにベクトルで表記し、ベクトル間の相関関係を調べます。右下をご覧ください。ベクトルaとbが直角の場合は、相関係数0、ベクトルの角度がゼロつまりベクトルの方向が一致している場合は相関係数1になる相関係数はcosθと同じです。ベクトルの内積とcosθの関係式を整理してcosθを求める式に変形します。分子がベクトルの内積、分母は二つのベクトルの長さを掛けた値です。内積は、x成分同士、y成分同士の掛算の和です。ベクトルの長さは、ピタゴラスの定理で算出できますね。 user1と2、user1と4のcosθつまり相関係数を算出すると、0.978と0.808となり、user1はuser2との方が類似性が高いと言えます。
p.2 itemが3つ以上の場合の一般式を載せておきます。user1とuser2の評価が真逆の場合に、cosθを計算すると、0.636となり相関があるように思えますが、違和感がありますね。そこで、平均値を引いて同様にcosθを計算すると、-1となり負の相関係数となり類似性は全くないことを示します。統計処理でも必ず平均値を引いていますね。よって、一般式は一番下の式を用いてください。
p.3 欠損を含むデータを用いてuser間の類似性cosθ(相関係数)を算出します。user1とuser2について計算してみます。他も同様に計算した結果が右上の表になります。
p.4 user3のitem1の欠損データを、user3と類似性があるuserの値より推測する方法を説明します。左下の表を埋めていきます。平均値は各userのitemの評価点の平均値です。item1の評価点から平均値を差引きます。右下の計算式より、欠測データを求めます。user1とuser2のitem1の評価点と平均値の差に類似度を掛けたものをuser3の平均値に加算して算出すると3.743が得られます。
p.5 協調性フィルタリング、行列因子分解及び今回のコサイン類似でもとめた欠測値の予測値です。手法により数値が異なります。精度を上げるには、行列因子分解のように種々のパラメータの利用が必要かもしれません。