Stepnのレベル2のGemのアップグレードの成功率は55%となっていますが、
そのアップグレードで「3回連続」でハズレを引く経験をしました。
「55%」当たる確率で、3回連続外れるってそんなことありえるのか?
プログラムによる確率は偏りが出るのではないか?
通常、物理的な抽選であれば、100枚の紙の中に55枚の当たりを混ぜれば、確実に55%の確率で当たりが出ます。
しかし、プログラムによる確率はその性質上、完全な確率性を実現することが難しく、少ない試行回数では結果に変動が生じやすくなります。
そこで自分でPythonコードを書いてみてプログラムによる確率の検証をしてみました。
各チェックポイントでの当たりとハズレの確率を記録しました。
このデータを分析することで、プログラムによる確率計算の信頼性を確認したいと思います。
実行するPythonコード
複数回の試行にわたって集計するプログラムの仕様です。
- 1~100の範囲でランダムな数値を出力させ、1~55を「当たり」、56~100を「ハズレ」判定
- 1万回実行する
- 3回、10回、100回、1000回、5000回、1万回の時点で結果を記録
- 試行回数は10回の、1万回 ×10回のトータル10万回の結果を集計
こちらが実行するPythonのコードになります。
import random
# 定数の設定
TRIAL = 10
TARGET_NUMBER = 55
TRIES = 10000
# 当たりとハズレのカウント
hit_count = 0
miss_count = 0
# チェックポイント時点の当たりとハズレの確率を記録
checkpoints = [3, 10, 100, 1000, 5000, 10000]
results = {}
# 結果を試行回数ごとに記録する辞書
for checkpoint in checkpoints:
results[checkpoint] = []
# 複数回の試行を実行
for trial in range(TRIAL):
hit_count = 0
miss_count = 0
trial_results = {}
for i in range(1, TRIES + 1):
number = random.randint(1, 100)
if number <= TARGET_NUMBER:
hit_count += 1
else:
miss_count += 1
if i in checkpoints:
hit_probability = (hit_count / i) * 100
miss_probability = (miss_count / i) * 100
trial_results[i] = (hit_probability, miss_probability)
# 各試行の結果をチェックポイントごとに集約
for checkpoint in checkpoints:
results[checkpoint].append(trial_results[checkpoint])
# 結果を表示
for checkpoint in checkpoints:
print(f"\n{checkpoint}回時点の結果:")
for hit_prob, miss_prob in results[checkpoint]:
print(f"{checkpoint}, {hit_prob:.2f}, {miss_prob:.2f}")
実行結果
各回数ごとの実行した平均結果と10回実行した各結果になります。
3回時点の確率結果
平均結果(トータル検証数30回)
当たり確率: 60.001%
ハズレ確率: 39.999%
10回時点の確率結果
平均結果(トータル検証数100回)
当たり確率: 53%
ハズレ確率: 47%
100回時点の確率結果
平均結果(トータル検証数1000回)
当たり確率: 54.8%
ハズレ確率: 45.2%
1000回時点の確率結果
平均結果(トータル検証数1万回)
当たり確率: 54.65%
ハズレ確率: 45.35%
5000回時点の確率結果
平均結果(トータル検証数5万回)
当たり確率: 54.804%
ハズレ確率: 45.196%
1万回時点の確率結果
平均結果(トータル検証数10万回)
当たり確率: 54.825%
ハズレ確率: 45.175%
当たり率55%で3回連続で外れる可能性は?
55%で当たり、45%はハズレの場合で、3回連続で外れる確率を計算します。
1回の試行で外れる確率は45%になります。
3回連続で45%のハズレを引く確率は「約9%」になります。
それがたまたま最初の一回に来たということです、、
運が悪かったということになります。
まとめ
55%を上回る時もあれば、下回る時もあるのが分かりました。
これはプログラムのランダム性によるものなので致し方ありません。
そして、試行回数が増えるにつれて、
確率は今回設定した55%の理論値に収束していくことが確認できました。
今回は約9%で起こりえる、3回連続で外れてしまうということを初回に引いてしまう経験をしました。
この珍しい現象に遭遇したことが、プログラムを書き、詳細な検証を行う動機となりました。
プログラムまで書いてみて検証してみたのですが、楽しくプログラムが書けてまぁ結果オーライです。
プログラムの確率は理論値に収束するという結果でした。
理論値に収束するということは分かったので、諦めずに挑戦し続けるのも有りかなとも思いました。
以上、Pythonコードでのプログラムによる確率の検証でした。
最後まで読んでいただきありがとうございました。
コメント