その人数の部屋を1万個つくって、誕生日をくじ引きします。理論値に寄るはずです。
「自分と同じ誕生日の人」を探していると思うから、少なく感じます。実際に数えているのはすべてのペアです。
23人なら、自分がからむ組み合わせは22通りしかありません。でも部屋全体では
23×22÷2=253通りのペアがあります。
11倍以上見ているので、当たりやすいのは当然でした。
ちなみに「自分と同じ誕生日」が50%を超えるには253人必要です。
| 集まり | 人数 | ペアがいる確率 |
|---|
「教室に何人いれば、同じ誕生日のペアが50%の確率でいるか」——答えは23人です。頭では計算できても直感には反する、この誕生日のパラドックスを、読むだけでなく動かして自分で試せるようにしたのがこのページです。中身は5つあります。2人から80人まで動かすと確率が即座に変わる人数スライダー(身近な人数のチップつき)、その人数の部屋を1万個つくって誕生日をくじ引きし理論値に寄ることを見せるシミュレーション(最初の200部屋は色つきの点で表示)、誤解の正体を左右に並べる比較、2人から80人までの2本の曲線を描くグラフ、そして身近な人数の表です。計算もシミュレーションもすべてブラウザの中で行っていて、外部ライブラリは使っていません。
23人が少なく感じるのは、「自分と同じ誕生日の人」を探していると思い込んでしまうからです。実際に数えているのはすべてのペアで、23人なら 23×22÷2 = 253通りあります。自分がからむのはそのうち22通りだけなので、私たちは直感の11倍以上を見ていることになります。数字で並べると、23人で「誰かと誰かが同じ」になる確率は50.7%、「自分と同じ」になる確率は6.1%です。「自分と同じ」のほうが50%を超えるには、253人が必要になります。
確率は、全員の誕生日がバラバラである確率 365/365 × 364/365 × … を掛け合わせ、それを1から引いて求めています。ただし掛け算をそのまま回すと桁が飛んでしまうため、対数で足してから戻す方法をとっています。なお365人の場合、数学的には全員バラバラの確率がまだ1未満(およそ 1.45e-157)ですが、倍精度では 1 - 1.45e-157 が 1 に丸まってしまいます。これは実装の誤りではなく浮動小数点の限界で、テストにもその旨を書いてあります。366人については鳩の巣原理により早期に1を返します。
前提として、うるう年(2月29日)は扱っていません。365日すべてが同じ確率で生まれるものとして計算しています。実際の出生日には季節の偏りがあり、偏りがあると同じ日に集まりやすくなるため、確率はここで示した値よりさらに上がります。ロジックは birthday.test.js で30件のテストにかけていて、教科書的に知られている値と突き合わせています(23人=50.7%、30人=70.6%、50人=97.0%、70人=99.9%、99%を超えるのは57人、自分と同じが50%を超えるのは253人)。シミュレーションについても、2万部屋で理論値±1.5ポイントに入ることを検査しています。