協調フィルタリング昨日やったtanimoto係数によるerockrの検索キーワード間の類似度の計算の続き。昨日はjaccard係数よりtanimoto係数のほうが名前に親近感がもてるとかいって、tanimoto係数がいいとか言ったが、jaccard係数の方が得られる数値がイメージしやすい。jaccard係数は「和集合に対する積集合の割合」で表されるものなので、頭にベン図が思い浮かぶ。jaccard係数でerockrの表示ランキング上位20位間の類似度を考えてみた。種類の違う「エロ」まず際立って目立つのが「エロ」だ。全ての組み合わせで類似度が低いという評価が出ている。「エロ」だけは人間の名前ではなく、少し種類の違うデータなのでこれは妥当だろう。まさみ、深田恭子、ほしのあきこれらは知名度も高く、万人受けする人たちのようだ。浅く広くまんべんなく多くのユーザに見られている。めぐみ堀北真希以外は、知名度が低く、かなり排他的な傾向が強い。?結論この方法はロリ巨乳系の人たちの類似アイテムを探すのに向いているw類似度の分布Rで、erockrの検索キーワード上位20件の類似度(jaccard係数)の分布をステムアンドリーフで書いてみたところ、以下の通り。勉強amazonのレコメンデーションシステムのような、大量に蓄積したユーザが表示したり購入したデータから、ユーザの行動の傾向を統計学的に分析して、アイテムを推薦するような仕組みを、協調フィルタリングという。Wikipediaこれに興味を持ったことをtwitterに書いたら、「集合知プログラミング」という本を@clavicle_に紹介された*1ので、買ってみた。見る内容は僕のような統計とか久しく使ってないような人間でもとてもわかりやすく、とても興味を持った。erockrに協調フィルタリングを!そして勉強も兼ねてerockrに「このアイドルを見た人はこの人も見ています」というレコメンデーションを実装してみることにした。それで実はここ一週間ほど、以下のようなログを取ってデータを集めた。uid(擬似ユーザID((IPアドレスとUserAgentのハッシュの一部)))keyword(検索キーワード=アイドルの名前)これが大体25万行ほど集まった。erockrの場合、ユーザが見るアイテム(=アイドル)の数はとても多い(データセットが「疎」)ので、アイテムベースのレコメンデーションにする。レコメンデーションの流れ大体以下のような流れでレコメンドする。アイテム間の類似度を計算。類似度の評価方法はいくつかあり、ユークリッド距離、ピアソン相関係数、Jaccard係数、Tanimoto係数などがある。類似度で重み付けしてアイテムの推薦順番を決める。今日は類似度の計算を行ってみることにした。いろいろな方法があるが、erockrの場合、ログはユーザがアイテムを見たというデータしかないので、ページを見たら1ページを見てなかったら0ということになるので、ユークリッド距離、ピアソン相関係数よりも、Jaccard係数、Tanimoto係数などが向いている*2。ここではTanimoto係数を用いる*3。ここでMySQL上のログのテーブルから、計算に必要な表をつくる。上の表を作るために、以下のSQL文を投げる。0,1もっとスマートな書き方がありそうだけど、現状では1秒以内に帰ってくるし、期待通りに動くのでまぁいいやwCASE文便利だなぁ。今日はここまでやりました。青と赤は、それぞれ平均からの差が標準偏差*0.3以下、以上です。ここまでやってだんだん本を読んだ直後の感動が薄れて、そして、この表が出来てなんだか満足してしまったので、ここまでにしておきます。考察とかはまたそのうちやることにします。注意まだ20ページくらいしか読んでないので、ここらへん間違ってたらごめんなさい。本読んでたらコード書きたくなっちゃって我慢できなくて書いちゃいました。自分でも何やってるかわかんないなw上で、全体の平均と全体の標準偏差を出してるけど、色を塗るなら、各アイテムごとの平均と標準偏差でやらないと意味ないような気がしてきた。集合知プログラミングなんか読むと結構面白いですよ*2:たぶん。*3:Jaccard係数より名前に親近感が持てたからです。何が違うかはよく知りませんwTanimoto係数もJaccard係数も計算方法はほとんど同じなので後から簡単にかきかえられる。産経新聞(iPhone版)というのがあります。これは無料で産経新聞が紙の紙面の構成のまま読めるというとても便利なアプリです。今回、暇だったので、WireSharkというバケット解析ソフトでiPhoneのウェブとの通信を盗聴?してみました。産経新聞のiPhoneアプリの仕組み最新の新聞データを得る(current_edition.xml)バケット解析の結果、産経新聞アプリを起動するとまず、決まったURLにアクセスする。ここには最新の紙面の情報があるxmlのURLが書いてある。XMLFileName=&quot;2010_04_10_i.xml&quot;/&gt;その日の新聞の目次(日付/日付_i.xml)上のxmlを見て、この日の新聞の何面にどの情報が書いてあるかとかの情報を得る。なんかxmlだと新聞社のウェブサイトよりとてもセマンティックって感じ。次は上のxmlからページの画像の格納されているURLを示すxmlにアクセスする。&lt;Links/&gt;&lt;/Pages&gt;新聞紙面の画像データ実はこれでもうすべての画像データにアクセスできるようになった。画像データの基本のURLはhttp://www.sankei.co.jp/netview/iphone/2010_04_10_i/pages_images/page12984_netviews1958/lv1_0_0.jpgである。あとは末尾のファイル名を変えればよい。下にファイル名と内容を一覧にしてみた。ファイル名内容lv1_0_0.jpgページ全体lv2_0_0.jpgズームした左上lv2_0_1.jpgズームした左下lv2_1_0.jpgズームした右上lv2_1_1.jpgズームした右下lv3_0_0.jpgもっとズームした左上lv3_0_1.jpgもっとズームした中央lv3_0_2.jpgもっとズームした右上......lv3_3_3.jpgもっとズームした右下なるほど。ズームのレベルに応じて3つのファイルに分けてるんですね。まとめというわけで、これを利用すれば別にiPhoneアプリ使わなくても産経新聞がPC上で読めるアプリも簡単に作れそうですね。ウェブアプリとかも作れそうですね。ここらへんもっとちゃんとガードされてるのかと思いましたが、意外に寛容でした。考えても著作権的にアウトなので、そんなことする人はいないと思ってるんでしょうね。パスワードはないにしてもアプリによる正規のアクセスかどうか認証する*1ぐらいはすればいいのにという気はします。いうのが一切ないので不正アクセス防止法とかにはひっかからないはず。パケット解析のおもしろさがわかる(?)、産経新聞のiPhoneアプリはどういう仕組み?っていう話でした。05:12)結局書いちゃった。ITを学ぶ大学生「こに」の創作・妄想スペースです。最新タイトルはてなブログに移転しました。分析」でGoogle検索結果1位に![whotwi]中国語繁体字に対応しました![whotwi]【解消】whotwi障害情報(完全に分析できない件について)[whotwi]【解消】whotwi障害情報(断続的にアクセスできない件について)[whotwi]【解消】whotwi障害情報(片思い、両思い一覧が取得できなかった件について)[whotwi]ユーザ分析の結果ページのPVをユーザごとに記録、表示し始めました。[whotwi]【解消】whotwi障害情報xgettextで「非アスキー文字列」エラーが出る場合の対処方法[whotwi]日本語ハッシュタグに対応しました。