Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:発展 | 重要度:B(標準)

📎 前提:事後予測チェック | 関連:点推定と損失関数

要点(BLUF)

1. なぜ情報量規準か

事後予測チェック(事後予測チェック)は1つのモデルの欠陥を探す診断でした。複数モデルを比較したいときは、「新しいデータをどれだけうまく予測できるか(予測性能)」で測ります。手元のデータへの当てはまりを上げるだけなら複雑なモデルが勝ちますが、それは過剰適合。情報量規準は当てはまりから複雑さを差し引いて、予測の良さを近似します。

2. WAIC の定義

WAIC は2つの量から成ります。

対数点ごと予測密度(lppd)——各データ点を事後予測でどれだけうまく当てるか(大きいほど当てはまり良い):

lppd=ilog(1Ssp(yiθs))(θs は事後サンプル)\mathrm{lppd}=\sum_{i}\log\Big(\frac1S\sum_{s} p(y_i\mid\theta_s)\Big)\qquad(\theta_s\ \text{は事後サンプル})

有効パラメータ数 pwaicp_{\mathrm{waic}}——点ごと対数尤度の事後分散の和(複雑なモデルほど大きい=罰):

pwaic=iVars[logp(yiθs)]p_{\mathrm{waic}}=\sum_{i}\mathrm{Var}_s\big[\log p(y_i\mid\theta_s)\big]

これらから WAIC=2(lppdpwaic)\mathrm{WAIC}=-2(\mathrm{lppd}-p_{\mathrm{waic}})。第1項が当てはまり、第2項が複雑さの罰。小さいほど予測が良い。事後サンプルさえあれば(MCMC でも VI でも)計算でき、点推定でなく事後全体を使うのが AIC や DIC との違いです。

3. コード:多項式回帰で WAIC が次数を選ぶ

2次関数 + 雑音のデータに、次数の違う多項式回帰(ベイズ線形回帰、ベイズ線形回帰)を当て、WAIC を比べます。

import numpy as np

rng = np.random.default_rng(0)
n = 25; sigma = 0.5
x = np.sort(rng.uniform(-1, 1, n))
y = 1.0 + 0.5*x - 1.5*x**2 + rng.normal(0, sigma, n)     # 真は2次

def waic(degree, alpha=0.05, S=4000, seed=1):
    rng = np.random.default_rng(seed)
    Phi = np.vander(x, degree+1, increasing=True)         # [1, x, x², …]
    beta = 1/sigma**2
    S_N = np.linalg.inv(alpha*np.eye(degree+1) + beta*Phi.T@Phi)
    m_N = beta*S_N@Phi.T@y
    W = rng.multivariate_normal(m_N, S_N, S)              # 事後から重みをサンプル
    mu = W @ Phi.T                                        # (S, n) 予測平均
    ll = -0.5*np.log(2*np.pi*sigma**2) - 0.5*(y[None,:]-mu)**2/sigma**2   # 点ごと対数尤度
    lppd   = np.sum(np.log(np.mean(np.exp(ll), axis=0)))  # 当てはまり
    p_waic = np.sum(np.var(ll, axis=0, ddof=1))           # 複雑さの罰
    return -2*(lppd - p_waic), p_waic

print(f"{'次数':<6}{'WAIC':>10}{'p_waic':>10}")
for d in [1, 2, 4, 8, 12]:
    w, pw = waic(d)
    print(f"{d:<6}{w:>10.2f}{pw:>10.2f}")

出力:

次数          WAIC    p_waic
1          40.33      1.93
2          27.66      1.36
4          30.25      2.22
8          31.80      2.82
12         32.85      3.16

出力の意味:WAIC は真の次数 22 で最小27.6627.66)。次数 11 は当てはまり不足(過小適合、WAIC 40.3340.33 と大きい)、次数 4,8,124,8,12 は当てはまりは上がっても pwaicp_{\mathrm{waic}}(複雑さ)が増えて罰され、WAIC が逆に上昇します。pwaicp_{\mathrm{waic}} が次数とともに 1.362.222.823.161.36\to2.22\to2.82\to3.16 と増える——「有効パラメータ数」が複雑さを定量化し、過剰適合に税を課しているのが見えます。当てはまりと複雑さの綱引きで、ちょうど良い複雑さが選ばれます。

4. DIC との違い、WAIC の利点

**DIC(逸脱度情報量規準)**は WAIC の前身で、点推定 θˉ\bar\theta(事後平均)での逸脱度を使います。

DIC=2logp(yθˉ)+2pDIC,pDIC=2(logp(yθˉ)Es[logp(yθs)])\mathrm{DIC}=-2\log p(y\mid\bar\theta)+2\,p_{\mathrm{DIC}},\qquad p_{\mathrm{DIC}}=2\big(\log p(y\mid\bar\theta)-\mathbb E_s[\log p(y\mid\theta_s)]\big)

DIC は事後平均という1点に頼るため、事後が多峰・非対称だと不安定です。WAIC は事後全体(点ごとの予測分布)を使うので、より完全にベイズ的で、漸近的に交差検証(交差検証とLOO)と一致します。実務ではWAIC や LOO が推奨され、DIC は歴史的位置づけです。

DICWAIC
当てはまりの評価点推定 θˉ\bar\theta事後予測(点ごと)
完全ベイズ性弱い(1点依存)強い(事後全体)
多峰・非対称不安定頑健
LOO との一致しない漸近一致

⚠️ よくある誤解

関連ノート