コインの表が出る確率 $\theta$ を推定したいとします。10回投げて7回表が出ました。$\theta$ の最尤推定値は $7/10 = 0.7$ ですが、この推定値にどの程度の不確実性があるでしょうか?$\theta$ は0から1の間の値を取る連続的な未知パラメータであり、その不確実性を確率分布として表現したい — このような場面で登場するのがベータ分布(beta distribution)です。
ベータ分布は「0から1の間の値を取る確率変数」を記述する最も柔軟な分布であり、ベイズ統計学において不可欠な役割を果たします。
- ベイズ推定: 二項分布(成功/失敗)の確率パラメータの事前分布・事後分布
- A/Bテスト: コンバージョン率の不確実性のモデリング
- 順序統計量: 一様分布の順序統計量はベータ分布に従う
- プロジェクト管理: PERT法でのタスク所要時間の推定
- 遺伝学: 対立遺伝子頻度のモデリング
本記事の内容
- ベータ関数とベータ分布の定義
- パラメータ $\alpha, \beta$ の直感的な解釈
- 期待値・分散・最頻値の導出
- 二項分布の共役事前分布としての性質
- Pythonでの実装と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
ベータ関数
ベータ関数はガンマ関数で表されます。
$$ \begin{equation} B(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha + \beta)} = \int_0^1 t^{\alpha-1}(1-t)^{\beta-1} dt \end{equation} $$
ベータ関数はベータ分布の正規化定数として機能します。
ベータ分布の定義
確率密度関数
$X \sim \text{Beta}(\alpha, \beta)$($\alpha > 0, \beta > 0$)のとき
$$ \begin{equation} f(x) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)}, \quad 0 < x < 1 \end{equation} $$
パラメータの直感的な解釈
$\alpha$ と $\beta$ を疑似観測数として解釈できます。
- $\alpha – 1$: 観測された「成功」の回数
- $\beta – 1$: 観測された「失敗」の回数
- $\alpha + \beta – 2$: 総観測数
$\alpha = \beta = 1$ のとき、ベータ分布は一様分布 $\text{Uniform}(0, 1)$ になります(何の情報もない状態)。$\alpha$ が大きいと分布は1に近い値に集中し(成功が多い)、$\beta$ が大きいと0に近い値に集中します(失敗が多い)。
期待値・分散・最頻値
期待値
$$ E[X] = \int_0^1 x \cdot \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha,\beta)} dx = \frac{B(\alpha+1, \beta)}{B(\alpha, \beta)} = \frac{\Gamma(\alpha+1)\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\alpha+\beta+1)} = \frac{\alpha}{\alpha + \beta} $$
$$ \begin{equation} E[X] = \frac{\alpha}{\alpha + \beta} \end{equation} $$
分散
$$ \begin{equation} \text{Var}(X) = \frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)} \end{equation} $$
$\alpha + \beta$ が大きいほど分散は小さくなります(データが多いほど不確実性が減少)。
最頻値(モード)
$\alpha > 1$ かつ $\beta > 1$ のとき
$$ \text{Mode} = \frac{\alpha – 1}{\alpha + \beta – 2} $$
共役事前分布としてのベータ分布
二項尤度とベータ事前分布
$n$ 回のベルヌーイ試行で $k$ 回成功したとき、パラメータ $\theta$ の尤度は
$$ p(k | \theta) \propto \theta^k (1-\theta)^{n-k} $$
事前分布として $\theta \sim \text{Beta}(\alpha_0, \beta_0)$ を設定すると
$$ p(\theta | k) \propto \theta^k (1-\theta)^{n-k} \cdot \theta^{\alpha_0-1}(1-\theta)^{\beta_0-1} = \theta^{\alpha_0+k-1}(1-\theta)^{\beta_0+n-k-1} $$
これは $\text{Beta}(\alpha_0 + k, \beta_0 + n – k)$ の核です。
$$ \begin{equation} \theta | k \sim \text{Beta}(\alpha_0 + k, \beta_0 + n – k) \end{equation} $$
事後分布もベータ分布になる — この性質を共役性と呼びます。
事後平均は
$$ E[\theta | k] = \frac{\alpha_0 + k}{\alpha_0 + \beta_0 + n} $$
これは事前平均 $\alpha_0/(\alpha_0+\beta_0)$ と最尤推定値 $k/n$ の加重平均と解釈できます。
Pythonでの実装と可視化
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# (a) 異なるα,βでのPDF
ax = axes[0, 0]
x = np.linspace(0.001, 0.999, 500)
params = [(1, 1), (2, 2), (5, 5), (2, 5), (5, 2), (0.5, 0.5)]
for a, b in params:
pdf = stats.beta.pdf(x, a, b)
ax.plot(x, pdf, linewidth=2, label=f'Beta({a}, {b})')
ax.set_xlabel('x', fontsize=12)
ax.set_ylabel('f(x)', fontsize=12)
ax.set_title('Beta Distribution PDF', fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 4)
# (b) ベイズ更新の逐次可視化
ax = axes[0, 1]
alpha0, beta0 = 1, 1 # 一様事前分布
np.random.seed(42)
true_theta = 0.7
data = np.random.binomial(1, true_theta, 50)
steps = [0, 1, 5, 10, 20, 50]
colors = plt.cm.viridis(np.linspace(0, 0.9, len(steps)))
for step, color in zip(steps, colors):
k = np.sum(data[:step])
n = step
a_post = alpha0 + k
b_post = beta0 + n - k
pdf = stats.beta.pdf(x, a_post, b_post)
ax.plot(x, pdf, linewidth=2, color=color,
label=f'n={n}, k={k}: Beta({a_post},{b_post})')
ax.axvline(true_theta, color='red', linestyle='--', linewidth=2,
label=f'True $\\theta$={true_theta}')
ax.set_xlabel('$\\theta$', fontsize=12)
ax.set_ylabel('$p(\\theta|data)$', fontsize=12)
ax.set_title('Sequential Bayesian Update\nBeta-Binomial Model', fontsize=12)
ax.legend(fontsize=7, loc='upper left')
ax.grid(True, alpha=0.3)
# (c) 事前分布の強さ(α+β)の影響
ax = axes[1, 0]
# 同じ期待値 0.6 で異なる強さ
mean_val = 0.6
strengths = [2, 5, 10, 20, 50, 100]
for s in strengths:
a = mean_val * s
b = (1 - mean_val) * s
pdf = stats.beta.pdf(x, a, b)
ax.plot(x, pdf, linewidth=2,
label=f'$\\alpha+\\beta$={s} → Beta({a:.0f},{b:.0f})')
ax.axvline(mean_val, color='red', linestyle='--', linewidth=1.5)
ax.set_xlabel('$\\theta$', fontsize=12)
ax.set_ylabel('f($\\theta$)', fontsize=12)
ax.set_title(f'Prior Strength: Same mean={mean_val},\ndifferent $\\alpha+\\beta$',
fontsize=12)
ax.legend(fontsize=8)
ax.grid(True, alpha=0.3)
# (d) 事後平均 = 事前平均とMLEの加重平均
ax = axes[1, 1]
n_data = 20
k_data = 14 # 20回中14回成功
mle = k_data / n_data
alpha0_range = np.linspace(0.1, 50, 200)
beta0_range = alpha0_range # α0 = β0(事前平均 = 0.5)
post_mean = (alpha0_range + k_data) / (alpha0_range + beta0_range + n_data)
ax.plot(alpha0_range + beta0_range, post_mean, 'b-', linewidth=2.5,
label='Posterior mean')
ax.axhline(mle, color='red', linestyle='--', linewidth=1.5,
label=f'MLE = {mle}')
ax.axhline(0.5, color='green', linestyle=':', linewidth=1.5,
label='Prior mean = 0.5')
ax.set_xlabel('$\\alpha_0 + \\beta_0$ (prior strength)', fontsize=12)
ax.set_ylabel('$E[\\theta | data]$', fontsize=12)
ax.set_title(f'Posterior Mean: Weighted Average\nn={n_data}, k={k_data}',
fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('beta_distribution.png', dpi=150, bbox_inches='tight')
plt.show()
この可視化から、ベータ分布の豊かな表現力と共役性が確認できます。
-
左上(PDF): $\alpha = \beta$ で対称、$\alpha > \beta$ で右に偏り、$\alpha < \beta$ で左に偏ります。$\alpha = \beta = 1$ は一様分布、$\alpha = \beta = 0.5$ はU字型です。2つのパラメータだけで非常に多様な形状を表現できます。
-
右上(ベイズ更新): データが増えるにつれて事後分布が真の $\theta = 0.7$ の周りに集中していきます。$n = 0$ の一様分布から始まり、$n = 50$ では非常にシャープなピークになっています。
-
左下(事前分布の強さ): $\alpha + \beta$ が「事前情報の強さ」を制御します。$\alpha + \beta = 2$(弱い事前情報)では広い分布ですが、$\alpha + \beta = 100$ では非常に集中しています。
-
右下(事後平均の挙動): 事前の強さが弱い($\alpha_0 + \beta_0$ が小さい)とき事後平均はMLE(0.7)に近く、事前の強さが強い($\alpha_0 + \beta_0$ が大きい)とき事前平均(0.5)に引き寄せられます。事後平均は常にMLEと事前平均の間にあります。
まとめ
本記事では、ベータ分布の定義・性質・ベイズ統計での役割を解説しました。
- ベータ分布 $f(x) = x^{\alpha-1}(1-x)^{\beta-1}/B(\alpha,\beta)$ は $[0,1]$ 上の最も柔軟な分布
- 期待値 $\alpha/(\alpha+\beta)$、分散 $\alpha\beta/((\alpha+\beta)^2(\alpha+\beta+1))$
- パラメータは「疑似観測数」として解釈でき、$\alpha+\beta$ が事前情報の強さを制御
- 二項分布の共役事前分布: 事後分布 $\text{Beta}(\alpha+k, \beta+n-k)$
- 事後平均は事前平均とMLEの加重平均
次のステップとして、以下の記事も参考にしてください。