統計学入門 第4章の問題 4.4 誕生日の問題

誕生日の問題

問題

rr人の集団の中に同じ誕生日の人が少なくとも2人ある確率は

pr=1(11365)(12365)(13365)(1r1365)=1k=1r(1r1365)\begin{align} p_r &= 1 - \left(1 - \frac{1}{365} \right) \left(1 - \frac{2}{365} \right) \left(1 - \frac{3}{365} \right) \cdots \left(1 - \frac{r - 1}{365} \right) \\ &= 1 - \prod_{k=1}^r \left(1 - \frac{r - 1}{365}\right) \end{align}

であることを示せ。さらに5, 10, 15, 20~25, 30m 35, 40, 50, 60に対してprp_rを計算せよ。

解答

rr人の中で誰も誕生日が被らない時、365r365^rの可能性のうち、1人目が365365通り、2人目が364364通り、3人目が363363通り、\cdotsrr人目が365(r1)365 - (r - 1)通りあります。よって、rr人いても誰も誕生日が被らない確率prcp_r^c

prc=365364363(365(r1))365r=(3651)(3652)(365(r1))365r1=(11365)(12365)(13365)(1r1365)\begin{align} p_r^c &= \frac{365 \cdot 364 \cdot 363 \cdots (365 - (r - 1))}{365^r} \notag \\ &= \frac{(365 - 1) \cdot (365 - 2) \cdots (365 - (r - 1))}{365^{r - 1}} \notag \\ &= \left(1 - \frac{1}{365}\right) \left(1 - \frac{2}{365}\right) \left(1 - \frac{3}{365}\right) \cdots \left(1 - \frac{r - 1}{365}\right) \end{align}

です。よって求める「rr人の中で少なくとも1組は誕生日が同じになる」確率prp_r

pr=1prc=1(11365)(12365)(13365)(1r1365)\begin{align} p_r &= 1 - p_r^c \notag \\ &= 1 - \left(1 - \frac{1}{365}\right) \left(1 - \frac{2}{365}\right) \left(1 - \frac{3}{365}\right) \cdots \left(1 - \frac{r - 1}{365}\right) \end{align}

となります。

プログラムを使って計算してみる

Kotlinを使って計算してみましょう!コードは下記です:
使用しているライブラリはLet’s Plot for Kotlinです。

/*
 * 人数rに対して、少なくとも2人以上が誕生日が同じになる確率を計算する関数
 */
fun getProbabilityAtLeastTwoPeopleShareTheSameBirthday(
    r: Int
): Double {
    var prod = 1.0
    for(i in 1..r) {
        prod *= (1.0 - (i.toDouble() - 1.0)/365.0)
    }
    val result = 1.0 - prod
    return result
}

fun main() {
    val rValues = (0..60).toList()
    val probabilityDistribution = rValues.map { getProbabilityAtLeastTwoPeopleShareTheSameBirthday(it) }
    println("確率分布: $probabilityDistribution")
}

というロジックでコードを組みました。 そしてLets’plot for Kotlinを使用するために下記のように書いておきます(実行不可)。


val rValues = (0..60).toList()
val probabilityDistribution = rValues.map { getProbabilityAtLeastTwoPeopleShareTheSameBirthday(it) }

val data = mapOf(
    "r" to rValues,
    "p" to probabilityDistribution
)

// グラフを描画
letsPlot(data) +
    geomLine(color = "blue") { x = "r"; y = "p" } +
    geomPoint(size = 2.0, color = "red") { x = "r"; y = "p" } +
    ggtitle("Probability of shared birthday (at least 2 people) vs Group size") +
    xlab("Number of people (r)") +
    ylab("Probability p_r")

この結果は

人数rに対して、少なくとも2人以上が誕生日が同じになる確率のプロット

のようになります。学校の典型的なクラスの人数は35人くらいなので(個人経験談)、その確率は約81.4%81.4\%です。 実は、同じクラスに同じ誕生日の組がいること自体はそこまで珍しいことでもないことが分かります。

参考資料