ヘロログ
統計学

二項分布

二項分布は、「成功」か「失敗」の試行を複数回繰り返したときの成功回数の分布を表す、離散型確率分布の代表格である。

コイン投げで表が出る回数、製品検査で不良品が見つかる個数、アンケートで「はい」と答える人数など、二項分布が適用できる場面は非常に多い。機械学習の分類問題における精度評価や、A/Bテストの統計的検定にも用いられる。

二項分布はベルヌーイ分布を一般化したものであり、n = 1 の場合がベルヌーイ分布に相当する。また、試行回数が増えると正規分布に近似できるという重要な性質(中心極限定理)をもつ。

定義

成功確率 p0 < p < 1)のベルヌーイ試行を n 回独立に行うとき、成功回数を Y とする。このとき Y の従う分布を二項分布(binomial distribution)といい、\text{Bin}(n, p) と表す。

二項分布の確率関数
P(Y = y) = {}_n C_y \, p^y (1-p)^{n-y}, \quad y = 0, 1, \ldots, n

ここで {}_n C_y = \dfrac{n!}{y!(n-y)!} は二項係数である。q = 1 - p とおくと

P(Y = y) = {}_n C_y \, p^y q^{n-y}

と書ける。この確率関数は、n 回の試行のうち y 回成功する組合せの数 {}_n C_y と、その特定の組合せが起きる確率 p^y q^{n-y} の積として理解できる。

確率分布のグラフ

二項分布のグラフは、パラメータ np によって形が変わる。以下は n = 10p = 0.3 の場合である。

P(Y=y) 0.30 0.225 0.15 0.075 0 y 0 1 2 3 4 5 6 7 8 9 10 E[Y]=3
図1: 二項分布 Bin(10, 0.3) の確率関数

p = 0.3 のように p < 0.5 の場合は左に偏った形になり、p > 0.5 の場合は右に偏る。p = 0.5 のとき、分布は左右対称になる。

期待値と分散

二項分布の期待値と分散は、ベルヌーイ分布の性質から導ける。Y \sim \text{Bin}(n, p) のとき

Y = X_1 + X_2 + \cdots + X_n

と表せる。ここで X_ii 回目の試行の結果(成功なら1、失敗なら0)であり、各 X_i は独立にベルヌーイ分布 \text{Bin}(1, p) に従う。

期待値

期待値の加法性より

\begin{aligned} E[Y] &= E[X_1] + E[X_2] + \cdots + E[X_n] \\[5pt] &= p + p + \cdots + p = np \end{aligned}
期待値
E[Y] = np

分散

X_1, \ldots, X_n は独立なので、分散も加法性が成り立つ。

\begin{aligned} V[Y] &= V[X_1] + V[X_2] + \cdots + V[X_n] \\[5pt] &= p(1-p) + p(1-p) + \cdots + p(1-p) = np(1-p) \end{aligned}
分散
V[Y] = np(1-p) = npq
ポイント

二項分布 \text{Bin}(n, p) では

  • 期待値:E[Y] = np
  • 分散:V[Y] = np(1-p)
  • 標準偏差:\sigma = \sqrt{np(1-p)}

確率母関数

確率母関数も同様に、ベルヌーイ分布の性質から導ける。X_1, \ldots, X_n が独立なので

\begin{aligned} G(s) &= E[s^Y] = E[s^{X_1 + \cdots + X_n}] \\[5pt] &= E[s^{X_1}] \times E[s^{X_2}] \times \cdots \times E[s^{X_n}] \\[5pt] &= (ps + q)^n \end{aligned}
確率母関数
G(s) = (ps + q)^n = (ps + 1 - p)^n

再生性

二項分布には再生性という重要な性質がある。

二項分布の再生性

Y_1 \sim \text{Bin}(n_1, p)Y_2 \sim \text{Bin}(n_2, p) で、Y_1Y_2 が独立ならば

Y_1 + Y_2 \sim \text{Bin}(n_1 + n_2, p)

これは確率母関数を用いて証明できる。

\begin{aligned} E[s^{Y_1 + Y_2}] &= E[s^{Y_1}] \times E[s^{Y_2}] \\[5pt] &= (ps + q)^{n_1} \times (ps + q)^{n_2} \\[5pt] &= (ps + q)^{n_1 + n_2} \end{aligned}

これは \text{Bin}(n_1 + n_2, p) の確率母関数に一致する。

再生性の直感的な意味は明快である。成功確率 p の試行を n_1 回行った成功回数と、同じ試行を n_2 回行った成功回数を合計すれば、n_1 + n_2 回の試行における成功回数になる。

計算例

例1:コイン投げ

公平なコインを5回投げるとき、表が出る回数 Y は二項分布 \text{Bin}(5, 0.5) に従う。

期待値と分散を求める。

\begin{aligned} E[Y] &= np = 5 \times 0.5 = 2.5 \\[5pt] V[Y] &= np(1-p) = 5 \times 0.5 \times 0.5 = 1.25 \end{aligned}

表がちょうど3回出る確率は

P(Y = 3) = {}_5 C_3 \times 0.5^3 \times 0.5^2 = 10 \times 0.125 \times 0.25 = 0.3125

例2:品質検査

ある工場の不良品率は5%である。20個の製品を検査するとき、不良品の個数 Y\text{Bin}(20, 0.05) に従う。

\begin{aligned} E[Y] &= 20 \times 0.05 = 1 \\[5pt] V[Y] &= 20 \times 0.05 \times 0.95 = 0.95 \end{aligned}

不良品が1個も含まれない確率は

P(Y = 0) = {}_{20} C_0 \times 0.05^0 \times 0.95^{20} = 0.95^{20} \approx 0.358

不良品が1個以上含まれる確率は

P(Y \geq 1) = 1 - P(Y = 0) \approx 1 - 0.358 = 0.642

練習問題

問1. あるバスケットボール選手のフリースロー成功率は80%である。10本のフリースローを打つとき、成功回数 Y の期待値と標準偏差を求めよ。

Y \sim \text{Bin}(10, 0.8) である。

\begin{aligned} E[Y] &= np = 10 \times 0.8 = 8 \\[5pt] V[Y] &= np(1-p) = 10 \times 0.8 \times 0.2 = 1.6 \\[5pt] \sigma &= \sqrt{1.6} \approx 1.265 \end{aligned}
問2. サイコロを12回振るとき、1の目が出る回数 Y について、P(Y = 2) を求めよ。

1の目が出る確率は p = \dfrac{1}{6} なので、Y \sim \text{Bin}\left(12, \dfrac{1}{6}\right) である。

\begin{aligned} P(Y = 2) &= {}_{12} C_2 \times \left(\dfrac{1}{6}\right)^2 \times \left(\dfrac{5}{6}\right)^{10} \\[5pt] &= 66 \times \dfrac{1}{36} \times \left(\dfrac{5}{6}\right)^{10} \\[5pt] &\approx 66 \times 0.0278 \times 0.1615 \approx 0.296 \end{aligned}
問3. Y_1 \sim \text{Bin}(8, 0.4)Y_2 \sim \text{Bin}(12, 0.4) で、Y_1Y_2 が独立のとき、Y_1 + Y_2 の期待値と分散を求めよ。

再生性より Y_1 + Y_2 \sim \text{Bin}(20, 0.4) である。

\begin{aligned} E[Y_1 + Y_2] &= 20 \times 0.4 = 8 \\[5pt] V[Y_1 + Y_2] &= 20 \times 0.4 \times 0.6 = 4.8 \end{aligned}

まとめ

項目 内容
分布名 二項分布(binomial distribution)
記法 \text{Bin}(n, p)
確率関数 P(Y = y) = {}_n C_y \, p^y (1-p)^{n-y} (y = 0, 1, \ldots, n
期待値 E[Y] = np
分散 V[Y] = np(1-p)
確率母関数 G(s) = (ps + 1 - p)^n
再生性 \text{Bin}(n_1, p) + \text{Bin}(n_2, p) = \text{Bin}(n_1 + n_2, p)(独立の場合)

Pythonで実装する

Pythonを使って二項分布の計算やシミュレーションを行う。

binomial_distribution.py
import numpy as np
from scipy import stats
from scipy.special import comb

# パラメータ設定
n, p = 10, 0.3
q = 1 - p

# 期待値と分散(理論値)
E_Y = n * p
V_Y = n * p * q

print(f"=== 二項分布 Bin({n}, {p}) ===")
print(f"期待値(理論値): E[Y] = {E_Y}")
print(f"分散(理論値)  : V[Y] = {V_Y}")
print(f"標準偏差       : σ = {np.sqrt(V_Y):.4f}")

# scipy.statsを使用した計算
dist = stats.binom(n, p)
print(f"\nscipy.statsによる確認:")
print(f"期待値: {dist.mean()}")
print(f"分散  : {dist.var()}")

# 確率関数
print(f"\n確率関数 P(Y=y):")
for y in range(n + 1):
    prob = dist.pmf(y)
    bar = "█" * int(prob * 50)
    print(f"  P(Y={y:2d}) = {prob:.4f} {bar}")

# 累積分布関数
print(f"\nP(Y ≤ 3) = {dist.cdf(3):.4f}")
print(f"P(Y ≥ 5) = {1 - dist.cdf(4):.4f}")

# シミュレーション
np.random.seed(42)
samples = stats.binom.rvs(n, p, size=10000)
print(f"\nシミュレーション(10000回):")
print(f"標本平均: {np.mean(samples):.4f}")
print(f"標本分散: {np.var(samples, ddof=0):.4f}")
=== 二項分布 Bin(10, 0.3) === 期待値(理論値): E[Y] = 3.0 分散(理論値) : V[Y] = 2.1 標準偏差 : σ = 1.4491 scipy.statsによる確認: 期待値: 3.0 分散 : 2.1 確率関数 P(Y=y): P(Y= 0) = 0.0282 █ P(Y= 1) = 0.1211 ██████ P(Y= 2) = 0.2335 ███████████ P(Y= 3) = 0.2668 █████████████ P(Y= 4) = 0.2001 ██████████ P(Y= 5) = 0.1029 █████ P(Y= 6) = 0.0368 █ P(Y= 7) = 0.0090 P(Y= 8) = 0.0014 P(Y= 9) = 0.0001 P(Y=10) = 0.0000 P(Y ≤ 3) = 0.6496 P(Y ≥ 5) = 0.1503 シミュレーション(10000回): 標本平均: 2.9716 標本分散: 2.0536

シミュレーション結果が理論値(期待値3.0、分散2.1)に近い値を示している。確率関数のバーチャートからも、y = 3 付近で最大になる様子が確認できる。