ベータ分布を完全理解 — 共役事前分布としての役割

コインの表が出る確率 $\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()

この可視化から、ベータ分布の豊かな表現力と共役性が確認できます。

  1. 左上(PDF): $\alpha = \beta$ で対称、$\alpha > \beta$ で右に偏り、$\alpha < \beta$ で左に偏ります。$\alpha = \beta = 1$ は一様分布、$\alpha = \beta = 0.5$ はU字型です。2つのパラメータだけで非常に多様な形状を表現できます。

  2. 右上(ベイズ更新): データが増えるにつれて事後分布が真の $\theta = 0.7$ の周りに集中していきます。$n = 0$ の一様分布から始まり、$n = 50$ では非常にシャープなピークになっています。

  3. 左下(事前分布の強さ): $\alpha + \beta$ が「事前情報の強さ」を制御します。$\alpha + \beta = 2$(弱い事前情報)では広い分布ですが、$\alpha + \beta = 100$ では非常に集中しています。

  4. 右下(事後平均の挙動): 事前の強さが弱い($\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の加重平均

次のステップとして、以下の記事も参考にしてください。