一昨日の相対評価算出法の計算の考え方。

このエントリはhttp://kashi.dip.jp/~kashi/rating/の劣化版です。
前回書いたこの表があらわしてるのは、作品A、B、Cがあるとき、

  • Aが、Bより好みと答えた人が3人
  • Bが、Aより好みと答えた人が1人
  • Bが、Cより好みと答えた人が2人
  • Cが、Bより好みと答えた人が3人

の4つ。この四つを、それぞれ式に変換すると、

  • 3 * log( 1 + exp( -k( Xa - Xb ) ) )
  • 1 * log( 1 + exp( -k( Xb - Xa ) ) )
  • 2 * log( 1 + exp( -k( Xb - Xc ) ) )
  • 3 * log( 1 + exp( -k( Xc - Xb ) ) )

 こんな感じ。 logは対数関数、expは指数関数、kはレーティングのスケールを決める数字。Xnはそれぞれの作品の評価値を表します。次にレーティングのスケールを決めます。
レーティングのスケールってのは「レーティングが高い者と低い者が勝負をした時、その差がnなら、高い者が勝つ確率はm/m+1になると考える」ってことです*1。このnとmをテキトーに決めることで、レーティングのスケールが決まります。だいたい標準的だと、「レーティングが高い者と低いものが勝負をした時、その差が400なら、高い者が勝つ確率は10/11になると考える」って設定なようです。だからここでもこれにしたがいます*2
 これに基づいて式を作るとこうなります。

  • 3 * log( 1 + 10^( -0.0025( Xa - Xb ) ) )
  • 1 * log( 1 + 10^( -0.0025( Xb - Xa ) ) )
  • 2 * log( 1 + 10^( -0.0025( Xb - Xc ) ) )
  • 3 * log( 1 + 10^( -0.0025( Xc - Xb ) ) )

 expのところにさっきのmが来て、kにはnの逆数が入りました。これのXnに適当な数字を入れてgoogleに突っ込めば答えが出てくる状態です。これで後は評価値を計算するだけです。
 このレーティングは相対値なので、なんかテキトーに絶対の基準を作る必要があります。とりあえず、「作品Aの評価値は常に1000」としておきます。つまりこうなる。

  • 3 * log( 1 + 10^( -0.0025( 1000 - Xb ) ) )
  • 1 * log( 1 + 10^( -0.0025( Xb - 1000 ) ) )
  • 2 * log( 1 + 10^( -0.0025( Xb - Xc ) ) )
  • 3 * log( 1 + 10^( -0.0025( Xc - Xb ) ) )

 で、あとは、この4つの式の答えの合計が一番小さくなるXbと、Xcの値を探せば、それがそれぞれ作品BとCの評価値になるわけです。簡単でしょう?まぁどうやって見つけるかの方法は俺も良くわかんないんだけど。
 ちなみにこの場合

  • Xa=1000
  • Xb=809くらい
  • Xc=880くらい

 位じゃないかな?あってるかどうかはしらん。

*1:正確に書くと、推定勝率=1/(1+m^((相手のレート-自分のレート)/n))

*2:たとえばこれを、将棋なんかの段級位っぽくしたいなら、nを1、mを3とかにすればそれっぽくなるんじゃないかな。これだと1段上の人の勝率は3/4になる、って感じ。