こんばんは、ぱそきいろです。
モンティホール問題に続いて誕生日のパラドックスをPythonで試していきます。
タイトルの日向坂は現在22人です。
直感で同じ誕生日はいなさそうですが。。。笑
よろしくお願いします。
誕生日のパラドックス
何人集まれば、その中に誕生日が同一の2人(以上)がいる確率が、50%を超えるか?
直感でどれくらいだと思いますか?
最初聞いたときは直感で100人くらいと思った気がします。
正解は23人です。
(解説はwikipediaを見てください)
「自分と他の22人」とみるから確率が低そうに思えるだけで、「その他の人と、他の22人」も同じ可能性があるので23人でも同じ誕生日の人がいるんですね。
(日向坂は22人だから微妙なところ...!)
方針
i人の誕生日を生成します。
その中に同じ誕生日の人が複数いるかを調べます。
それを1万回繰り返して、誕生日が同じになる確率を調べます。
i人を1~70人まで増やしてどのように確率が変わるかを可視化します。
コード
上記の方針をコードにしていきます。
別に日付型にする必要がなく
「1~365の数字をi個生成して、重複があるか」
という問題に落とし込めるのですが、問題の雰囲気を尊重して日付型で生成します。笑
if __name__ == '__main__': #別に日付型を使う必要がないのですが、問題文に合わせておきます。笑 firstdate=datetime.datetime(2020,4,1) birthdays=[] output=[] n=10000 classnum=70 #クラスの人数を0~70人まで増やす for i in range(classnum): print(i) count=0 #10000回試してみる for j in range(n): birthdays=[] for k in range(i): num=random.randint(0,365) birthdays.append(firstdate.date()+datetime.timedelta(days=num)) #コレクション型で重複を無くす c=collections.Counter(birthdays) #i人ではなかった場合、重複があるのでカウントする if len(c)!=i: count+=1 output.append(count/n) print(output) fig=plt.figure() plt.bar([i for i in range(classnum)],output) fig.savefig("output.png")
結果
結果のグラフを表します。
棒グラフじゃなくて折れ線グラフで良かった。。。
きれいな曲線になっていますね。
大体23人くらいのところで確率が0.5(50%)になってそうです。
50人を超えるとほぼ100%になりますね。
ちなみに完全な100%になるのは鳩の巣原理より367人です。
日向坂46に同じ誕生日の人はいるのか
最近ハマってる日向坂に同じ誕生日があるのか見てみます。
(ここからはIT関係なくただの趣味です笑)
ちなみに、日向坂の人数は22人です。
同じ誕生日がいるか微妙なところ!
公式サイトに誕生日があるので調べてみます。
メンバー | 日向坂46公式サイト
誕生日順でソートしてみると・・・
いました!!
森本茉莉と山口陽世が同じ誕生日ですね!!
まさかの新三期の二人が同じ誕生日。笑
まぁ何がともあれ確率が確認できたので良かったです。
まとめ
日向坂を題材にしましたが、誕生日のパラドックスが確認できましたね。
数式で確認できているのですが、実際にコードを動かして確かめるのも楽しいです。
ありがとうございました。