https://script.google.com/macros/s/AKfycby4ZngYKm9gxHG8vtnZIOk98E6C5q3zR1JyQ_NaNw/exec
ゲームやスポーツなどで、直接対戦した事がなくても勝率などはある程度推定できるハズで、その辺りを1次元の量で表現できるようにしたものです。端的には、ロジスティック回帰っぽくなって、Ra,Rbをレートとすると、aがbに勝つ確率を
logit( -(Ra-Rb)*k)
※ただしlogit(x)=1/(1-exp(-k*x))
となるようにkではなく各Ri (iは競技の参加者)を調整します。
卓球にハマったので作ってみました。google drive上で無料で動くので使いたい人がいたら配布します。
ちなみに、Xboxとかで使われてる(らしい)TrueSkillsをどっかでみた解説は階層モデルをおそらくバッチ更新できるようにグラフィカルモデルの方法で構成した感じだった。勝手にベイズの文脈で解釈してみると
・レートRはベイズらしく特定の値ではなくたとえば正規分布
R~Norm(muR,sigma_mu)
・パフォーマンスもある、つまり
Peformance~Norm(R,sigma)
あとは同じ
Prob(win(Pa to Pb))=sigmoid(Pa-Pb)
その他、muRがmuR_tと時間変化すると成長やスランプが感じられて良く、おそらく状態空間ぽくなる。
更に、卓球なんかだとスキルベクトルvを
v_it=(フォアハンド、バックハンド、サーブ・・・)
項目は詳しい人に聞かないとわからないが(もしかしたらもっと測定可能な回転量、反射速度みたいな変数の方が良いかも)、こんな感じでi番目の人の時刻tにおける「スキル」を状態変数として考え
観測方程式?として
win(v_it,v_jt)~sigmoid(⊿v) (1)
状態遷移は人数文だけ vの次元を立てに並べた
V_t+1=T*V_t+eps
みたいな複雑な複雑な状態空間?で やるとどーなんですかね。