cicindelaの設定も終わったところで、
実際にレコメンドさせてみたいと思います。

レコメンドをするためにはログの収集が必要です。
前回つくったpickの設定でいくつかデータをcicindelaに食べさせてみたいと思います。

今回はアイテムについて購買データから分析して類似アイテムを出すレコメンドを利用します。
ですので「どのユーザがどのアイテムを購入したか。」ということを想定してデータ作成をします。
試しにユーザのは6名、アイテム数は10個ということに定義してみましょう。
アイテムはわかりやすくするために商品名も定義してみます。
itemID1:コミック 鋼の錬金術師 21巻
itemID2:コミック もやしもん 7巻
itemID3:コミック ああっ女神さまっ 38巻
itemID4:ゲーム 白騎士物語 PS3
itemID5:ゲーム ウイニングイレブン2009 PS3
itemID6:ゲーム クロノトリガー NintendoDS
itemID7:DVD ゲームセンターCX Vol.5
itemID8:DVD マクロスフロンティア 5巻
itemID9:DVD のだめカンタービレ 巴里編 1巻
itemID10:DVD 喰霊-零- 1巻

こんな感じで。
まぁ、最近僕が買った漫画・ゲーム・DVDのリストから頂戴しました(笑)
これをItemIDと紐づける商品マスタとします。

次に上記の商品マスタから、ユーザに購買データを紐づけます。
1のユーザは漫画好きです。
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=1&item_id=1
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=1&item_id=2
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=1&item_id=3

2のユーザはゲーム好きです。
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=2&item_id=4
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=2&item_id=5
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=2&item_id=6
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=2&item_id=7

3のユーザはアニメDVDが好きです。
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=3&item_id=8
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=3&item_id=9
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=3&item_id=10

4のユーザはマニアックなものが好きです。
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=4&item_id=3
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=4&item_id=4
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=4&item_id=7
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=4&item_id=10

5のユーザは比較的ライトです。
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=5&item_id=1
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=5&item_id=6

6のユーザは大人買いです。
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=1
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=2
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=3
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=4
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=5
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=6
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=7
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=8
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=9
http://<<ドメイン>>/cicindela/record?set=pick&op=insert_pick&user_id=6&item_id=10

上記で定義したURLをGETコマンドや直接ブラウザなどから叩きます。
すると、cicindelaのpicks_bufferテーブルに下記のようなデータが入ります。
mysql> select * from picks_buffer;
+----+---------+--------------+---------+--------------+-----------+---------------------+
| id | user_id | user_char_id | item_id | item_char_id | is_delete | timestamp |
+----+---------+--------------+---------+--------------+-----------+---------------------+
| 45 | 1 | NULL | 1 | NULL | 0 | 2008-12-28 18:44:40 |
| 46 | 1 | NULL | 2 | NULL | 0 | 2008-12-28 18:44:40 |
| 47 | 1 | NULL | 3 | NULL | 0 | 2008-12-28 18:44:40 |
| 48 | 2 | NULL | 4 | NULL | 0 | 2008-12-28 18:44:41 |
| 49 | 2 | NULL | 5 | NULL | 0 | 2008-12-28 18:44:41 |
| 50 | 2 | NULL | 6 | NULL | 0 | 2008-12-28 18:44:41 |
| 51 | 2 | NULL | 7 | NULL | 0 | 2008-12-28 18:44:41 |
| 52 | 3 | NULL | 8 | NULL | 0 | 2008-12-28 18:44:41 |
| 53 | 3 | NULL | 9 | NULL | 0 | 2008-12-28 18:44:41 |
| 54 | 3 | NULL | 10 | NULL | 0 | 2008-12-28 18:44:41 |
| 55 | 4 | NULL | 3 | NULL | 0 | 2008-12-28 18:44:41 |
| 56 | 4 | NULL | 4 | NULL | 0 | 2008-12-28 18:44:41 |
| 57 | 4 | NULL | 7 | NULL | 0 | 2008-12-28 18:44:41 |
| 58 | 4 | NULL | 10 | NULL | 0 | 2008-12-28 18:44:41 |
| 59 | 5 | NULL | 1 | NULL | 0 | 2008-12-28 18:44:41 |
| 60 | 5 | NULL | 6 | NULL | 0 | 2008-12-28 18:44:42 |
| 61 | 6 | NULL | 1 | NULL | 0 | 2008-12-28 18:44:42 |
| 62 | 6 | NULL | 2 | NULL | 0 | 2008-12-28 18:44:42 |
| 63 | 6 | NULL | 3 | NULL | 0 | 2008-12-28 18:44:42 |
| 64 | 6 | NULL | 4 | NULL | 0 | 2008-12-28 18:44:42 |
| 65 | 6 | NULL | 5 | NULL | 0 | 2008-12-28 18:44:42 |
| 66 | 6 | NULL | 6 | NULL | 0 | 2008-12-28 18:44:42 |
| 67 | 6 | NULL | 7 | NULL | 0 | 2008-12-28 18:44:42 |
| 68 | 6 | NULL | 8 | NULL | 0 | 2008-12-28 18:44:42 |
| 69 | 6 | NULL | 9 | NULL | 0 | 2008-12-28 18:44:42 |
| 70 | 6 | NULL | 10 | NULL | 0 | 2008-12-28 18:44:42 |
+----+---------+--------------+---------+--------------+-----------+---------------------+
26 rows in set (0.00 sec)

次にこのバッファにあるデータをFLUSHするバッチファイル
/home/cicindela/bin/flush_buffers.plをKICKします。
するとpicks_bufferにあったデータはpicksにマージされ、バッファから削除されます。
mysql> select * from picks;
+---------+---------+---------------------+
| user_id | item_id | timestamp |
+---------+---------+---------------------+
| 1 | 1 | 2008-12-28 18:44:40 |
| 1 | 2 | 2008-12-28 18:44:40 |
| 1 | 3 | 2008-12-28 18:44:40 |
| 2 | 4 | 2008-12-28 18:44:41 |
| 2 | 5 | 2008-12-28 18:44:41 |
| 2 | 6 | 2008-12-28 18:44:41 |
| 2 | 7 | 2008-12-28 18:44:41 |
| 3 | 8 | 2008-12-28 18:44:41 |
| 3 | 9 | 2008-12-28 18:44:41 |
| 3 | 10 | 2008-12-28 18:44:41 |
| 4 | 3 | 2008-12-28 18:44:41 |
| 4 | 4 | 2008-12-28 18:44:41 |
| 4 | 7 | 2008-12-28 18:44:41 |
| 4 | 10 | 2008-12-28 18:44:41 |
| 5 | 1 | 2008-12-28 18:44:41 |
| 5 | 6 | 2008-12-28 18:44:42 |
| 6 | 1 | 2008-12-28 18:44:42 |
| 6 | 2 | 2008-12-28 18:44:42 |
| 6 | 3 | 2008-12-28 18:44:42 |
| 6 | 4 | 2008-12-28 18:44:42 |
| 6 | 5 | 2008-12-28 18:44:42 |
| 6 | 6 | 2008-12-28 18:44:42 |
| 6 | 7 | 2008-12-28 18:44:42 |
| 6 | 8 | 2008-12-28 18:44:42 |
| 6 | 9 | 2008-12-28 18:44:42 |
| 6 | 10 | 2008-12-28 18:44:42 |
+---------+---------+---------------------+
26 rows in set (0.00 sec)

これで一時定義ができあがったので、次にレコメンドデータの生成バッチをKICKします。
/home/cicindela/bin/batch.pl
※これがバッチの初回起動の場合は2回キックしてください。

そうすることで、データを読み取りレコメンドデータが生成されます。
item_similarities_onlineがレコメンド用のデータになるようです。
今回食べさせたログだと下記のような感じです。
mysql> select * from item_similarities_online;
+----------+----------+------------------+
| item_id1 | item_id2 | score |
+----------+----------+------------------+
| 4 | 7 | 1.58496250072116 |
| 7 | 4 | 1.58496250072116 |
+----------+----------+------------------+
2 rows in set (0.00 sec)

今回のパターンでは、
itemID4(ゲーム 白騎士物語 PS3)とitemID7(DVD ゲームセンターCX Vol.5)の関連性が作られたようですね。

このレコメンドは下記コマンドで取得されます。
$ GET 'http://<<ドメイン>>/cicindela/recommend?set=pick&op=for_item&item_id=4'
7

$ GET 'http://<<ドメイン>>/cicindela/recommend?set=pick&op=for_item&item_id=7'
4

残念ながら他のアイテムについてはもう少しデータが必要なようですね。
レコメンドフィルタの設定も見直せば変化がでるかもしれません。
次回はそのあたりを調べてみようと思います。