Vリーグの試合結果からレーティングを計算してみる

# はじめに

日本のプロ野球やサーカーJリーグでは、毎年シーズンでチーム間で試合をおこないシーズン終了時にランキングと呼ばれるチームのランク順（1位、2位&#x2026;）が確定されます。

ランキングはAチームとBチームがどちらが強いチームであるかを説明をしてくれます。
しかし、AチームはBチームより1試合あたり何点得点するのか、AとBチーム間とBとCチーム間の得点差はどれくらいなのかは説明してはくれません。

このような得点に関する指標として、ランキングとは別にレーティングがあります。
このレーティングを使うと、試合結果の得失点を元に、各チーム間の強さを数値点数で説明することができます。

ここでは、一般社団法人日本バレーボールリーグ機構（以下Vリーグ）が開催している、最近レギュラーラウンドが終了した、「2019-20 V.LEAGUE DIVISION 1 WOMEN」（以下、2019-20 V1女子）の参加チーム12チームのレーティングを計算して、2020年1月から始まるファイナルステージの試合予想します。

# レーティング計算の手法

レーティングを計算するために、レーティング計算の一つの手法として、Masseeyの手法を使います。

Masseeyの手法は、書籍「Amy N. Langville. Who's #1?: The Science of Rating and Ranking（邦題レイティング・ラインキングの数理No.1は誰か？）」で紹介されています。概要の手順は以下の通りです。

nチームが試合数mのリーグ戦に参加して、i番目のチーム（以下チームi）のレーティングを $r_{i}$ とする。

チームi、チームjがk番目で試合して得点差が $y_{k}$ とした場合に、以下の数式で計算する。

$$ r_{i} - r_{j} = y_{k} $$

k行目のi列が $+1$ でj列が $-1$ であるm行n列の行列を $X$、全チームのレーティングをn行1列の行列 $r$、全試合の得点差をm行1列の行列 $y$ と定義すると、
以下の行列の掛け算で表されます。

$$ X r = y $$

$X$、$y$ が与えられているので、ここから $r$ を計算したいのですが、試合数はチーム数より大きい $ (m > n) $ ため一般には解は存在しません。

ただし、$ ||X r - y || $ の値を最小にすること、$ \sum_{i=1}^{n} r_{i} = 0 $ を満たすことの制約を追加することで、$r$ を求めることができます。

$$ M = X^{t} X 、p = X^{t} y $$

を計算します。

ちなみに、$M$ は、n次元の正方行列になり、i行i列の対角要素がチームiの試合数、$i <> j$ の場合は、チームiとチームjの試合数に $-1$ を乗じたものになります。
また、$p$ は、n行1列の行列になり、i行1列目の値は、チームiの全試合の得点差になります。

Mの最終行の列を全てに $1$ 、pの最終行を $0$ にした行列 $ \overline{M} 、\overline{p} $ を計算する。

$$ \overline{M} r = \overline{p} $$

を満足する $ r $ を求める。

ちなみに、$ o $を攻撃レーティング、$ d $ を守備レーティングとして、 $ r = o + d $ を満たすように計算することもできます。
攻撃レーティングは1試合あたりの得点数、守備レーティングは1試合あたりの失点（マイナス）を表します。

詳細は、前述の書籍を参照してください。

# 2019-20 V1女子の予備知識

Masseeyの手法を2019-20 V1女子に適用するために、簡単に2019-20 V1女子を説明します。

- **参加チーム** 12チーム（久光製薬、デンソー、NEC、日立、姫路、岡山、東レ、JT、トヨタ車体、埼玉上尾、KUROBE、PFU）。
- **期間** 2019年10月〜2020年1月。
- **概要** 2019年12月まで総当たり方式で試合（レギュラーラウンド）をする。2020年1月にチャンピオン及びV2女子入替戦参加チーム（2チーム）を決定する試合（ファイナルステージ）をする。
- **試合数** レギュラーラウンドは126試合、レギュラーラウンド、全126試合。
- **勝敗** 5セットマッチおこない、3セット先取したチームが勝利する。1セットは25点（ただし、第5セットは15点）先取したチームが獲得する。


# レーティングの計算

2019-20 V1女子のレーティングを計算するために、以下の手順を使いました。

1.  Vリーグのオフィシャルサイトの記録・ランキングを参照する。
2.  [2019-2020 V1女子のレギュラーラウンドの試合一覧](https://www.vleague.jp/round/list/277)を参照する。
3.  Ruby＋Capybara（UIテストフレームワーク）を使い、全試合のセット数を抽出する。
4.  RubyのDaru（データフレームワーク）を使い、データフレームにデータを展開する。
5.  Masseeyの手法にしたがって、行列計算してレーティングを求める。

ちなみに、予想をセット数でするために、\(y_{k}\) は、k番目の試合のセット数の差としています。

Masseeyの手法にしたがって、行列 $ \overline{M} 、\overline{p} $ を計算すると、以下の通りになリます。

$ \overline{M} $ の各行列と$\overline{p} $各行は、PFU、日立、JT、東レ、NEC、KUROBE、久光製薬、埼玉上尾、岡山、デンソー、トヨタ車体、姫路の順番に並んでいます。

並びは、レギュラーラウンドの各試合での対戦チーム順から並べています。

```math
\overline{M} = \begin{pmatrix}
  21 & -1 & -3 & -3 & -1 & -3 & -1 & -3 & -1 & -1 & -3 & -1 \\
  -1 & 21 & -1 & -1 & -3 & -1 & -3 & -1 & -3 & -3 & -1 & -3 \\
  -3 & -1 & 21 & -3 & -1 & -3 & -1 & -3 & -1 & -1 & -3 & -1 \\
  -3 & -1 & -3 & 21 & -1 & -3 & -1 & -3 & -1 & -1 & -3 & -1 \\
  -1 & -3 & -1 & -1 & 21 & -1 & -3 & -1 & -3 & -3 & -1 & -3 \\
  -3 & -1 & -3 & -3 & -1 & 21 & -1 & -3 & -1 & -1 & -3 & -1 \\
  -1 & -3 & -1 & -1 & -3 & -1 & 21 & -1 & -3 & -3 & -1 & -3 \\
  -3 & -1 & -3 & -3 & -1 & -3 & -1 & 21 & -1 & -1 & -3 & -1 \\
  -1 & -3 & -1 & -1 & -3 & -1 & -3 & -1 & 21 & -3 & -1 & -3 \\
  -1 & -3 & -1 & -1 & -3 & -1 & -3 & -1 & -3 & 21 & -1 & -3 \\
  -3 & -1 & -3 & -3 & -1 & -3 & -1 & -3 & -1 & -1 & 21 & -1 \\
  -1 & -3 & -1 & -1 & -3 & -1 & -3 & -1 & -3 & -3 & -1 & 21 \\
\end{pmatrix}, \;
\overline{p} = \begin{pmatrix}
  -31 \\
  -19 \\
   32 \\
   19 \\
    0 \\
  -43 \\
   -7 \\
   18 \\
   23 \\
   35 \\
    9 \\
  -36 \\
\end{pmatrix}
```

数式 $ \overline{M} r = \overline{p} $ に基づいて、レーティング $ r $ を計算します。

| チーム     | レーティング | 攻撃レーティング | 守備レーティング |
|------------+--------------+------------------+------------------|
| デンソー   |         1.43 |             1.59 |            -0.16 |
| JT         |         1.36 |             1.65 |            -0.29 |
| 岡山       |         0.93 |             1.40 |            -0.47 |
| 東レ       |         0.82 |             1.35 |            -0.53 |
| 埼玉上尾   |         0.78 |             1.31 |            -0.53 |
| トヨタ車体 |         0.40 |             1.26 |            -0.85 |
| NEC        |        -0.03 |             0.73 |            -0.75 |
| 久光製薬   |        -0.32 |             0.77 |            -1.09 |
| 日立       |        -0.82 |             0.63 |            -1.45 |
| PFU        |        -1.26 |             0.31 |            -1.58 |
| 姫路       |        -1.53 |             0.03 |            -1.56 |
| KUROBE     |        -1.76 |             0.01 |            -1.77 |

レーティングの結果としては、2019-20 V1女子レギュラーラウンドで18勝3負で終了したデンソーが1位となっています。

全体の傾向を確認するために、攻撃レーティングと守備レーティングで散布図を記述して見ます。
![2019-20-v1-rating-plot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155323/8dd31606-c2f5-1eec-273f-1fa12747cef8.png)

これから推定すると、2019-20 V1女子の上位4チームで開催されるセミファイナルはデンソーとJTの2チームと、岡山、東レ、埼玉上尾の中から2チーム間で実施されると想定されます。

# レーティングを元に試合を予想する

1月19日現在は、2019-20 V1女子ファイナルステージが既に開始されているのですが、
2019-20 V1女子レギュラーラウンドのレーティングを元にファイナルステージの結果を予想してみます。

チームi、チームjが対決した場合のセット数は、攻撃レーティング $ o_{k} $ 、守備レーティング $ d_{k} $ を使って、以下の計算式で求めることができます。

$$ チームiとチームjのセット数 = o_{i} - d_{j} \; 対 \; o_{j} - d_{i} $$

さて、2020年1月12日に開催された4試合を確認してみます。

|     試合日 | 対戦カード      | 予想セット数 | 実際セット数 |
|------------+-----------------+--------------+--------------|
| 2020-01-12 | JT-久光製薬     |    2.75-1.07 |          3-1 |
| 2020-01-12 | 岡山-トヨタ車体 |    2.75-1.73 |          3-2 |
| 2020-01-12 | 日立-姫路       |    2.19-1.94 |          3-1 |
| 2020-01-12 | PFU-KUROBE      |    2.08-1.58 |          2-3 |

JTー久光製薬、岡山ートヨタ車体の対戦カードは、レギュラーラウンドのそのままのチーム力が発揮されたのか、予想セット数と実際のセット数とよく適合しています。

PFUーKUROBEは、レギュラーラウンドとは逆の結果となっており、KUROBEがチャレンジ4で良いパフォーマンスを発揮したことがわかります。
平均2乗誤差を用いて、推定値の評価をすればより正確に評価できるかもしれません、

# まとめ

今回は、Masseeyの手法を利用して、2019-20 V1女子のレギュラーラウンドのレーティングを計算して見ました。

レギュラーラウンドのセット数から比較的簡単な行列演算によって、チーム間の相対的な強さを表現しているレーティングに計算することができました。
また、攻撃レーティング、守備レーティングを散布図で表現することにより、チームの強さを可視化することができました。

2019-20 V1女子の試合結果をスクレーピングしやすい形式で、試合後即座に公開されているVリーズに感謝いたします。

バレーボールは、3回のディグ・トス・アタックで守備から攻撃に即座に切り替わり、攻撃パター
ンと守備パターンを自チームと対戦チームとローテーションの関係即時に適切に選択するダイ
ナミックなスポーツです。

2020年1月26日（日）に、2019-20 V1女子のチャンピオン決まるファイナルが代々木体育館で開催されますが、NHK-BS、DAZNで放送されるので、興味のある方はぜひ視聴して見ていただきたいと思います。