アローラ!ひらじです。今回は数学チックなお話。

事の発端

ツイッターで流れてきたこちらの記事
勝率と優勝確率について

からの

こちらのツイート

要約すると、大会での「各デッキの各マッチアップ勝率」と「各デッキの存在数」から「それぞれが優勝する確率」を計算してみよう、という内容です。

最初の記事で言われてるように「ルガゾロは安定して勝ち上がれるけど優勝するのはルガゾロに強いデッキ」みたいなの、感覚とか経験則でなんとなく正しそうとは思うけど果たして本当にそうなのか。これを感覚ではなく数学的に検証してみようとわけです。非常に面白い。

面白いのでもっと掘り下げてみましょうと言うのが今回の記事です。学生時代のおぼろげな数Aあたりの記憶を手繰り寄せてレッツ トライ

 

計算方法

あるラウンドにおいて、あるデッキの勝ち上がる人数の期待値

デッキA(使用者Na人)、デッキB(使用者Nb人)、、、デッキX(使用者Nx人)の合計T人がランダムにマッチングする時、デッキXが勝ち上がる確率Pは
P = vs.A勝率×Aマッチ確率 + vs.B勝率×Bマッチ確率 + ...+ vs.X勝率×Xマッチ確率
=vs.A勝率×Na/T + vs.B勝率×Nb/T + ...+ vs.X勝率×Nx/T

(さらにマッチ確率計算時に人数へ補正をかける(自分自身とはマッチングしないため)のですが、数学的に説明できる自信がないので省略)

使用者数×Pでそのラウンドを勝ち上がる人数の期待値
使用者数×(1-P)で負ける人数の期待値

 

スイスドローとドロップを考える

・スイスドローでは同戦績同士でマッチングされる
・規定数負けるとドロップ(戦績が確定する)
の考え方

文では説明しにくいので下図を参照
3敗でドロップの場合

めんどうなので両者負けや引き分けは今回は考慮しません。
以上の処理を各デッキごとに行い集計します。人力でやってたら膨大な計算量になるのでコンピューターのちからを借ります。

 

計算ツールを作る

作りました。

僕のパソコンにはエクセルが入ってないのでGoogleスプレッドシート+Google APP Scriptです。Googleは神。

以下のリンクから自身のGoogleドライブにコピーしてお使いいただけます。
戦績試算ツール

(利用にはGoogleアカウントが必要です。また、PCからのみ利用できます)

使い方

デッキ名とその使用者数を入力

(いくつでも入力できますが、存在比の行は12列目までしか入れていないので、それ以上必要な場合はオートフィルで伸ばしてください(無くても動作はします))

勝率表作成ボタンを押すとスクリプトが起動します
(注:スクリプトはPCからのみ起動できます。Googleの仕様ですので悪しからず…)
初回実行時にはボタンを押してしばらくするとアカウントの認証が求められます

アカウントを選択すると以下のような警告画面が表示されます
(セキュリティ的に仕方がないとは言え少し大げさな気がする)

僕の事を「よく知っている信頼できるデベロッパー」だと思う方は左下の「詳細」をクリック⇒「戦績試算(安全ではないページ)に移動」をクリック

アカウントアクセスの承認を求められるので許可

スクリプトでテンプレートがモリッと作られるので白部分に勝率を書き込んでいきます。空欄のままにしておけば勝率50%として処理されます。

▲この例だとデッキAはvsBで勝率70%、vsDで勝率30%、他に対しては50%
入力出来たら大会の試合数とドロップになる負け数と集計モード(後述)を入力して

計算開始ボタンをポチーッと押すと

なんか色々出来上がります。かがくのちからってすげー!

(結果シートを大量に作り過ぎた場合、右上の「結果シートの削除」ボタンで、保護していない結果シートを一括削除できます)

算出されるデータ

人数期待値

集計モード:戦績別の場合
その戦績になるデッキ使用者数の期待値です。横一行を合計するとそのデッキの合計の使用者数になります。
集計モード:上方合算の場合
その戦績以上になる人数の期待値です。例えばスイスドロー8回戦の予選を試算し、7勝1敗以上の列を用いて決勝トーナメントの試算…みたいな使い方に便利です。

同戦績内比率

同じ戦績内でのデッキ使用者数の割合です。縦1列を合計すると100%になります。注意したいのはこれは「そのデッキを握った時にその戦績になる確率」ではないという事です。(元々の人数比が考慮されていない。全勝の内デッキA使用者の割合が多かったとして、それはデッキAが強かったからなのか、元々デッキA使用者が多かったからなのかはここからは不明)

予選→決勝トーナメントのような試算をするときに、決勝の環境を割合で見る、などの使い方ができます。

同デッキ内比率

その戦績のデッキ使用者数の、元々のデッキ使用者数に対する割合。こちらが「そのデッキを握った時にその戦績になる確率」。

同デッキ内比率偏差値

上記同デッキ内比率を、同戦績内での偏差値に直したもの。ざっくり言うなら「その戦績を目指した時のそのデッキの優秀さ」。平均なら50。60行けばたいへん優秀、70とかは優秀通り越して異常(勝率設定が現実的でない)くらいに思っておけば良いかと思います。

使用例

以下の条件で試算してみます。

・tier1はルガゾロ・マッシルガン・ウルネクの3デッキで勝率は3すくみ、使用者数は同数
・ルガゾロは対有象無象性能が高い(tier2・3への勝率が他より一回り高い)
・合計1100人、予選スイスドロー8回戦・3敗ドロップ⇒上位32名が決勝トーナメント進出
まずは予選:スイスドロー8回戦、3敗でドロップ で試算(上方合算モード)
とりあえず偏差値を見てみましょう。

グラフで見るとこんな感じ

大雑把に読み取ると
・対有象無象性能の高さ分、最初にルガゾロが頭一つ抜ける(0勝3敗~2勝3敗)
・抜けたルガゾロがウルネクを抑え込むので、マッシが伸びる(3勝3敗~6勝2敗)
・マッシがルガゾロを倒すのでルガゾロが下降、マッシと同ラインに収束(~8勝0敗)
といった感じでしょうか。予選では終始ルガゾロが優勢です。

同デッキ内比率に目を向けるとティア2の8割、ティア3の9割弱が3勝3敗以下という悲しい事実。
(ほとんどのデッキに対して勝率5割以下なので当然そうなる)

続いて決勝トーナメントの試算。
先ほどの予選の試算で出て来た人数期待値がこちら(上位のみ抜粋、上からルガゾロ、マッシルガン、ウルネク、ティア2、ティア3)

32名が決勝トーナメント進出なので、7勝1敗以上の38名から程よく間引いて以下の条件で試算してみます。

トーナメントなので1敗でドロップ。32名なので5回戦。
勝率は予選と同じです。計算開始ボタンをポチッと押してとりあえず偏差値を見てみましょう。

見ての通りマッシが強い。予選とは環境が変わってルガゾロと当たりやすくなった為か終始マッシが高評価です。
更に上位になるにつれてマッシが勝ち上がっている確率が高いため、マッシに有利なウルネクの評価も上がり、最後にはルガゾロを追い越しています。
更に更に言うと、ティア2の勝率を予選のままで計算してしまっていますが、決勝トーナメントに上がってくるティア2がティア1全デッキに不利を取ってる訳がないんですよね。
現実的に考えるなら「予選でルガゾロを踏みまくったルガゾロをボコる為のデッキ」とかです。その想定で勝率を設定し直したらルガゾロの評価は更に下がります。
以上をまとめると
・ルガゾロは予選では対有象無象性能を発揮して勝ち上がる
・その過程で、自分が不利なデッキ(マッシ)に対して有利なデッキ(ウルネク)を倒してしまう。
・その結果、上位では不利なデッキが増える⇒優勝が難しくなる。
という結論を得られます。
ただしこの結論は、勝率設定やデッキ分布が合っていればのお話。
実際の勝率は今回のような綺麗な3すくみでは無いでしょうし、
ティア2ティア3も細かく分ければルガゾロメタが多かったりマッシメタが多かったりするでしょう。

その辺の細かいシミュレーションに興味が湧いたら、是非ご自分でお試しください。ツールは⇓からコピーしてお使いいただけます。(要Googleアカウント)
戦績試算ツール