スプラトゥーン2の勝率とウデマエアップ (負の二項分布)

スプラトゥーン2では、プレイヤーのうまさをウデマエというランク(C-, C, C+, B-, ..., S+9, X)で表します。

ウデマエはガチマッチで勝つことで、ウデマエメーターがたまっていき、満タンまでたまれば上のランクにウデマエアップします。逆に、負けるとウデマエメーターにヒビが入っていき、4つのヒビが入ると、ウデマエダウンして、下のランクに落ちます。4つのヒビが入るまでに、ウデマエメーターがある程度(40%)たまっていれば、ウデマエキープとなってランクは変動しません。

ガチマッチの勝率とウデマエアップの関係を調べてみました。というのも、たとえ勝率が5割であってもウデマエアップできるのではないかと感じたためです。勝率5割と言っても、勝ち、負け、勝ち、勝ち、勝ち、と瞬間的には大きく勝ち越すこともありますからね。それがどのくらいの確率なのかを調べようと思います。

負の二項分布

問題設定として、7回勝つとウデマエアップし、5回負けると4つのヒビが入るとします(実際、4回負けてもヒビは4つ入らないです。)。ウデマエアップのためには、5回負ける前に7回勝つ必要があります。勝率はpとします。

確率pで成功する独立なベルヌーイ試行が繰り返される時、r回失敗するまでに、k回成功する確率を表す確率分布があり、負の二項分布といいます。まさに今回の問題のためのような確率分布ですね!

 \displaystyle
f(k, r, p) = {}_{k+r-1}C_{k-1} p^{k-1} (1-p)^r p = {}_{k+r-1}C_{k-1} p^{k} (1-p)^r

「5回負ける前に7回勝つ」というのは、「7回勝つまでに、4回以下しか負けない確率」なので、

 \displaystyle
P(k=7, r \leq 4, p) = \sum_{r=0}^{4} {}_{7+r-1}C_6 p^{7} (1-p)^r

とかけます。勝率pによって確率が変わるので、これをみていきましょう。

勝率とウデマエアップの関係

ウデマエアップ確率Pを求める関数を定義。

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import comb

def get_probability(p, k=7):
    q = 1 - p
    sum = 0
    for r in range(4):
        sum += comb(k+r-1, k-1) * (q**r)
    return sum * (p**k)

勝率pを0から1までかえて、ウデマエアップ確率Pがどう変わるかをプロット。

ps = np.linspace(0, 1, 11)
probs = []
for p in ps:
    probs.append(get_probability(p))

plt.plot(ps, probs, 'o-')
plt.xlabel('Winning percentage, p')
plt.ylabel('Probability of Udemae-up, P')
plt.grid()
#plt.savefig('Udemae_up_1.png')
plt.show()

勝率p=50%だと、ウデマエアップできる確率は2割にも満たない。。。もっと高いかと思ったな。

次に、ウデマエアップを目指して4つヒビが入るまで挑戦するのを「1チャレンジ」として、5回チャレンジした時、10回チャレンジした時にウデマエアップできる確率を考えてみます。i回チャレンジして一度もウデマエアップできない確率を1から引けば良いので、

 \displaystyle
P_{challenge}(k=7, r \leq 4, p, i) = 1 - (1 - P(7, r \leq 4, p))^i

とかけます。これをプロットすると、

for i in [1, 5, 10]:
    probsChallenges = 1-(1-np.array(probs)) ** i
    label = f'{i} challenge' if i==1 else f'{i} challenges'
    plt.plot(ps, probsChallenges, 'o-', label=label)
plt.legend()
plt.xlabel('Winning percentage, p')
plt.ylabel('Probability of Udemae-up, P')
plt.grid()
#plt.savefig('Udemae_up_2.png')
plt.show()

勝率p=50%でも、5回チャレンジすればウデマエアップできる確率が6割を超えてくることがわかります。10回やれば、ほぼウデマエアップできますね。

なるほどー。

勝率とウデマエキープの関係

ついでなので、負の二項分布を使ってウデマエキープする確率(ウデマエダウンしない確率)も求めてみます。

ウデマエキープする確率を、「2回勝つまでに、4回以下しか負けない確率」とすると、

 \displaystyle
P(k=2, r \leq 4, p) = \sum_{r=0}^{4} {}_{2+r-1}C_1 p^{2} (1-p)^r

となります。プロットしてみると、

ps = np.linspace(0, 1, 11)
probs = []
for p in ps:
    probs.append(get_probability(p, k=2))

plt.plot(ps, probs, 'o-')
plt.xlabel('Winning percentage, p')
plt.ylabel('Probability of Udemae-keep, P')
plt.grid()
#plt.savefig('Udemae_up_3.png')
plt.show()

勝率p=50%の時は、8割以上の確率でウデマエキープできるはずってね。だからこそ落ちた時は、とても凹むんだけれども。(ウデマエメーターのスタートに依るので、ウデマエキープのために3回や4回勝たなくてはいけないこともあります。)

おわりに

何回かチャレンジすれば、勝率5割でもウデマエアップできる確率が大きくなるので、自分の感覚は合っていました。まぁ、勝率5割が難しいんですけど。ガチマッチは2時間でルールが変わっていきますが、2時間では1~1.5回くらいしかチャレンジできないので、容易に時間が溶けます。

ちなみに、スプラトゥーン3ではウデマエの仕組みも変わるようです(この記事の賞味期限もあとわずか)。