この記事はパッチ26.6の時に書かれています
この記事を3行で
- 連勝時や昇格直前に不利な格差マッチがあるか検証した
- 試合結果が独立しているかを連検定で調べた
- 10000試合を検証し、不利な格差マッチがある根拠は確認されなかった
昇格戦や連勝中の不利な格差マッチは存在するのか?
誰もが一度は感じたことがあるのではないでしょうか。「連勝を重ねた途端、急にチームメイトが弱くなった」「昇格まであと1勝という大一番に限って、相手が異様に強い格差マッチに遭遇した」
昔のランクには昇格戦というものがありました。ディビジョンが上がるとき(ブロンズ3→ブロンズ2など)はBO3、ティアが上がるとき(ブロンズ1→シルバー5など)はBO5で勝ち越さないと昇格できませんでした。その昇格戦は妙に勝ちにくくて「普通のマッチングと違う!」といった意見がありました。私自身もBO3で勝てなかったことが何度もありました。今でこそ昇格戦はありませんが、LPが80ぐらいであと1勝でティアが上がるの状況なのに、その1勝が普段以上に遠かったり、あるいは連勝すると急に相手が強くなったり、弱いチームメイトがいる「ような」気がします。
これはおそらく印象論で、悪いことだけ強く記憶されているだけでしょう。実際、普通のマッチングと違う、とSNSで嘆いている人たちだってほとんど冗談で言っているはずです。しかし本当にただの思い込みなのでしょうか。人間の直感は意外と侮れません。しかし直感を根拠もなく信じるのも危険です。つまり、この記事の目的は「特定のタイミングで、意図的に不利な格差マッチが組まれているのではないか?」という疑念を、統計を使って科学的に検証することです。
LoLの疑念を統計の問題に言い換え
ここで検証したいこと、つまり(私を含む)LoLプレイヤーなら一度は持ったことがある疑念を文章化すると、以下のように要約することができます。「連勝中、昇格直前といった特定のタイミングで、チームの想定される強さが違いすぎる上に、意図的に不利側のチームに配置されるマッチングがあるか?」
この疑念を統計で検証するには、より厳密な統計の言葉でこの問題を言い換える必要があります。そのために考えたいことがあります。そもそも理想的なマッチングとはどんなものでしょうか?
理想的あるいは公平なマッチングは、ランクやMMR、メインロールやどこでもオプションなどの要素を加味して集められた10人が5v5に分けられた段階で、ブルーサイドもレッドサイドも各サイドの勝つ確率も同じ50%になっていることが期待されます。さらにその試合の勝敗は、試合を構成する10人のパフォーマンスによってのみ決まるべきです。以上を要約すると「理想的あるいは公平なマッチングとは、どちらのサイドもチームが決まった時点では同じ50%の勝率が期待できて、実際の勝敗はその10人のパフォーマンスによってのみ決まる」と言えるはずです。
もう一つ指摘したい点は、あるプレイヤーに関してシーズン全体の勝率が50%であってもそれだけでは公平なマッチングが行われていた、とは言えないことです。例として下記のようなあるプレイヤーの対戦履歴を考えます。勝ちは○、負けは●で表しています。
例:勝率が50%で勝ちと負けが繰り返すパターン
○●○●○●○●○●
この例では、偶然勝ちと負けが交互に来ているだけかもしれません。しかし、勝った次の試合では負けやすい試合に、負けた次の試合は勝ちやすい試合に、マッチングされているようにも見えます。もし、これが格差マッチによって勝敗が操作された結果だったならば、勝率が50%であったとしても、本当に理想的あるいは公平なマッチングでしょうか。前の試合結果によって、この試合をする前(もしかしたらマッチングする前)から勝敗が決まっているという点で、たとえ勝率が50%だったとしても理想的あるいは公平なマッチングとは言えない状態です。上の例は非常に極端な例ですが、3連勝したら次は格差マッチ、ディビジョンが上がりそうなときも格差マッチとなっていれば、同じ構造です。
以上の2点をまとめると、「理想的あるいは公平なマッチングとは、どちらのサイドもチームが決まった時点では同じ50%の勝率が期待できて、実際の勝敗はその10人のパフォーマンスによってのみ決まる」「単に勝率が50%になっているだけでは理想的あるいは公平なマッチングが行われているかどうかわからない」ということです。以上から今回統計を使って検証したいことを示すと以下のように言うことができます。
「ある試合の勝敗が、前の試合の勝敗から独立しているかどうか」
統計的検定によって各試合の勝敗が前の試合結果から独立である、つまり負けた試合の後でも勝った試合の後でも勝つ確率が変わらないとわかれば、連勝後の強い相手も昇格戦の頼りないチームメイトも、それは偶然か、単に悪い出来事だけを覚えているにすぎないということになります。逆に各試合の勝敗が独立でない、言い換えると前の試合結果が次の試合結果に影響しているということになれば、疑念が事実であるという根拠の一つとなります。「ある試行の結果が前の試行の結果から独立しているかどうか」を検定する方法の一つとして連検定というものがあります。今回はこの連検定を使います。次の章ではこの連検定について紹介します。
連検定の紹介
まずは今回使用する連検定の考え方を紹介します。連検定では「連の数」という考え方を導入します。連とは連続した同じ要素を一つの塊と数えます。その塊がいくつあるかが連の数です。今回の場合ではプレイヤーの対戦履歴の勝敗に関して連の数を使って検討します。以下の例ではあるプレイヤーの連続した10試合の結果を勝ちは○、負けは●で表しています。試合結果が同じ5勝5敗でも連の数はいろいろな値を取ります。
例1:連の数10
○●○●○●○●○●
例2:連の数3
○○○●●●●●○○
例3:連の数6
○●○○●●●○○●
例1は先ほども例として挙げた勝ちと負けが交互に来るパターンです。連勝も連敗もしにくい、言い換えると、直前の結果と逆の結果が出やすい場合は、連の数が多くなります。「3連勝したら負けやすい格差マッチになる」「あと1勝でランクが上がる状況で不利な格差マッチになる」といった疑念も直前の試合と逆の結果が出やすい場合にあたるので、本当に発生しているならば連の数が多くなります。LoLではほとんど聞いたことがありませんが、連勝しやすい、連敗しやすい傾向があるならば(例2)連の数は少なくなります。そして、試合の勝敗が前の試合結果にかかわらないならば、連の数は多くもなく少なくもない範囲におさまります(例3)。これが統計的に自然な範囲かどうかを検定します。
まとめると連検定では連の数という考え方を導入することで、「ある試行の結果が前の試行の結果から独立しているかどうか」が検定できます。連の数が適切な範囲におさまっていれば各試行が独立していますが、連の数が多かったり少なかったりするなら、各試行が独立しているとは言えなくなります。
検定するプレイヤーのピックアップ
今回は以下の条件を満たすプレイヤー100人をランダムに選びました。
1、パッチ25.24でランクがゴールドであること
2、25年シーズンにランク戦を100戦以上行っていること
シーズンの最後の方のランクを基準に選んだのは、すでに多くのプレイヤーが適切なランクにいると考えられるからです。システムが適切なマッチングをするにしても格差マッチングをするにしても、システムが参照するランクやMMRがプレイヤーの本当の実力を表している必要があります。シーズンの終盤は各プレイヤーの消化した試合数が多いので、それが期待できます。ゴールドランクに限定したのはランクが上すぎたり、下すぎると、同じような実力のプレイヤーが少なくなり、そもそもマッチングシステムが意図するマッチングができない場合がありそうだったからです。また、ゴールドは一番人口が多いランクなので前述の条件と合わせて、基本的にはマッチングシステムが意図するチーム分けがされていると期待できそうだからです。連検定では連続した結果の列が必要です。そのため、ランクで100戦以上しているプレイヤーに限定しました。
ランダムに選んだ100人の25年シーズンで行われた直近ランク100戦の勝敗をRiotAPIで取得しました。この100人分の100試合の履歴に関して以下の検定を行いました。
勝率は本当に50%なのか?(カイ二乗検定の結果)
| 勝ち数 | 人数 |
|---|---|
| 41 | 2 |
| 42 | 0 |
| 43 | 3 |
| 44 | 1 |
| 45 | 6 |
| 46 | 2 |
| 47 | 5 |
| 48 | 8 |
| 49 | 8 |
| 50 | 10 |
| 51 | 9 |
| 52 | 7 |
| 53 | 10 |
| 54 | 6 |
| 55 | 5 |
| 56 | 6 |
| 57 | 4 |
| 58 | 2 |
| 59 | 5 |
| 60 | 0 |
| 61 | 0 |
| 62 | 1 |
| 合計 | 100 |
いきなり連検定を行う前に、集めた100人分の100試合、のべ10000試合の全体像を確認します。表1は100人のプレイヤーが何勝したかを度数分布表にしたものです。公平なコインを2回投げて必ず表と裏が1回ずつ出るわけではないのと同様に、もしマッチングシステムが完璧に公平で、すべての試合がどちらのチームも勝率が50%となるようなマッチングが行われていたとしても、全員がピッタリ勝率50%にはなりません。100試合なら、50勝が一番起こりやすいですが、51勝や49勝になる場合もあり得ます。計算上では、95%の確率で41勝以上、59勝以下の範囲になります。つまり、大抵のプレイヤーはその範囲に収まります。今回は100人のプレイヤーの内99人が41勝以上、59勝以下の範囲に収まっており、理論通りの結果になっています。
全体としてのべ10000試合で、5118勝となっています。これをカイ二乗検定でp値を計算するとp=0.018となりました。これは有意水準の0.05を下回っています。これは偶然とは言えないレベルで勝ちが多いということを示しています。
「連勝した後は負けやすい」は本当か?(連検定の結果)
表2は100人分の100試合結果の連の数です。また、今回の議論からは逸れるものの、個人的な興味として、実際どれくらいの連勝連敗が発生しているのかが気になったので表3にまとめました。
| 連の数 | 人数 |
|---|---|
| 38 | 1 |
| 39 | 0 |
| 40 | 1 |
| 41 | 0 |
| 42 | 0 |
| 43 | 4 |
| 44 | 7 |
| 45 | 2 |
| 46 | 7 |
| 47 | 6 |
| 48 | 8 |
| 49 | 7 |
| 50 | 7 |
| 51 | 8 |
| 52 | 12 |
| 53 | 8 |
| 54 | 4 |
| 55 | 6 |
| 56 | 1 |
| 57 | 4 |
| 58 | 3 |
| 59 | 1 |
| 60 | 0 |
| 61 | 2 |
| 62 | 1 |
| 合計 | 100 |
| 連の長さ | 連勝の出現回数 | 連敗の出現回数 |
|---|---|---|
| 1 | 1241 | 1323 |
| 2 | 647 | 595 |
| 3 | 290 | 284 |
| 4 | 155 | 171 |
| 5 | 111 | 61 |
| 6 | 37 | 41 |
| 7 | 21 | 21 |
| 8 | 11 | 6 |
| 9 | 4 | 4 |
| 10 | 1 | 3 |
| 11 | 2 | 2 |
| 12 | 1 | 0 |
表3を見ると12連勝した人がいます。すごいですね。2ディビジョンをノンストップで駆け上がってます。特に検定などしていませんが、これを見る限りは特定の連勝数に達したら負けやすくなる、というのはほとんどなさそうに見えます。また、連勝よりも連敗の方が明確に多いということも言えなさそうです。
本命の連検定は、実際に勝った数にもよりますが、50勝50敗の場合、連の数が43以上58以下なら、p値が0.05より大きい、つまり連勝しやすかったり連勝しにくいなどが特に言えない範囲になります。
そして連検定を、有意水準0.05で一人ひとりと全体を合計した両方で検定を行いました。結果として、100人中5人、帰無仮説が棄却されました。5人の帰無仮説が棄却されたとはどういうことか、LoLの文脈でどのように解釈するべきかを次の章で考察していきます。
検定結果の解釈
カイ二乗検定の考察
まず、サンプル10000試合中5118勝をカイ二乗検定した結果、p値が0.018だった結果を検討します。p値が0.018、つまり0.05未満だったということは、統計的に言えば「帰無仮説(試合の勝率50%)が有意水準0.05で棄却された」ということになります。LoL的に言えば「勝率が50%と考えることは不自然」ということになります。これは格差マッチがある根拠を見つけたのでしょうか?
今回調べた10000試合では勝率が50%ではない、という検定結果が出たのは間違いないです。しかしこの結果から、格差マッチがあった、あるいはマッチングシステムの不備等を断定することはできません。なぜなら、サンプリングが偏っていた場合でも、勝率が50%でない、という検定結果になってしまうからです。今回は単に10000試合の勝敗を集計したわけではありません。勝敗履歴を調べる必要があったので、25年シーズンに100試合以上ランクをプレイしたプレイヤーを100人選びました。年に100試合以上したプレイヤーは100試合未満のプレイヤーよりも勝率が高いのかもしれません。他にも、op.ggによれば現在のゴールドランクはランキングの上位55%から35%に位置しており、半分より上側のプレイヤーがやや多いです。これも原因かもしれません。また、p値はサンプルサイズが大きければ大きいほど小さく出やすくなることが知られています。つまり、サンプリングの偏りが大きなサンプルサイズによって顕在化した結果、0.018という小さいp値が出る結果になったと考えています。
まとめると「勝率が50%と考えることは不自然」である理由は、「格差マッチがあるから」ではなく「今回サンプリングした100人のプレイヤーは、完全にランダムなプレイヤーから選ばなかったため、全体平均よりわずかに勝率が高いという傾向が見られた」と解釈するのがより正しい理解になりそうです。
連検定の考察
連検定では、100人中5人において連の数がp値が有意水準を下回りました。今回の検定は有意水準を0.05に設定しているので、帰無仮説が正しい場合でも5人程度は、偶然に帰無仮説が棄却される範囲のp値が出てしまいます。また、100人分の勝敗と連の数を合計した場合の検定でもp値が0.25となりました。これらは、連の数は理論値より多い、あるいは少ないことを支持する根拠はない、という検定結果を示しています。この結果を統計的に言うなら「帰無仮説(試行の結果が前の試行の結果から独立している)が棄却されなかった」となります。これをLoL的に言い直すならば「勝敗は前の試合結果の影響が無い」と言いたくなります。しかしこの表現は厳密には適切ではありません。「勝敗は前の試合結果の影響がある根拠がない」という表現が適切になります。これは格差マッチがない、ではなく格差マッチがある根拠が得られなかったという遠回りな表現になります。遠回りな表現になってしまうのは、今回使った統計的手法の限界によるもので、これは避けられません。
とはいえ、完全に無いとは言えませんが、10000試合検証して格差マッチの根拠が無かったのならば、たとえあったとしても、かなりの低頻度でしか格差マッチは発生しないと考えられます。1日に28試合、年間10000試合もランクをプレイしたとしても、統計的に明らかにならないほどの低頻度でしか「連勝中、昇格直前といった特定のタイミングで、チームの想定される強さが違いすぎる上に、意図的に不利側のチームに配置される」ことは発生しないと言えます。この程度の頻度では(私を含む)ほとんどのプレイヤーはそんなマッチに出会うことがむしろ幸運であると言えるほどです。これならば、「完全に無い」と言い切ることはできませんが、多くのプレイヤーに対して「ほとんど無い」と言っていいはずです。
まとめると、プレイヤー100人の勝敗履歴に連検定を行いました。その結果、格差マッチはほとんど無い、あったとしてもほとんどのプレイヤーは何年かに1回しか遭遇しない、という結果を得ることができました。
結論:マッチング神話への終止符
この記事で解決したい問題は「連勝中、昇格直前といった特定のタイミングで、チームの想定される強さが違いすぎる上に、意図的に不利側のチームに配置される場合があるか?」ということでした。この問題を「ある試合の勝敗が前の試合の勝敗から独立しているかどうか」として連検定を使って次の試合の勝敗が前の試合結果から独立しているかを検定しました。その結果、上記の問いへのこの記事の答えは「そのように考える根拠は無い」としました。
実のところ、さすがにあると本気では思っていませんでしたが、実際になさそうなことが実験で確認できたので、非常に有意義でした。
参考資料
ライアットサポート MMR、ランク、LPについて
Minitab サポート 連検定の方法と計算式
実験結果詳細
| プレイヤー | 勝数 | 負数 | 連の数 | 勝数に関してのp値 | 連の数に関してのp値 |
|---|---|---|---|---|---|
| 001 | 53 | 47 | 44 | 0.549 | 0.084 |
| 002 | 48 | 52 | 47 | 0.689 | 0.215 |
| 003 | 54 | 46 | 55 | 0.424 | 0.191 |
| 004 | 59 | 41 | 47 | 0.072 | 0.310 |
| 005 | 47 | 53 | 52 | 0.549 | 0.406 |
| 006 | 49 | 51 | 55 | 0.841 | 0.209 |
| 007 | 55 | 45 | 52 | 0.317 | 0.380 |
| 008 | 50 | 50 | 51 | 1.000 | 0.500 |
| 009 | 54 | 46 | 51 | 0.424 | 0.474 |
| 010 | 45 | 55 | 47 | 0.317 | 0.239 |
| 011 | 51 | 49 | 43 | 0.841 | 0.054 |
| 012 | 45 | 55 | 46 | 0.317 | 0.180 |
| 013 | 55 | 45 | 51 | 0.317 | 0.460 |
| 014 | 49 | 51 | 50 | 0.841 | 0.422 |
| 015 | 53 | 47 | 48 | 0.549 | 0.285 |
| 016 | 49 | 51 | 44 | 0.841 | 0.080 |
| 017 | 59 | 41 | 52 | 0.072 | 0.293 |
| 018 | 51 | 49 | 52 | 0.841 | 0.419 |
| 019 | 53 | 47 | 53 | 0.549 | 0.330 |
| 020 | 49 | 51 | 44 | 0.841 | 0.080 |
| 021 | 48 | 52 | 50 | 0.689 | 0.427 |
| 022 | 54 | 46 | 59 | 0.424 | 0.046 |
| 023 | 56 | 44 | 52 | 0.230 | 0.363 |
| 024 | 55 | 45 | 61 | 0.317 | 0.016 |
| 025 | 51 | 49 | 54 | 0.841 | 0.272 |
| 026 | 56 | 44 | 50 | 0.230 | 0.477 |
| 027 | 48 | 52 | 55 | 0.689 | 0.206 |
| 028 | 54 | 46 | 52 | 0.424 | 0.395 |
| 029 | 51 | 49 | 54 | 0.841 | 0.272 |
| 030 | 52 | 48 | 55 | 0.689 | 0.206 |
| 031 | 48 | 52 | 47 | 0.689 | 0.215 |
| 032 | 59 | 41 | 38 | 0.072 | 0.009 |
| 033 | 43 | 57 | 53 | 0.162 | 0.271 |
| 034 | 55 | 45 | 44 | 0.317 | 0.093 |
| 035 | 48 | 52 | 62 | 0.689 | 0.013 |
| 036 | 45 | 55 | 53 | 0.317 | 0.306 |
| 037 | 52 | 48 | 57 | 0.689 | 0.110 |
| 038 | 56 | 44 | 43 | 0.230 | 0.069 |
| 039 | 48 | 52 | 58 | 0.689 | 0.077 |
| 040 | 57 | 43 | 49 | 0.162 | 0.417 |
| 041 | 51 | 49 | 61 | 0.841 | 0.022 |
| 042 | 53 | 47 | 51 | 0.549 | 0.486 |
| 043 | 54 | 46 | 45 | 0.424 | 0.125 |
| 044 | 49 | 51 | 56 | 0.841 | 0.156 |
| 045 | 43 | 57 | 52 | 0.162 | 0.342 |
| 046 | 59 | 41 | 49 | 0.072 | 0.469 |
| 047 | 52 | 48 | 54 | 0.689 | 0.268 |
| 048 | 53 | 47 | 47 | 0.549 | 0.220 |
| 049 | 53 | 47 | 53 | 0.549 | 0.330 |
| 050 | 46 | 54 | 43 | 0.424 | 0.060 |
| 051 | 57 | 43 | 49 | 0.162 | 0.417 |
| 052 | 50 | 50 | 57 | 1.000 | 0.114 |
| 053 | 49 | 51 | 55 | 0.841 | 0.209 |
| 054 | 53 | 47 | 57 | 0.549 | 0.106 |
| 055 | 44 | 56 | 52 | 0.230 | 0.363 |
| 056 | 58 | 42 | 48 | 0.110 | 0.361 |
| 057 | 50 | 50 | 52 | 1.000 | 0.420 |
| 058 | 57 | 43 | 50 | 0.162 | 0.498 |
| 059 | 55 | 45 | 45 | 0.317 | 0.132 |
| 060 | 56 | 44 | 49 | 0.230 | 0.397 |
| 061 | 49 | 51 | 55 | 0.841 | 0.209 |
| 062 | 53 | 47 | 44 | 0.549 | 0.084 |
| 063 | 50 | 50 | 48 | 1.000 | 0.273 |
| 064 | 58 | 42 | 53 | 0.110 | 0.249 |
| 065 | 54 | 46 | 58 | 0.424 | 0.069 |
| 066 | 50 | 50 | 57 | 1.000 | 0.114 |
| 067 | 52 | 48 | 51 | 0.689 | 0.494 |
| 068 | 49 | 51 | 50 | 0.841 | 0.422 |
| 069 | 62 | 38 | 50 | 0.016 | 0.344 |
| 070 | 57 | 43 | 54 | 0.162 | 0.207 |
| 071 | 48 | 52 | 49 | 0.689 | 0.350 |
| 072 | 41 | 59 | 48 | 0.072 | 0.387 |
| 073 | 45 | 55 | 52 | 0.317 | 0.380 |
| 074 | 47 | 53 | 40 | 0.549 | 0.015 |
| 075 | 56 | 44 | 53 | 0.230 | 0.290 |
| 076 | 51 | 49 | 46 | 0.841 | 0.158 |
| 077 | 53 | 47 | 50 | 0.549 | 0.434 |
| 078 | 50 | 50 | 46 | 1.000 | 0.157 |
| 079 | 46 | 54 | 53 | 0.424 | 0.319 |
| 080 | 48 | 52 | 48 | 0.689 | 0.278 |
| 081 | 50 | 50 | 53 | 1.000 | 0.344 |
| 082 | 52 | 48 | 47 | 0.689 | 0.215 |
| 083 | 45 | 55 | 51 | 0.317 | 0.460 |
| 084 | 50 | 50 | 49 | 1.000 | 0.344 |
| 085 | 50 | 50 | 44 | 1.000 | 0.080 |
| 086 | 52 | 48 | 51 | 0.689 | 0.494 |
| 087 | 47 | 53 | 51 | 0.549 | 0.486 |
| 088 | 47 | 53 | 46 | 0.549 | 0.165 |
| 089 | 53 | 47 | 46 | 0.549 | 0.165 |
| 090 | 52 | 48 | 44 | 0.689 | 0.082 |
| 091 | 51 | 49 | 52 | 0.841 | 0.419 |
| 092 | 47 | 53 | 46 | 0.549 | 0.165 |
| 093 | 51 | 49 | 48 | 0.841 | 0.274 |
| 094 | 50 | 50 | 58 | 1.000 | 0.080 |
| 095 | 51 | 49 | 49 | 0.841 | 0.345 |
| 096 | 59 | 41 | 48 | 0.072 | 0.387 |
| 097 | 45 | 55 | 43 | 0.317 | 0.064 |
| 098 | 43 | 57 | 52 | 0.162 | 0.342 |
| 099 | 41 | 59 | 48 | 0.072 | 0.387 |
| 100 | 56 | 44 | 46 | 0.230 | 0.191 |
| 合計 | 5117 | 4883 | 5032 | 0.019 | 0.250 |
表4はサンプリングした100人に関してriotAPIを使って集計したの勝敗の数と連の数です。この3つの数字からカイ二乗検定と連検定を行い、それぞれのp値を出しました。p値の算出方法は以下の通りです。
勝敗に関してのp値
カイ二乗検定を使います。50勝50敗を期待度数とし、各プレイヤーの勝数をw、負数をlとして以下の式で適合度を求めます。
エクセルのCHISQ.DIST.RT 関数に1番目の引数に上記の適合度、2番目の引数に自由度である1を入れp値を出力しました。
連の数に関してのp値
連の数の期待値Eと分散σは以下のように計算できます。
実際の連の数をxと置き、上記で求めたEとσからz統計量を求めます
求めたz統計量をエクセルのNORM.S.DIST 関数を使ってp値を求めます。今回は有意水準0.05で両側検定を行っているのでp値が0.025を下回っていると、帰無仮説が棄却されることになります。