【Pandas】映画のレコメンデーション機能を作る(その2)

 

前回の記事では、映画を評価した2人のユーザのユークリッド距離を計算するところまでいきました。

 

ただ、ユークリッド距離だと、出力される値の範囲が分かりません。

例えば距離を計算して出てきた値によって相関が高いのか低いのかが判断できないのです。

 

そこで映画を見た二人の相関が高いかどうかを調べる指標としてピアソン相関を使います。

ピアソン相関であれば出力が-1から1の範囲なので、出力が1に近ければ相関が高いと判断できます。

 

まずこの関数を実装するところから始めようと思いやーす。

 

スポンサーリンク

 

ピアソン相関

 

やることはシンプルで、

  • 二人の共通の映画を取り出す
  • 取り出した映画に対する二人の評価を取得する
  • それらのピアソン相関値を求める

 

pandasの中にピアソン相関を求める関数があるのでそれを使います。

 

コードを書くと以下の通り。

 

上記の関数を使って100人の相関値を計算してみましょう。自分と相関のある人Top5を求めてみます。

たまに、ピアソン相関の返り値がnanで返ってくるのでそういうのは無視して次に進んでいます。

出力は以下の通り。

 

23さんと相関の高い人は、順番に61,41,21さんってことが分かりました。

ここまではサクサクと進みました。

オススメ映画を取得する

 

オススメ映画を取得するにはどうすれば良いでしょうか。

他の人の評価を足し合わせて高い順にレコメンドするだけで良いですが、もう少し工夫して以下のような作戦をとります。

「自分と相関が高い人を重視する」。

つまり、他の人がした評価に相関値を掛け合わせた値を評価指標として使います。

自分との相関が0.1の人の評価「5」と0.9の人の評価「5」では、後者の方がポイントが高いということです。

 

Aさんにレコメンドする映画を探しているとして、

  1. Bさんが観た映画リストの中でAさんが観ていない映画のリストを取得する
  2. その中の映画に対して、Bさんの映画の評価と、AさんとBさんの相関値をかけたものをその映画のポイントとする
  3. Cさん以降も同じ処理を繰り返して、ポイントを加算していく。

 

こんな感じのコードを書いていきたいと思います。

 

出力は以下の通り。

 

こんな感じ!

おわり。

参考

https://towardsdatascience.com/building-a-movie-recommendation-engine-using-pandas-e0a105ed6762