今回は直感に反する確率の逆説の問題集です
解説動画はこちら
解説動画はこちら
直感に反する確率の問題
なんとなくコレかなと思ったけど
答えはそれと違っていたというような
直感に反する答えが出そうな問題です。
問題とともに
回答に使用したコードを載せておきます。
なんとなくコレかなと思ったけど
答えはそれと違っていたというような
直感に反する答えが出そうな問題です。
問題とともに
回答に使用したコードを載せておきます。
1.確率の逆説
第1問
サイコロを2回振るとき 少なくとも1回は1が出る確率は
1. 3分の1より小さい
2. ちょうど3分の1(33.3%)
3. 3分の1より大きい
第3問
コインを4回投げてすべて表が出た場合、次の投げで裏が出る確率は
答えは
シミュレーションプログラムを実行するか
動画をご覧ください。
そんなに確率高くないだろうと思っていたら
意外と高い確率だったり
意外と低かったり
そんなこともあるんじゃないかと思います。
プログラムを使えば
色々シミュレーションして
おおよその確率を求めることができるので
さまざまな事象の確率を求めたいなら
プログラミングを習得するのが
おすすめです。
今回はここまでです
それでは。
# サイコロを2回振るとき 少なくとも1回は1が出る確率
import random
num = 1000000
count = 0
for _ in range(num):
dices = [random.choice([1,2,3,4,5,6]),random.choice([1,2,3,4,5,6])]
if 1 in dices:
count+=1
print(f"少なくとも1が1回はでた回数 : {count}")
print(f"{count * 100 / num}%")
第2問
学校のクラス30人の生徒の中に誕生日が同じ人がいる確率は
1. 約30%
2. 約50%
3. 約70%
4. 約90%
# n人の生徒の中に誕生日が同じ人がいる確率
import random
from collections import Counter
birthdays = list(range(365))
num = 30
cnt, all_cnt = 0,0
for i in range(1000000):
all_cnt+=1
tmp = random.choices(birthdays,k=num)
c = Counter(tmp)
mx = c.most_common(1)
if mx[0][1]>1:
cnt+=1
print(f"誕生日が同じ人がいた回数 : {cnt}")
print(f"誕生日が同じ人がいる確率 : {cnt * 100 /all_cnt}%")
2.ギャンブラーの誤謬
過去の結果が現在の結果に影響すると誤って考える心理
第3問
コインを4回投げてすべて表が出た場合、次の投げで裏が出る確率は
1. 50%より小さい
2. ちょうど50%
3. 50%より大きい
# コインを投げて4回表が出た後の出目の確率
import random
def simulate_coin_tosses(trials):
result = {'表':0,'裏':0}
coins = [random.choice(['表', '裏']) for _ in range(trials)]
for i in range(0, trials-5):
if coins[i:i+4] == ['表', '表', '表', '表']:
next = coins[i+4]
result[next]+=1
return result['表'], result['裏']
# 試行回数
k = 1000000
total_heads, total_tails = simulate_coin_tosses(k)
print(f"試行回数: {k}")
print(f"表の合計回数: {total_heads}")
print(f"裏の合計回数: {total_tails}")
print(f"4回表が出た後の裏が出る確率は : {total_tails * 100 / (total_heads + total_tails):.6}%")
第4問
コインを1000回投げた時に、連続して表が出る最高回数は
1. 8回より少ない
2. 8-10回くらい
3. 10回より多い
# コインをnum回投げて、連続して表が出る最高回数
import random
def max_consecutive_heads(trials):
coins = [random.choice(['表', '裏']) for _ in range(trials)]
#print(coins)
#print(f"表の数 : {coins.count('表')}")
max_count, current_count = 0, 0
for coin in coins:
if coin == '表':
current_count += 1
max_count = max(max_count, current_count)
else:
current_count = 0
return max_count
# 試行回数
num = 1000
max_heads = [max_consecutive_heads(num) for _ in range(1000)]
mean_heads = sum(max_heads) / len(max_heads)
print(f"試行回数: {num}")
print(f"連続して出現した表の最高回数: {mean_heads}")
答えは
シミュレーションプログラムを実行するか
動画をご覧ください。
そんなに確率高くないだろうと思っていたら
意外と高い確率だったり
意外と低かったり
そんなこともあるんじゃないかと思います。
プログラムを使えば
色々シミュレーションして
おおよその確率を求めることができるので
さまざまな事象の確率を求めたいなら
プログラミングを習得するのが
おすすめです。
今回はここまでです
それでは。

コメントする