ベルヌーイ分布は、「成功」か「失敗」の2つの結果しかない試行を表す、もっとも基本的な離散型確率分布である。
日常生活でも、ベルヌーイ分布に従う現象は数多く存在する。コイン投げで表が出るか裏が出るか、製品が良品か不良品か、患者が回復するかしないか、顧客が購入するかしないかなど、結果が2通りしかない状況はすべてベルヌーイ分布で表現できる。
ベルヌーイ分布は二項分布の基礎となる分布であり、独立なベルヌーイ試行を繰り返したときの成功回数が二項分布に従う。機械学習における二値分類やロジスティック回帰など、多くの手法の理論的基盤となっている。
定義
2つの結果のうち、いずれか一方が起こる試行を考える。一方の結果を「成功」、もう一方を「失敗」と呼ぶ。成功の起こる確率を p(0 < p < 1)とする。このような試行をベルヌーイ試行(Bernoulli trial)という。
確率変数 X を、成功のとき 1、失敗のとき 0 をとるように定義する。このとき X の従う分布をベルヌーイ分布(Bernoulli distribution)といい、\text{Bin}(1, p) または \text{Bernoulli}(p) と表す。
q = 1 - p とおくと、次のようにも書ける。
具体的に値を代入すると
- P(X = 0) = p^0 q^1 = q = 1 - p(失敗の確率)
- P(X = 1) = p^1 q^0 = p(成功の確率)
確率分布のグラフ
ベルヌーイ分布は x = 0 と x = 1 の2点でのみ確率をもつ。以下は p = 0.3 の場合のグラフである。
p が大きくなると x = 1 の確率が大きくなり、グラフの形が変化する。p = 0.5 のとき、2つの棒の高さが等しくなる。
期待値と分散
期待値
ベルヌーイ分布の期待値は次のように求められる。
期待値が成功確率 p そのものに等しいのは直感的にも理解しやすい。
分散
分散は V[X] = E[X^2] - (E[X])^2 から求める。X は 0 か 1 しかとらないので、X^2 = X が成り立つ。したがって
よって分散は
分散 V[X] = p(1-p) は p = 0.5 のとき最大値 0.25 をとる。p が 0 または 1 に近づくと、結果がほぼ確定的になるため分散は小さくなる。
ベルヌーイ分布 \text{Bin}(1, p) では
- 期待値:E[X] = p
- 分散:V[X] = p(1-p)
- 分散は p = 0.5 で最大
確率母関数
確率母関数(probability generating function)は次のように求められる。
この確率母関数は二項分布との関係で重要な役割を果たす。独立なベルヌーイ試行を n 回繰り返したとき、成功回数の確率母関数は (ps + q)^n となり、これが二項分布の確率母関数である。
二項分布との関係
ベルヌーイ分布は二項分布 \text{Bin}(n, p) の特殊ケース(n = 1)である。
独立なベルヌーイ試行 X_1, X_2, \ldots, X_n(各 X_i \sim \text{Bin}(1, p))を考えると、その和
は二項分布 \text{Bin}(n, p) に従う。つまり、二項分布は「ベルヌーイ試行を n 回繰り返したときの成功回数の分布」である。
この関係から、二項分布の期待値と分散は次のように導ける。
簡単な計算例
例1:バスケットボールのフリースロー
あるバスケットボール選手のフリースロー成功率は70%である。この選手が1本のフリースローを打つとき、成功を 1、失敗を 0 とする確率変数 X の期待値と分散を求めよ。
【解答】
X は p = 0.7 のベルヌーイ分布に従う。
例2:Webサイトの購入率
あるオンラインショップでは、訪問者が商品を購入する確率が5%である。ランダムに選んだ1人の訪問者について、購入を 1、非購入を 0 とする確率変数 X の確率関数、期待値、分散を求めよ。
【解答】
X は p = 0.05 のベルヌーイ分布に従う。
確率関数:
- P(X = 0) = 1 - 0.05 = 0.95
- P(X = 1) = 0.05
標準偏差は \sigma = \sqrt{0.0475} \approx 0.218 である。
練習問題
X は p = 0.4 のベルヌーイ分布に従う。
f(p) = p(1-p) = p - p^2 を p で微分すると
f'(p) = 0 より p = 0.5
f''(p) = -2 < 0 より、これは最大値である。
よって p = 0.5 のとき分散は最大値 0.5 \times 0.5 = 0.25 をとる。
確率母関数は
s = 2 を代入すると
まとめ
| 項目 | 内容 |
|---|---|
| 分布名 | ベルヌーイ分布(Bernoulli distribution) |
| 記法 | \text{Bin}(1, p) または \text{Bernoulli}(p) |
| 確率関数 | P(X = x) = p^x (1-p)^{1-x} (x = 0, 1) |
| 期待値 | E[X] = p |
| 分散 | V[X] = p(1-p) |
| 確率母関数 | G(s) = ps + (1-p) |
| 二項分布との関係 | \text{Bin}(n, p) の n = 1 の場合 |
Pythonで実装する
Pythonを使ってベルヌーイ分布の計算やシミュレーションを行う。
import numpy as np
from scipy import stats
# パラメータ設定
p = 0.3 # 成功確率
# 期待値と分散(理論値)
E_X = p
V_X = p * (1 - p)
print("=== ベルヌーイ分布(p=0.3)===")
print(f"期待値(理論値): E[X] = {E_X}")
print(f"分散(理論値) : V[X] = {V_X}")
print(f"標準偏差 : σ = {np.sqrt(V_X):.4f}")
# scipy.statsを使用した計算
dist = stats.bernoulli(p)
print(f"\nscipy.statsによる計算:")
print(f"期待値: {dist.mean()}")
print(f"分散 : {dist.var()}")
# 確率関数の確認
print(f"\n確率関数 P(X=x):")
print(f" P(X=0) = {dist.pmf(0):.4f}")
print(f" P(X=1) = {dist.pmf(1):.4f}")
# 確率母関数の計算
s = 2
G_s = p * s + (1 - p)
print(f"\n確率母関数 G({s}) = {G_s}")
# シミュレーション
np.random.seed(42)
n_samples = 10000
samples = stats.bernoulli.rvs(p, size=n_samples)
print(f"\nシミュレーション(n={n_samples}):")
print(f"標本平均: {np.mean(samples):.4f}")
print(f"標本分散: {np.var(samples, ddof=0):.4f}")
print(f"成功の割合: {np.sum(samples)/n_samples:.4f}")
シミュレーション結果が理論値(期待値0.3、分散0.21)に近い値を示しており、大数の法則により標本サイズを増やすほど理論値に収束する。