글리코 평점 시스템

**글리코 평점 시스템** 및 **글리코-2 평점 시스템**은 체스 및 바둑과 같은 2인 게임에서 플레이어의 실력을 평가하는 방법이다. 엘로 등급 시스템을 개선하기 위해 Mark Glickman에 의해 발명되었으며 처음에는 체스 평점 시스템에 주로 사용되었다. 측정에 대한 Glickman의 주요 기여는 RD(Ratings Deviation, 평점 편차)라는 "평점 신뢰도"의 도입이다.

## 개요
글리코 및 글리코-2 평점 시스템은 모두 공개 도메인(public domain)에 있으며 온라인 게임 서버 (예: Pokémon Showdown, Lichess, Free Internet Chess Server, Chess.com, OGS(Online Go Server), 카운터-스트라이크: 글로벌 오펜시브, 팀 포트리스 2, 도타 언더로드, 길드워 2, 스플래툰 2, Dominion Online, TETR. IO, Gods Unchained ), 경쟁 프로그래밍 대회 등에서 사용된다. 시스템에 사용된 공식은 Glicko 웹사이트에서 찾을 수 있다.

RD는 플레이어 평점의 정확도를 측정하며, 하나의 RD는 하나의 표준 편차와 같다. 예를 들어, 등급이 1500이고 RD가 50인 플레이어는 95% 신뢰로 1400에서 1600(1500에서 표준 편차의 2배) 사이의 실제 실력을 갖는다. 이 범위는 평점에서 RD의 2배(정확히는 1.96배) 더하고 빼서 계산한다. 게임 후 평점 변경량은 RD에 따라 다른데, 플레이어의 RD가 낮을 때(자신의 평점이 이미 정확한 것으로 간주되기 때문에) 또는 상대의 RD가 높을 때(상대방의 실제 평점이 정확하지 않기 때문에 게임 결과로 얻는 정보가 거의 없기 때문에) 변화가 적다. RD 자체는 게임을 한 후 감소하지만, 비활성 시간이 지날수록 서서히 증가한다.

글리코-2 평점 시스템은 글리코 평점 시스템을 개선하고 *평점 변동성* σ를 추가로 도입한다. 글리코-2 평점 시스템의 아주 약간 수정된 버전은 호주 체스 연맹에 의해 구현되었다.

## 글리코 알고리즘

### 1단계: 등급 편차 결정
새로운 등급 편차 RD는 이전 등급 편차 RD_0로부터 얻는다.

RD = \min\left(\sqrt\sum_{i=1}^{m}{g(RD_i)(s_i-E(s|r_0,r_i,RD_i))}

식에 사용되는 각 변수의 값은 다음과 같이 결정된다.

g(RD_i) = \frac{1}{\sqrt{1 + \frac{3 q^2 (RD_i^2)}{\pi^2} }}

E(s|r_0,r_i,RD_i) = \frac{1}{1+10^{\left(\frac{g(RD_i)(r_0-r_i)}{-400}\right)}}

q = \frac{\ln(10)}{400} = 0.00575646273

d^2 = \frac{1}{q^2 \sum_{i=1}^{m}{(g(RD_i))^2 E(s|r_0,r_i,RD_i) (1-E(s|r_0,r_i,RD_i))}}

r_i는 각 상대의 평점을 나타낸다.

RD_i는 각 상대의 등급 편차를 나타낸다.

s_i는 각 게임의 결과를 나타내고, 승리는 1, 무승부는 \frac{1}{2}, 패배는 0이다.

### 3단계: 새로운 등급 편차 결정
1단계에서의 RD 계산의 기능은 모델에 의해 관찰되지 않는 기간 동안 플레이어의 기술 수준에서 증가하는 불확실성을 설명하기 위해 RD를 적절하게 증가시키는 것이었다. 3단계에서는 일련의 게임 후에 RD를 갱신(감소)한다.

RD'=\sqrt{\left(\frac{1}{RD^2}+\frac{1}{d^2}\right)^{-1}}

## 글리코-2 알고리즘
글리코-2는 원래 글리코 알고리즘과 유사한 방식으로 작동하고,  플레이어의 경기력이 얼마나 불규칙한지에 따라 플레이어의 평점이 예상되는 변동 정도인 평점 변동성 \sigma가 추가되었다. 예를 들어, 플레이어의 평점 변동성은 일관된 수준의 실력을 보일 때 낮을 것이고, 그 일관성을 갖는 기간 후에 예외적으로 강력한 결과를 얻을 때 증가할 것이다. 글리코-2 알고리즘에 대한 간략한 설명은 다음과 같다.

### 1단계: 보조량 계산
한 평가 기간 동안, 현재 평점이 \mu이고 평점 편차가 \phi인 플레이어가, 평점이 \mu_1,...,\mu_m이고 평점 편차가 \phi_1,...,\phi_m인 상대 m와 게임을 하여 결과적으로 점수 s_1,...,s_m를 얻었다고 가정한다. 먼저 보조량 v, \Delta를 계산한다.

v = \left[ \sum_{j=1}^m g(\phi_j)^2 E(\mu,\mu_j,\phi_j) \{s_j - E(\mu,\mu_j,\phi_j)\} \right]^{-1}

\Delta = v \sum_{j=1}^m g(\phi_j) \{s_j - E(\mu,\mu_j,\phi_j)\}

식에서 쓰인 함수는 다음과 같다.

g(\phi) = \frac{1}{\sqrt{1 + 3\phi^2/\pi^2}},

E(\mu,\mu_j,\phi_j) = \frac{1}{1 + \exp\{-g(\phi_j)(\mu - \mu_j)\}}.

### 2단계: 새로운 평점 변동성 결정
시간 경과에 따른 변동성을 제한하는 작은 상수 \tau를 선택한다. 예를 들어, \tau=0.2를 선택할 수 있다. \tau가 작을수록 결과가 뒤집혔을 때 급격한 평점 변화를 막는다. 함수

 f(x) = \frac{1}{2}\frac{e^x(\Delta^2 - \phi^2 - v^2 - e^x)}{(\phi^2 + v + e^x)^2} - \frac{x-\ln({\sigma^2})}{\tau^2},

에 대해, f(A)=0를 만족하는 값 A를 찾는다. 이를 해결하는 효율적인 방법은 *[[레귤라 거짓|regula falsi]]* 절차의 수정된 버전인 Illinois 알고리즘을 사용하는 것이다. 이 반복 절차가 완료되면 새로운 등급 변동성을 \sigma' = \exp\{A/2\}으로 설정한다.

### 3단계: 새로운 평점 편차 및 평점 결정
플레이어는 새로운 평점 편차와 평점을 얻는다.

\phi' = 1\Big/\sqrt{\frac{1}{\phi^2 + \sigma'^2} + \frac{1}{v}},

\mu' = \mu + \phi'^2 \sum_{j=1}^m g(\phi_j) \{s_j - E(\mu,\mu_j,\phi_j)\}.

이러한 평점과 평점 편차는 기존의 글리코 알고리즘과 다른 척도에 있으며, 둘을 적절하게 비교하려면 변환 과정을 거쳐야 한다.

## 같이 보기

* 체스 평가 시스템

## 참고 문헌


## 외부 링크
* Glickman 교수의 Glicko-웹사이트
* Microsoft의 TrueSkill https://www.microsoft.com/en-us/research/publication/trueskilltm-a-bayesian-skill-rating-system/ 등급 시스템은 Glicko의 많은 아이디어를 차용합니다.
* forwardloop/glicko2s JVM용 Glicko-2 구현
* RobKohr/glicko JavaScript Glicko-2 구현.
* mmai/glicko2js 클라이언트 측 javascript 및 node.js Glicko-2 구현
* deepy/glicko2 Python Glicko-2 구현.
* sublee/glicko2 Python Glicko-2 구현.
* Alec Stephenson과 Jeff Sonas의 PlayerRatings R Glicko 구현.
* scala-glicko2 Scala Glicko-2 구현.
* dimos/glicko2 Scala 및 Scala.js를 위한 Glicko-2 구현

분류:체스 등급 제도