3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonAdvent Calendar 2022

Day 10

Pythonで二項分布を使って確率pのガチャをN回まわした時に何回当たりを引けるか可視化する

Last updated at Posted at 2022-12-10

二項分布とは

 二項分布(Binomial Distribution)とは、互いに独立したベルヌーイ試行をn回行ったときに、ある事象が何回起こるかの確率分布です。例えば、「コインを5回投げた時に表2回出る確率」「SRの出現割合が1%のガチャを100回まわして1回SRを引ける確率」などを表した確率分布です。

 ※ベルヌーイ試行・・・「成功か失敗か」「表か裏か」「勝ちか負けか」のように2種類のみの結果しか得られないような実験、試行のこと

 二項分布は科学技術計算でよく使われるライブラリSciPyにあるstatsを使用して計算することができます。

確率50%のコインを10回投げて表が出る確率の二項分布の例

 まずは簡単に例題としてコインを10回投げた時の表の出る確率の二項分布を表示してみます。pは確率、nは試行回数を入力します。
 

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

plt.style.use("seaborn-darkgrid")

n = 10 #試行回数
p = 0.5 #確率
x = np.arange(n + 1)

plt.bar(x, stats.binom.pmf(x, n, p))
plt.xlabel('number of successes')
plt.ylabel('probability')

出力結果

Qiita_2022-12-10_3.png

 このグラフでは、5回ほど表が確率が最も高くだいたい25%、そして9回、11回ほど表が出る確率が同じくらいで約20%ということがわかります。

確率1%の当たりのガチャを100回まわした確率の二項分布の例

 そして上記のコードのnとpの値を変えれば、確率1%(p=0.01)のガチャを100回(n=100)まわした時に当たりが何回出るかをグラフ化することができます。

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

plt.style.use("seaborn-darkgrid")

n = 100 #試行回数
p = 0.01 #確率
x = np.arange(n + 1)

plt.bar(x, stats.binom.pmf(x, n, p))
plt.xlim(-1, 10) #X軸の表示範囲を指定
plt.xlabel('number of successes')
plt.ylabel('probability')

出力結果

Qiita_2022-12-10_4.png

 グラフから確率1%のガチャを100回まわした場合、1回当たりが出る確率はだいたい36%程度で、0回もほぼ同じ確率ということがわかります。

確率1%の当たりのガチャを100回、200回、300回とまわしてみた場合の比較

 それでは上記のコードに少し手を加えて最後に確率1%の当たりのガチャを100回、200回、300回とまわしてみた場合の二項分布を比較をしてみたいと思います。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

plt.style.use("seaborn-darkgrid")

def show_binom(x, n, p):
    plt.bar(x, stats.binom.pmf(x, n, p), alpha=0.5, label=r"$N$:"+str(n))

p = 0.01 #確率

n = 100 #試行回数
x = np.arange(n + 1)
show_binom(x, n, p)

n = 200 #試行回数
x = np.arange(n + 1)
show_binom(x, n, p)

n = 300 #試行回数
x = np.arange(n + 1)
show_binom(x, n, p)

plt.xlim(-1, 12) #X軸の表示範囲を指定
plt.xlabel('number of successes')
plt.ylabel('probability')
plt.legend()
plt.show()

出力結果

Qiita_2022-12-10_5.png

 この結果を見ると、当たりの確率1%のガチャを300回まわしても、5%ぐらいの確率で当たりが出ないということがわかりますね。

まとめ

 ガチャってやっぱり怖いね。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?