もうキャンペーン自体は終わりましたが...
PayPayが無料になる確率=10%
これを二項分布の公式をもとに複数回くじを引いたときに
回数ごとに少なくとも1回は当たりを引ける確率をプログラムして求めてみました。
PayPayが無料になる確率=10%ということは
PayPayが無料にならない確率=90%なので、
離散確率の合計値から0回のみ当たりが出た確率を引けばよいのです。
練習のため既存メソッドは使用していません。
コード
"""
まずは10回トライしてみた場合のあたりを少なくとも一回引く確率について
"""
import matplotlib.pyplot as plt
def print_extend(str, num):
print(f"[{str}]回出る確率は {num} です。")
def combination(n, r):
ans = 1
if r != 0:
mul_n = n
mul_r = r
for num in range(r - 1):
n -= 1
mul_n *= n
r -= 1
mul_r *= r
ans = mul_n / mul_r
return ans
def berno(n, k, p):
c = combination(n, k)
ans = c * p ** k * (1 - p) ** (n - k)
return ans
def berno_print(n, p):
y_axis = []
for i in range(n + 1):
y_axis.append(berno(n, i, p))
print_extend(i, berno(n, i, p))
def berno_plot(n, p):
y_axis = []
x_axis = []
for i in range(n + 1):
y_axis.append(berno(n, i, p))
x_axis.append(i)
fig, axe = plt.subplots()
axe.set_title("berno_plot")
axe.set_xlabel('k')
axe.set_ylabel('probability')
axe.grid()
axe.plot(x_axis, y_axis)
plt.xticks(x_axis)
plt.savefig("berno_plot.png")
plt.show()
berno_print(10, 0.1)
berno_plot(10, 0.1)
"""
実行結果
[0]回出る確率は 0.3486784401000001 です。
[1]回出る確率は 0.3874204890000001 です。
[2]回出る確率は 0.19371024450000007 です。
[3]回出る確率は 0.05739562800000002 です。
[4]回出る確率は 0.011160261000000003 です。
[5]回出る確率は 0.0014880348000000005 です。
[6]回出る確率は 0.00013778100000000007 です。
[7]回出る確率は 8.748000000000003e-06 です。
[8]回出る確率は 3.6450000000000023e-07 です。
[9]回出る確率は 9.000000000000004e-09 です。
[10]回出る確率は 1.0000000000000006e-10 です。
"""
ここでは10回の試行のうち0回出る確率が
約34.87%なので65.13%の確率で無料になるということですね。意外と低いです。
10回、20回、30回〜100回試行における確率を計算してみます。一つ一つやっていては面倒なのでforで回します。
sum_list=[]
for num in np.linspace(0, 100, 11):
total=(1 - berno(num, 0, 0.1)) * 100
sum_list.append(total)
print(int(num), "回試行時少なくとも1回当たる確率", total, "%")
fig, axe = plt.subplots()
axe.set_xlabel('k/10')
axe.set_ylabel('probability')
axe.grid()
axe.plot(sum_list)
plt.savefig("berno_total_plot.png")
plt.show()
"""
実行結果
0 回試行時少なくとも1回当たる確率 0.0 %
10 回試行時少なくとも1回当たる確率 65.13215599 %
20 回試行時少なくとも1回当たる確率 87.84233454094307 %
30 回試行時少なくとも1回当たる確率 95.76088417247838 %
40 回試行時少なくとも1回当たる確率 98.52191170585654 %
50 回試行時少なくとも1回当たる確率 99.484622479268 %
60 回試行時少なくとも1回当たる確率 99.82029897000857 %
70 回試行時少なくとも1回当たる確率 99.93734212517822 %
80 回試行時少なくとも1回当たる確率 99.97815254994717 %
90 回試行時少なくとも1回当たる確率 99.99238226519542 %
100 回試行時少なくとも1回当たる確率 99.99734386011124 %
"""
少なくとも30回試行すれば95%圏内に入ることがわかりました。
コンビニなどの決済では大丈夫でも家電で狙うには意外とシビアな確率だったんですね。