レーティングの妄想

 ここで言うレーティングは、ゲームのマッチングとかで使う、勝敗から参加者の強さを数字で評価するアレの事を指す。
 個人的には、商品レビューとか作品レビューとかでも、五つ星とかの絶対評価より、作品同士の相対評価を勝敗とみなして、レーティングしてそれを評価値と用いてほしいと常々思っている。
 内容的には概ねEloとかのパクリ。Eloとかだと、レートが初期値から実力に見合った値になるまで時間が掛かるから、そこをどうにかしてほしいと思っていたら、こんなん出来ましたって感じ。

基本的なやり方

 算出に使う数字は2つ

  • 直近100戦分の勝率
  • 直近100戦分の相手のレートの平均値

 対戦数が100なのはなんとなく。減らせば精度は落ちるけど強さの変化への追従が早くなり、増やせばその逆になる。

レーティング値=相手レート平均+log10(勝率/(1-勝率))*400

 式はこんな感じ。対戦相手の平均レートが1500、勝率を0.6とすると

レーティング値=1500+log10(0.6/(1-0.6))*400
レーティング値=1500+log10(0.6/0.4)*400
レーティング値=1500+log10(1.5)*400
レーティング値=1500+約70
レーティング値=約1570

となる。

勝率が1や0の場合

 勝率が1や0だと、logの部分が計算できなくなっちゃうので、勝率のデータにはあらかじめ引き分けを1戦分ダミーとして追加する。
 実際の勝率が4勝0敗だった場合、レートの計算では4勝1分0敗扱いで、勝率は4.5勝÷5戦=0.9とする。

勝ったのにレートが下がる問題

 対戦者同士のレート差が大きい組み合わせで、レートが高いほうが勝ち、レートが低い方が負けた時、勝った方のレートが下がり、負けた方のレートが上がったりすることがあるみたい。