Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで解く誕生日のパラドックス!確率計算の仕組みとサンプルコード

誕生日のパラドックスとは?

誕生日のパラドックス(Birthday Paradox)は、確率論における最も有名な問題のひとつです。直感に反する結果が得られることから「パラドックス(逆説)」と呼ばれています。

問題設定: 誕生日パーティーに集まった人々の中に、同じ誕生日の人(誕生日の衝突)がいる確率を考えます。同じ誕生日を持つ人が存在する確率がある値に達するためには、およそ何人の人が必要かを求めるのがこの問題の目的です。

直感とのギャップ

確率の世界では、コインを投げて表が出る確率は 1/2 です。同様に、コインを10回投げてすべて表になる確率は約 1/1000(0.001)程度しかありません。このように、まれな出来事は起こりにくいというのが私たちの直感的な感覚です。

しかし、誕生日については話が変わります。実際には「23人いれば半分以上の確率で誰かが同じ誕生日」という結果になり、多くの人にとって意外に感じられるでしょう。

確率の計算方法

まず、2人の誕生日が異なる確率を考えてみましょう。うるう年ではない365日からなる年では、ある人に対して別の人が異なる誕生日である確率は次のようになります。

364/365 = 1 − 1/365

ここで、最初の人物が特定の誕生日を持つ確率は「1」であり、それ以降の人物については、すでに使われた日付を避ける確率を掛け合わせていきます。

P(異なる) = 1 × (1 − 1/365) × (1 − 2/365) × (1 − 3/365) × …

したがって、少なくとも2人が同じ誕生日である確率は次のように求められます。

P(同じ) = 1 − P(異なる)

目標の確率から必要な人数を求める

たとえば、「同じ誕生日の人がいる確率が70%(0.70)になるには何人必要か」を求めてみましょう。これには次の近似式が使えます。

N = √(2 × 365 × log(1/(1−p)))

p = 0.70 を代入して計算すると、

N = √(2 × 365 × log(1/(1−0.70))) ≈ 30

つまり、同じ誕生日の人が存在する確率が約70%になるのは、およそ30人の場合です。

Pythonでの実装例

上記の式をPythonのコードにすると、次のようになります。

import math

def find_people(p):
    return math.ceil(math.sqrt(2 * 365 * math.log(1 / (1 - p))))

print(find_people(0.70))

実行結果

上記のコードを実行すると、次の出力が得られます。

30

まとめ

誕生日のパラドックスは、組み合わせの爆発によって「偶然の一致」が思ったよりも頻繁に起こることを示す好例です。23人で約50%、30人で約70%という数字は、確率に関する私たちの直感を覆す興味深い結果といえるでしょう。Pythonのようなプログラミング言語を使えば、こうした確率計算も簡単に検証できます。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. Pythonで作る誕生日リマインダーアプリケーションの完全ガイド

    この記事では、Pythonを使って誕生日リマインダーアプリケーションを作成する方法を解説します。当日の誕生日を自動的にチェックし、デスクトップ通知で教えてくれる便利なツールを、初心者でも理解できるようにステップごとに説明していきます。 課題の定義 まず、このアプリケーションに求められる要件を整理しましょう。 Pythonで、当日が登録済みの人物の誕生日かどうかを判定できること 誕生日の人物がいれば、その人の名前とともにシステムへ通知を送信すること このアプリケーションでは、日付・月・氏名を保存した「ルックアップファイル(照合用データファイル)」が必要です。ファイルのイメージは以下の通りです