1%の確率のガチャを100回引いた時の当たりが出る確率は?

Posted on 2021/05/19 in Mathematics , Updated on: 2021/06/19

はじめに

確率の世界には人間の直感に反する結果を表すことがある。今回はよく話題になる、1%の確率で当たりが出るガチャを100回引くと当たりは出るのかという点を python を使って計算し、グラフで可視化する。

100回に1回当たる確率

ここで考えるガチャは、何度引いても 1% で当たりが出るという確率は変化しないという前提がある(非復元抽出)。つまり、くじ引きのように 100個クジが入っていて、引くたびにクジが減っていくわけではない。このようなくじ引きでは、100回引いて当たりが出る確率は 100%であると容易にわかる。

非復元抽出で、確率 1%のクジを100回引いて、1回でも当たりが出る確率は、100回連続で当たりが出ない確率を求めてそれを 1から引けばいい。100回連続で当たりが出ない確率は、 $$ 0.99^{100} $$ で表される。実際に計算してみると

In [15]:
all_out = 0.99 ** 100
hit_one_more = 1 - all_out

print('100回引いて全てハズレの確率       : 約' + str(round(all_out, 3)*100) + '%')
print('100回引いて1回以上当たりが出る確率 : 約' + str(round(hit_one_more, 3)*100) + '%' )
100回引いて全てハズレの確率       : 約36.6%
100回引いて1回以上当たりが出る確率 : 約63.4%

結果から、このガチャを 100回引いた時、36.6%の確率で一度も当たりをひかないということがわかる。よく100回に一回成功できるチャレンジでも100回続ければ成功するというのは嘘である。

ここで、試行回数ごとに1回以上当たりが出る確率を可視化してみる。

In [63]:
# 試行回数 2,000回を上限として
trial_num = 2000
prob_list = [0]

for i in range(trial_num):
    probability = 1 - (0.99 ** (i+1))
    prob_list.append(probability)

import matplotlib.pyplot as plt
%matplotlib inline
    
plt.figure(figsize=(10, 5))
plt.plot(prob_list, linewidth=2)
plt.xlabel('trial number', fontsize=15)
plt.ylabel('Probability', fontsize=15)

for trial in [100, 250, 500, 750, 1000, 1500, 2000]:
    plt.annotate('{}'.format(round(prob_list[trial], 3)),
                 xy=[trial, prob_list[trial]-0.03],
                 xytext=[trial, prob_list[trial]-0.15],
                 arrowprops=dict(width=3,
                                 headwidth=8,
                                 headlength=8,
                                 facecolor='yellow'))
plt.show()

グラフから、250回の試行で 1回以上当たりが出る確率は、約91.9%となっており、試行回数1000回で、ほぼ100%の確率で一回以上当たりが出る問うことがわかった。