レコメンドやってみた
先々月入社した大野です。
今回自分の関わっているサービスでレコメンドしたら良いんじゃないかなというところがあり、軽く調べてみました。
だいぶ古い本ですが、2章の「推薦を行う」で簡単なレコメンドの解説があったので、まずはこのアルゴリズムを試してみたいと思います。
今回試してみるアルゴリズムは2つで ・ ユークリッド距離 ・ ピアソン相関 の2つになります。
2つとも推薦したい対象のスコアを出して、距離を測るような感じになります。 実際に本のサンプルを実行してみます。 サンプルはオライリー様の原書からダウンロードできます。
データはこんな感じになっています。 映画の評価が入っている感じですね。
ユークリッド距離 このサンプルでは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の波が来ているようです。