Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 前提:事前・尤度・事後・周辺尤度 | 数理:事前分布・事後分布・ベイズ更新(統計)

要点(BLUF)

1. 事後は「次の事前」になる

データ D1D_1 を見た後の事後を、D2D_2 を見るときの事前として使えます。独立観測なら:

P(θD1,D2)    P(D2θ)P(θD1)P(\theta\mid D_1, D_2)\;\propto\;P(D_2\mid\theta)\,P(\theta\mid D_1)

導出は素直で、同時尤度を分解するだけです:

P(θD1,D2)P(D1,D2θ)P(θ)=P(D2θ)P(D1θ)P(θ)P(θD1)P(\theta\mid D_1,D_2)\propto P(D_1,D_2\mid\theta)P(\theta)=P(D_2\mid\theta)\underbrace{P(D_1\mid\theta)P(\theta)}_{\propto\,P(\theta\mid D_1)}

要するに:きのうの結論(事後)を、きょうの出発点(事前)にする。これを繰り返せばデータが流れてくる状況にそのまま対応できます。

flowchart LR
  P0["事前 Beta(1,1)"] --> U1["+D1"]
  U1 --> P1["事後1"]
  P1 --> U2["+D2"]
  U2 --> P2["事後2(=次の事前)"]
  P2 --> DOTS["…"]
  DOTS --> PN["最終事後 Beta(21,11)"]

2. 逐次 = バッチ(共役ならパラメータの足し算)

全データ D={D1,,Dn}D=\{D_1,\dots,D_n\} を一括で使っても、

P(θD)    [iP(Diθ)]P(θ)P(\theta\mid D)\;\propto\;\Big[\textstyle\prod_{i} P(D_i\mid\theta)\Big]P(\theta)

積の順序は結果を変えないので、1つずつ掛けても一括でも同じ事後です。ベータ–二項の共役(第2章で詳述)では、これは「表が出たら aa を1増やし、裏が出たら bb を1増やす」という驚くほど単純な更新になります。一様事前 Beta(1,1)\mathrm{Beta}(1,1) から始め、nn 回中 kk 回表なら最終事後は Beta(1+k,1+nk)\mathrm{Beta}(1+k,\,1+n-k) です。

3. コードで逐次更新を見て、バッチと一致させる

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import japanize_matplotlib  # 日本語ラベル用

# 真の確率 0.7 のコインを 30 球観測
rng = np.random.default_rng(1)
data = rng.binomial(1, 0.7, size=30)   # 0/1 の列

# 逐次更新:Beta(1,1) から、表(1)で a+1、裏(0)で b+1
a, b = 1, 1
theta = np.linspace(0, 1, 300)
snapshots = {0, 1, 5, 30}
plt.figure(figsize=(7, 4))
for i in range(len(data) + 1):
    if i in snapshots:
        plt.plot(theta, stats.beta(a, b).pdf(theta), label=f"{i}球後 Beta({a},{b})")
    if i < len(data):
        if data[i] == 1:
            a += 1
        else:
            b += 1

plt.axvline(0.7, color="black", ls=":", label="真の p=0.7")
plt.xlabel("p(表の確率)"); plt.ylabel("事後密度")
plt.title("逐次ベイズ更新:観測ごとに事後が尖る")
plt.legend(); plt.tight_layout(); plt.show()

# 逐次更新の最終 と バッチ更新(全データ一括)が一致するか
k, n = int(data.sum()), len(data)
print(f"逐次更新の最終: Beta({a},{b})")
print(f"バッチ更新:     Beta({1 + k},{1 + n - k})")

出力:

逐次更新の最終: Beta(21,11)
バッチ更新:     Beta(21,11)

出力の意味:30球(表20・裏10)を1球ずつ取り込んでも、最後にまとめて取り込んでも、事後は同じ Beta(21,11)\mathrm{Beta}(21,11) です。図では、観測が進むほど事後分布が真値 0.70.7 の周りに尖っていきます——これが信念が固まっていく過程の可視化です。「逐次でも一括でも同じ」という性質のおかげで、ストリーミングデータでも安心して1球ずつ更新できます。

4. 観測順序によらない(十分統計量)

データが i.i.d.(独立同分布)なら、最終事後は表の数 kk と試行数 nn だけで決まります。これらは二項モデルの十分統計量で、個々の観測の順番や並びの情報は事後に効きません。つまり data をどうシャッフルしても Beta(21,11)\mathrm{Beta}(21,11) は変わりません。

⚠️ ただしこれは「観測が i.i.d.」という前提あってのこと。時系列のように観測が互いに依存する場合は順序が本質的に効くので、逐次更新の式 P(θD1,D2)P(D2θ,D1)P(θD1)P(\theta\mid D_1,D_2)\propto P(D_2\mid\theta,D_1)P(\theta\mid D_1) で条件付けを明示的に扱う必要があります。

⚠️ よくある誤解

関連ノート