Recommendifyで気軽にレコメンドエンジンに触れてみる
変態アドベントカレンダーの19日目です。
今日はRecommendifyで気軽にレコメンドエンジンに触れてみたいと思います。
※コサイン類似度などの小難しい話は一切登場しません。
- レコメンドエンジンとは
- Recommendifyで出来ること
- Redisのインストールと起動
- Recommendifyのインストール
- トラッキングデータの登録
- レコメンドデータの取得
1. レコメンドエンジンとは
Amazonで「この商品を買った人はこんな商品も買っています」とユーザに商品をおすすめしてくるシステムのことです。何かを見た/クリックした/買ったといった情報を使用して、他のサイトやユーザーに対して商品のおすすめを行います。
2. Recommendifyで出来ること
RecommendifyとはRubyとRedisベースのレコメンドエンジンです。
アイテム間の類似性を計算することでレコメンデーションを行えます、
3. Redisのインストールと起動
既にRedisが入っている人も多いかと思いますが(笑)、まだの人はインストールしましょう。
macな人はhomebrewでインストールしてもいいし、そうでない人はソースから入れましょう。
for mac
$ brew install redis
for otherwize
$ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ cd redis-stable $ make && make install
起動させます。
$ redis-server
※停止するときは 別ターミナルから redis-cli shutdown します
一応テストとしてピンポンしておきましょう。
$ redis-cli ping pong
試しにデータを出し入れしてみます。
$ redis-cli set mykey hoge OK $ redis-cli get mykey "hoge"
4. Recommendifyのインストール
gemでインストールします。
$ gem install recommendify
※うまく入らない場合はgem updateしてみるとうまくいくかもしれません。
5. トラッキングデータの登録
ユーザがそれぞれ複数のアイテムを購入をしたとした場合のサンプルコードです。
# -*- encoding: utf-8 -*- require 'recommendify' require 'redis' Recommendify.redis = Redis.new class Recommender < Recommendify::Base max_neighbors 10 input_matrix :order_items, :similarity_func => :jaccard, :weight => 5.0 end recommender = Recommender.new recommender.order_items.add_set("daiksyさん", ["ふつうの変態プログラミング", "変態が知るべき97のこと", "変態サムライ"]) recommender.order_items.add_set("irofさん", ["ふつうの変態プログラミング", "変態サムライ"]) recommender.order_items.add_set("kuchitamaさん", ["変態が知るべき97のこと", "やさしい変態入門"]) recommender.process!
6. レコメンドデータの取得
「変態が知るべき97のこと」というアイテムと他のアイテムの類似度を調べてみます。
recommender.for("変態が知るべき97のこと").each do |recommended_product| puts "#{recommended_product.item_id} 類似度:#{recommended_product.similarity}\n" end
結果
やさしい変態入門 類似度:2.5変態サムライ 類似度:1.6666 ふつうの変態プログラミング 類似度:1.6666
ということで、「変態が知るべき97のこと」に類似している本は「やさしい変態入門 」だということが分かりました。
簡単に利用できますね!
利用シーンについて
RecommendifyはRubyで書かれているため、既存の非Rubyプロダクトに組み込めないなーと思うかもしれません。
1日1回実施されるようなバッチアプリケーションとして、行動履歴データからレコメンドデータを生成するようなものを作るのもありだと思います。
使ったことはありませんが、本格的なレコメンドを行うには Apache Mahout を使うのがよさそうです。
明日は@Posauneさんです!お楽しみに。
参考URL
Redis: http://redis.io/
Recommendify: https://github.com/paulasmuth/recommendify