はじめに
この記事は、【勉強】レーティングシステム Massey's Methodの続きである。
前回は、Masseyの方法を使って得点を予想できるようなレーティングシステムの構築を行った。今回はもっとシンプルなColleyの方法について解説する。
Colleyの方法は勝利数のみを用いる為次のような利点があると言われている。
- 弱いチームから大量得点したチームにバイアスがかからない
- シーズンのはじめにすべてのチームのレートは0.5となり、どこかのチームのレートが上がると他のチームのレートがさがる。
Colleyの方法
Colleyの方法の基本となる考えは、「勝率をそのままレートにしてしまおう」という考えである。
しかし、単なる勝率だと引き分けのあるゲームに対応できなかったり、敵チームの強さを考慮していないなどの問題がある。そこで、ラプラスの継承の法則を利用して、次のようにレートを設定する。
r_i = \frac{1 + \frac{w_i-l_i}{2} + \Sigma_j r_j}{2 + t_i} \tag{1}
ここで、$r_i$はチームiのレートであり、$w_i,l_i$はそれぞれチームiの勝利数と敗北数、$t_i$はチームiの試合数である。
これを行列で表すと、
(2I + M) \vec{r} = \vec{b} \tag{2}
ここで、Mは前回の記事にも出てきたMasseyの行列で各要素は次のようになっている
- 行列Mの対角要素$M_{ii}$はチームiの総試合数
- 行列Mの非対角要素$ M_{ij} $はチームiとチームjが戦った試合数に-1をかけたもの
さらに、IはMと同じ形をした単位行列であり、ベクトル$\vec{b}$は次のように定義できる。
b_i = 1 + \frac{w_i - l_i}{2}
ここで、行列$2I + M$は正則である事が保証されるので、(2)は解く事ができる。
Colleyの方法の例題
前回の記事と同様に、RLCSのシーズン10の試合結果からレートを導出してみよう。
試合結果は以下の通りであった。
teamA | teamB | score |
---|---|---|
RGE | VOLT | 4-2 |
RGE | VOLT | 4-1 |
RGE | VOLT | 4-0 |
SQ | OXG | 1-3 |
SQ | OXG | 4-1 |
SQ | OXG | 0-3 |
SQ | OXG | 3-1 |
SQ | OXG | 1-2 |
これより、行列Mは前回と同様に
M = \begin{pmatrix}
12 & -3 & 0 & -4 & -5 \\
-3 & 9 & -3 & -3 & 0 \\
0 & -3 & 12 & -5 & -4 \\
-4 & -3 & -5 & 15 & -3 \\
-5 & 0 & -4 & -3 & 12
\end{pmatrix}
さらに、ベクトル$\vec{b}$は
\vec{b} = \begin{pmatrix}
2 \\ 3 \\ 1 \\ 2 \\ 3
\end{pmatrix}
以上より次のような方程式が成り立つ。
\begin{pmatrix}
14 & -3 & 0 & -4 & -5 \\
-3 & 11 & -3 & -3 & 0 \\
0 & -3 & 14 & -5 & -4 \\
-4 & -3 & -5 & 17 & -3 \\
-5 & 0 & -4 & -3 & 14
\end{pmatrix}
\vec{r}
= \begin{pmatrix}
2 \\ 3 \\ 1 \\ 2 \\ 3
\end{pmatrix}
これを解いて次のようにレートが求まる。
team | rate |
---|---|
RGE | 0.58 |
VOLT | 0.17 |
SQ | 0.50 |
OXG | 0.55 |
V1 | 0.69 |
まとめ
今回はColleyの方法について解説してみた。
Colleyの方法で出てくるレートは$0\ge r_i\ge1$であるので非常に扱いやすいと思う。さらに利用する情報が試合の勝ち負けだけなので様々なゲームについて利用できる方法であると思う。
ちなみに、MasseyとColleyの方法を実装したコードをgithubに載せておいたので、興味がある方はそちらも見ていただきたい。
https://github.com/takenakadx/Rating_Models