🎓 レベル:基礎 | 重要度:A(必須)
📎 前提:事前・尤度・事後・周辺尤度 | 数理:共役事前分布(統計)
要点(BLUF)
- 共役事前分布=事後が事前と同じ分布族になる事前。ご利益はただ一つ、正規化積分(周辺尤度)を計算せず、事後がパラメータの更新だけで求まることです。
- なぜ閉形式になるか:尤度のカーネル × 事前のカーネルが、再び同じ分布族のカーネルになるから。指数の肩を足すだけで事後の分布族とパラメータが読み取れます。
- 事前・尤度・事後・周辺尤度 で数値積分して求めた事後は、共役なら閉じた式 と完全一致します(本ノートのコードで誤差 レベルを確認)。この章はその「閉じた式」を主役にします。
1. 共役性の定義
Phase 1 では事後を「尤度 × 事前を正規化したもの」として、ときに数値積分で求めました。ここで事前の選び方にある相性を持ち込むと、その積分が消えます。
定義:尤度 に対し、事後 が事前 と同じ分布族になるとき、その事前を尤度に対する**共役事前分布(conjugate prior)**と呼ぶ。
たとえば「二項尤度 × ベータ事前 → ベータ事後」。事前も事後も同じベータ族にとどまるので、ベイズ更新が「ベータのパラメータをどう動かすか」だけの話になります。
2. なぜ閉形式になるのか:カーネルの一致
鍵はカーネル——密度から「 に依存しない定数」を の外に追い出した、 を含む本体部分です。事後はベイズの定理より尤度 × 事前に比例するので、
この積を の関数として眺めたとき、もとの分布族のカーネルと同じ形に戻れば、事後はその分布族だと一目で分かります。すると分母の正規化定数 は「その分布族の定義から自動的に決まる」ので、計算する必要がありません。
flowchart LR
P1["Phase 1 のやり方<br/>事後 ∝ 尤度 × 事前"] --> Q{"事前は尤度に<br/>共役か?"}
Q -- "はい(共役)" --> C["カーネルの肩を足すだけ<br/>事後 = 同じ分布族<br/>(閉形式・積分不要)"]
Q -- "いいえ" --> N["正規化積分 ∫ が必要<br/>数値積分 / MCMC(第4章)"]
二項・ポアソン・正規など代表的な尤度に対し、共役事前がちょうど存在するのは偶然ではなく、これらが指数型分布族に属するからです(その一般原理は 指数型分布族と共役事前)。各ペアの完全な導出は 共役事前分布(統計)にもありますが、この章では導出を実行可能コードで確かめながら、推論にどう使うか(事後予測・逐次更新・事前感度)まで踏み込みます。
3. 「数値積分した事後」=「閉じた式の事後」をコードで確かめる
百聞は一見にしかず。事前・尤度・事後・周辺尤度 と同じく定義どおりに尤度×事前を作って数値積分で正規化した事後と、共役の閉じた式 が一致することを確かめます。
import numpy as np
from scipy import stats
from scipy.integrate import trapezoid # numpy 2.0+ で np.trapz は廃止
from scipy.special import beta as Bfunc # ベータ関数 B(a,b)
# 二項データ:n 回中 k 回成功。事前は Beta(a, b)
n, k = 20, 14
a, b = 2, 2
theta = np.linspace(0, 1, 2001)
# --- (A) Phase 1 流:尤度×事前 を作り、数値積分で正規化 ---
likelihood = theta**k * (1 - theta)**(n - k) # 二項尤度のカーネル
prior = stats.beta(a, b).pdf(theta) # 事前 Beta(a,b)
unnorm = likelihood * prior
evidence_num = trapezoid(unnorm, theta) # ∫ 尤度×事前 dθ(数値)
posterior_num = unnorm / evidence_num
# --- (B) 共役の閉じた式:事後は Beta(a+k, b+n-k)(積分いらず) ---
a_post, b_post = a + k, b + (n - k)
posterior_closed = stats.beta(a_post, b_post).pdf(theta)
# 2つの事後がどれだけ一致するか
max_abs_diff = np.max(np.abs(posterior_num - posterior_closed))
print(f"閉じた式の事後 = Beta({a_post}, {b_post})")
print(f"数値積分の事後 と 閉じた式の事後 の最大差 = {max_abs_diff:.2e}")
# --- 正規化定数(周辺尤度)も閉じた式と一致する ---
# evidence = ∫ θ^k(1-θ)^(n-k)·Beta(a,b) dθ = B(a+k, b+n-k) / B(a, b)
evidence_closed = Bfunc(a_post, b_post) / Bfunc(a, b)
print(f"周辺尤度(数値) = {evidence_num:.6e}")
print(f"周辺尤度(閉じた式)= {evidence_closed:.6e}")
出力:
閉じた式の事後 = Beta(16, 8)
数値積分の事後 と 閉じた式の事後 の最大差 = 1.24e-14
周辺尤度(数値) = 1.529632e-06
周辺尤度(閉じた式)= 1.529632e-06
出力の意味:事前 ・データ なら、事後は閉じた式で 。これを数値積分で求めた事後と引き算すると最大差は ——浮動小数点の丸め誤差しかなく、完全に同じ分布です。周辺尤度(事前・尤度・事後・周辺尤度 で数値積分した )も、閉じた式 と一致します。Phase 1 で苦労して積分した量が、共役ではベータ関数の比として一行で書けるわけです。
4. ご利益①:更新はパラメータの足し算
事後 をよく見ると、更新は (成功数を足す)・(失敗数を足す)という足し算です。だから共役では、
- 正規化積分(一般には解析的に解けない難所)を計算しない
- 過去のデータを保持せず、事後パラメータ だけ持ち越せば逐次更新できる(ベイズ更新と逐次推論 の「パラメータの足し算」の正体)
という二つの計算上の利点が同時に手に入ります。
5. ご利益②:ハイパーパラメータは「擬似観測」として読める
更新則 を逆から読むと、**事前パラメータ は「データを見る前にすでに見た仮想の成功・失敗回数」**と解釈できます(擬似観測 / pseudo-count)。
- 比 … 事前平均(信念の位置)
- 和 … 事前標本サイズ(信念の強さ)。大きいほどデータに動かされにくい
「比で位置、和で強さ」。 は一様=ほぼ情報なし、 は「成功・失敗を各50回見た」=「」という強い確信です。この読み方は共役事前を直観的に扱う最大の手がかりで、各ペア(ベータ二項モデル・ガンマポアソンと指数・正規正規モデル)で繰り返し現れます。
6. 代表的な共役ペア(早見表)
この章で一つずつコードで確かめていくペアの全体像です。骨格はどれも同じ——カーネルの肩を足すと同じ分布族に戻る、というだけ。
| 尤度(データ) | 推定する母数 | 共役事前 | 事後(更新則) | 詳細 |
|---|---|---|---|---|
| 二項・ベルヌーイ | 成功確率 | ベータ二項モデル | ||
| ポアソン | 発生率 | ガンマポアソンと指数 | ||
| 指数 | レート | ガンマポアソンと指数 | ||
| 正規(分散既知) | 平均 | 正規正規モデル | ||
| 正規(平均既知) | 分散 | 逆ガンマ | 逆ガンマ(更新) | 正規正規モデル |
| 多項 | カテゴリ確率 | ディリクレ | 指数型分布族と共役事前 |
「比率の事前=ベータ/ディリクレ」「カウント・待ち時間の事前=ガンマ」という対応で覚えると整理しやすいです。
⚠️ よくある誤解
- 「共役だから正しい」ではない:共役は事後が解析的に求まるという計算の便宜であって、その事前が現実の事前知識を正しく表している保証ではありません。事前の妥当性は別途、感度分析(事前の選び方と感度分析)で吟味します。
- 「事後 = 尤度 × 事前」と等号で書く:これは比例関係です。 で書き、最後に分布族から正規化定数を回復するのが定石。等号にすると周辺尤度ぶんだけ縦軸がずれます。
- 「共役事前はいつでも存在する」ではない:きれいな共役事前があるのは尤度が指数型分布族のときに限られます(指数型分布族と共役事前)。そうでない尤度(自由度未知の 分布など)では閉形式が崩れ、MCMC(第4章)や変分推論(第6章)に頼ります。
- 「無情報のつもりで大きな値を入れる」: は無情報ではなく「」という強い事前です。和 が大きいほど確信が強い点に注意。
関連ノート
- 事前・尤度・事後・周辺尤度(この数値積分を閉形式にするのが本章)
- ベータ二項モデル(次のトピック・最初の共役ペアを完全導出+コード)
- 指数型分布族と共役事前(なぜ共役相手が存在するのかの一般原理)
- 共役事前分布(統計・各ペアの完全導出と試験での問われ方)
- ベイズ更新と逐次推論(「パラメータの足し算」の逐次推論)
- 第2章 共役事前分布 目次
- ベイズ統計テキスト 全体目次