一昨日の相対評価算出法の計算の考え方。
このエントリはhttp://kashi.dip.jp/~kashi/rating/の劣化版です。
前回書いたこの表があらわしてるのは、作品A、B、Cがあるとき、
\ | A | B | C |
A | \ | 3 | 0 |
B | 1 | \ | 2 |
C | 0 | 3 | \ |
- 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くらい
位じゃないかな?あってるかどうかはしらん。