レコメンドやってみた

レコメンドやってみた

先々月入社した大野です。

今回自分の関わっているサービスでレコメンドしたら良いんじゃないかなというところがあり、軽く調べてみました。

url.jpg だいぶ古い本ですが、2章の「推薦を行う」で簡単なレコメンドの解説があったので、まずはこのアルゴリズムを試してみたいと思います。

今回試してみるアルゴリズムは2つで   ・ ユークリッド距離   ・ ピアソン相関 の2つになります。

2つとも推薦したい対象のスコアを出して、距離を測るような感じになります。 実際に本のサンプルを実行してみます。 サンプルはオライリー様の原書からダウンロードできます。

データはこんな感じになっています。 映画の評価が入っている感じですね。 image

ユークリッド距離 このサンプルではsim_distanceという関数で書かれているので

# python
>>> import recommendations
>>> recommendations.sim_distance(recommendations.critics, 'Lisa Rose', 'Gene Seymour')
0.14814814814814814

みたいな結果になります。 この二人の距離が0.14814814814814814だったということですね。

ピアソン相関 このサンプルではsim_pearsonという関数で書かれています。

# python
>>> import recommendations
>>> recommendations.sim_pearson(recommendations.critics, 'Lisa Rose', 'Gene Seymour')
0.39605901719066977

とアルゴリズムによって随分異なることがわかります。

次にどれがオススメか調べてみたいと思います。 getRecommendationsという関数が用意されているのでこれを使います。

ユークリッド距離

# python
>>> import recommendations
>>> recommendations.getRecommendations(recommendations.critics, 'Toby', similarity=recommendations.sim_distance)
[(3.5002478401415877, 'The Night Listener'), (2.7561242939959363, 'Lady in the Water'), (2.461988486074374, 'Just My Luck')]

ピアソン相関

# python
>>> import recommendations
>>> recommendations.getRecommendations(recommendations.critics, 'Toby', similarity=recommendations.sim_pearson)
[(3.3477895267131013, 'The Night Listener'), (2.8325499182641614, 'Lady in the Water'), (2.5309807037655645, 'Just My Luck')]

アルゴリズムも点数も異なるもののTobyさんにはThe Night Listenerをオススメしてますね!

と、簡単ではありますがレコメンドについてやってみました! 最近ではMatrix Factorizationやベイズを使用したレコメンドが主流みたいなので、時間ができたらそちらもやってみたいです。 AmazonのDSSTNEはDeepLearningのAutoencoderを使用してアイテム推薦を行うらしく、レコメンドにもDeepLearningの波が来ているようです。