Factorization Machines
with R
Shota Yasui
@housecat442
Factorization Machines(FMs)とは?
● ちゃんと知りたい人は下記の論文を参照
○ Factorization machines
○ S Rendle
○ 2010 IEEE International Conference on Data Mining, 995-1000
○ http://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
● Regression, Classification, Rankingに使える機械学習モデル。
● 感覚的には「投入した特徴全ての組合せを加味してくれるモデル」。
● Kaggleの”Display Advertisment Challenge”で優勝したチームがGBDTとスタッキ
ングさせて使った。
Factorization Machinesのモデル
global bias
普通の回帰式での
intercept
普通の回帰部分
n個の特徴。
全パターン交互作用項
の近似部分
Wがpositive definiteなmatrixであれば、十分な
サイズのkを持つmatrix,Vによって以下の様に分
解できる。
W = V・V^t
分解してモデルに代入すると求めるパラメーター
の数がn*kへと減るので計算が楽になる。
Rでの扱い方
● libFMexeパッケージが利用可能
● c++で実装されたlibFMをRから使うためのパッケージ。
● 基本的な使い方は以下の流れ。
a. libFMをインストール
b. libFMexeパッケージをgithubからインストール
c. R内でlibFMの場所を指定して、libFM関数を使う。
libFMのインストール
● http://www.libfm.org/ へ行きダウンロード
○ macであれば解凍して、cd ./解凍したディレクトリ/libfm-1.43.srcでディレクトリ
を移動してから make all
○ windowsは解凍したらそのまま使える。
● libFMexeのインストール
○ devtoolsがインストールされたRで以下を実行する。
○ devtools::install_github("andland/libFMexe")
● 準備は一旦これでおk
競馬の予測をしてみる
● データ:2014/3-2016/3のデータを地方中央問わず。
○ あるサイトからスクレイピングしました汗
● 1, 2着を1とし、それ以降を0とした分類問題として解く。
● オッズの人気による予測をベースラインとして、オッズ予測よりも精度の高い分類
器を作りたい。
● FMはデータ上で起きていなかった変数の組み合わせに対してもパラメーターが近
似されている。
● なので、今までに起きていなかった馬の組み合わせでのレースにもちゃんと予測値
を出せる。。。ハズ。
データの準備
sparseMatrix形式でデータを準備。
今回はあらかじめ整形してある。
labelにしたいデータだけ取り出して、
データセットからは削る。
sampleを使ってテストデータのフラグ
を立てる。
sp_matrix_libFMでsparseMatix形式の
データをlibFMで読み取り可能な形式に変
換する。
data.frameからも変換できる関数がある
が圧倒的に遅い。
学習
pathを通すのが面倒なので、 exe_locを
使ってlibFMの場所を指定。
kの大きさの指定
学習時のiteration
学習taskの種類
regression = “r”
● libFMの結果としてtest_setに対する予測値が帰ってくる。
結果
オッズの人気上位2位が勝つと想定した時の結果
precision = 3337/(3555+3337) = 0.48
FMで予測し、閾値をtraining_dataでのlabelの平均と
した場合の結果。
precision = 8965/(8965+5911) = 0.6
AUROCだと0.6程度。。。泣
● ベースラインとなる戦略よりはマシな戦略を立てられそう。
● でもしょぼい。
● ちなみにxgboostでやったらAUROCは0.7程度。。。orz
● 実際に馬券を買う事を考えるとこの評価では正直微妙。
まとめ
● libFMはRからでも使える。
● まだ起きてない組み合わせへの予測は魅力的。
● けどとりあえずやってみたからといって何か良い結果が出るわけでもない。
● あと、競馬で儲けようと思ったら予測を当てるだけでなく、当たった時にリターンが
大きくなるような買い方も考えなければいけない。
● 人生は困難でいっぱい。
(参考)
● libFMexeを動かすまで
○ http://qiita.com/siero5335/items/8a8eb8de8633041d865a
● Rで競馬予想をやってみた
○ https://drive.google.com/file/d/0BzS0JN_XV85MVzFzSWszdTlwckk/view
● libFMexe(github)
○ https://github.com/andland/libFMexe
Enjoy!

Factorization machines with r