グリコレーティング

グリコレーティング (Glicko rating) は、チェスや囲碁のようなゲームにおいてプレイヤーの強さを評価（レーティング）するためのアルゴリズムである。マーク・グリックマンによりイロレーティングを改善するべく発明されたもので、当初はチェスのランキングに用いることが意図されていた。レーティングの定義や基準はイロレーティングと同様である。グリコレーティングの最大の特徴は、レーティング計算時にレーティング偏差 (ratings deviation, RD) と呼ばれるレーティングの信頼性を図る手法が導入されたことである。 グリコレーティング並びに後述のグリコ2レーティングはパブリックドメインとして公開されており、多くのオンライン上のゲームサーバーにおいて用いられている（例、Lichess, Free Internet Chess Server, Chess.com, Counter-Strike: Global Offensive（英語版）, Guild Wars 2（英語版））。グリコレーティングの数式は、グリックマンのウェブサイトにて公開されている。 RDはプレイヤーのレーティングの正確さを表しており、RDは標準偏差とイコールである。例えば、レーティングが1500、RDが50のプレイヤーの場合、その実際の強さは95%の確率で1400から1600（1500から標準偏差の2倍）の間にある。この範囲はレーティングにRDの2倍を加算・減算することで求められる。ゲーム後に変動するレーティングはRDに依存しており、RDが小さくなれば変動もより小さく（レーティングは既に正確に評価されているため）、逆にRDが大きい場合は変動も大きくなる（情報が足りず、真のレーティングがまだ判明していないため）。RD自身もゲームをプレイするごとに減少していくが、ゲームをプレイしない期間が続くとゆっくりと上昇する。 グリコ2レーティング (Glicko-2 rating) は、グリコレーティングをさらに改良したもので、新たにレーティング変動率 (rating volatility, σ) が導入されている。グリコ2レーティングを僅かに改造したバージョンが、オーストラリアチェス連盟（英語版）により実装されている。 以下の算出方法はグリコレーティングのものである。グリコ2レーティングにおいては異なる。 プレイヤーがまだレーティングされていない場合、初期値として通常はレーティングが1500、RDは350を使用する。 新しいレーティング偏差 ( R D {\displaystyle RD} ) は古いレーティング偏差 ( R D 0 {\displaystyle RD_{0}} ) を使って求められる。 R D = min ( R D 0 2 + c 2 t , 350 ) {\displaystyle RD=\min \left({\sqrt {{RD_{0}}^{2}+c^{2}t}},350\right)} t {\displaystyle t} は最後にゲームをプレイしてからの経過時間（レーティング期間）、350 はまだレーティングされていないプレイヤーのRDである。もし一つのレーティング期間に複数のゲームが発生した場合、それらは同時に起きたものとして扱われる。レーティング期間の単位はゲームが行われる頻度によって決められ、数か月にわたることもあれば数分程度のこともある。定数 c {\displaystyle c} はプレイヤーのスキルが、経過時間に応じて不確かになっていくことに基づく。この値は、データ分析によって算出するか、またはプレイヤーのRDが未レーティングの人のRDと同程度になるのに必要と思われる時間の長さから推定することができる。たとえば標準的なプレイヤーのレーティング偏差が50で、プレイヤーのレーティング偏差が100レーティング期間で初期値の350に戻ると仮定した場合の定数 c {\displaystyle c} は以下のように求められる。 350 = 50 2 + 100 c 2 {\displaystyle 350={\sqrt {50^{2}+100c^{2}}}} から ( 350 2 − 50 2 ) / 100 = c {\displaystyle {\sqrt {(350^{2}-50^{2})/100}}=c} m回の一連のゲーム後の新レーティングは、以下のように求められる。 r = r 0 + q 1 R D 2 + 1 d 2 ∑ i = 1 m g ( R D i ) ( s i − E ( s | r , r i , R D i ) ) {\displaystyle r=r_{0}+{\frac {q}{{\frac {1}{RD^{2}}}+{\frac {1}{d^{2}}}}}\sum _{i=1}^{m}{g(RD_{i})(s_{i}-E(s|r,r_{i},RD_{i}))}} 各値は以下となる。 g ( R D i ) = 1 1 + 3 q 2 ( R D i 2 ) π 2 {\displaystyle g(RD_{i})={\frac {1}{\sqrt {1+{\frac {3q^{2}(RD_{i}^{2})}{\pi ^{2}}}}}}} E ( s | r , r i , R D i ) = 1 1 + 10 ( g ( R D i ) ( r − r i ) − 400 ) {\displaystyle E(s|r,r_{i},RD_{i})={\frac {1}{1+10^{\left({\frac {g(RD_{i})(r-r_{i})}{-400}}\right)}}}} q = ln ⁡ ( 10 ) 400 = 0.00575646273 {\displaystyle q={\frac {\ln(10)}{400}}=0.00575646273} d 2 = 1 q 2 ∑ i = 1 m ( g ( R D i ) ) 2 E ( s | r , r i , R D i ) ( 1 − E ( s | r , r i , R D i ) ) {\displaystyle d^{2}={\frac {1}{q^{2}\sum _{i=1}^{m}{(g(RD_{i}))^{2}E(s|r,r_{i},RD_{i})(1-E(s|r,r_{i},RD_{i}))}}}} r i {\displaystyle r_{i}} 各対戦相手のレーティング s i {\displaystyle s_{i}} 各ゲームの結果。勝利が 1、引き分けが 1 2 {\displaystyle {\frac {1}{2}}} 、敗北が 0 事前のRDの計算においては、プレイヤーのスキルを測定できなかった期間（対局しなかった期間）の不確実性を表すためにRDを増加させた。いくつかのゲームを完了した後は、確実性が増したとして逆にRDを減少させる。 R D ′ = ( 1 R D 2 + 1 d 2 ) − 1 {\displaystyle RD'={\sqrt {\left({\frac {1}{RD^{2}}}+{\frac {1}{d^{2}}}\right)^{-1}}}} ^ “Finding the perfect match”. 16 January 2015閲覧。 ^ http://www.glicko.net/glicko.html イロレーティング TrueSkill - マイクロソフトがグリコレーティングのアイデアをもとに開発したアルゴリズム Mark Glickman's World - Glicko Ratings （英語） RobKohr/glicko - JavaScriptグリコ2実装 mmai/glicko2js - JavaScriptグリコ2実装 sublee/glicko2 - Pythonグリコ2実装 PlayerRatings - Rグリコ実装