統計学入門 第4章の問題 4.4 誕生日の問題
誕生日の問題
問題
人の集団の中に同じ誕生日の人が少なくとも2人ある確率は
であることを示せ。さらに5, 10, 15, 20~25, 30m 35, 40, 50, 60に対してを計算せよ。
解答
人の中で誰も誕生日が被らない時、の可能性のうち、1人目が通り、2人目が通り、3人目が通り、、人目が通りあります。よって、人いても誰も誕生日が被らない確率は
です。よって求める「人の中で少なくとも1組は誕生日が同じになる」確率は
となります。
プログラムを使って計算してみる
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")
この結果は

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