🎓 レベル:発展 | 重要度:A(必須)
要点(BLUF)
- 全体平均へ引き戻す収縮推定は、各グループを独立に推定する MLE より総二乗誤差(MSE)を下げる—— なら必ず、というのがジェームズ–スタインの逆説。
- 最適な収縮率 は、ベイズの精度加重(正規正規モデル)そのもの。 が小さい(グループが似ている)ほど強く収縮します。
- 仕組みはバイアス-バリアンスのトレードオフ:収縮は各推定に少しバイアスを入れる代わりに分散を大きく減らし、合計で得をする。正則化(正則化の理論)と同じ構図です。
1. ジェームズ–スタインの逆説
個のグループ平均 を、各グループの観測 から推定します。素朴には「各グループは独立だから (MLE)が最善」に思えます。ところが なら、全体平均へ少し収縮した推定のほうが、総二乗誤差 の期待値で必ず勝ちます。1955年に示されたこの事実は、独立な問題でも「まとめて縮める」と得をするという、直観に反する結果でした。
ジェームズ–スタイン推定量(全体平均 へ収縮)は
です。括弧の中が収縮率()。実際に総 MSE を比べます。
2. コードで総MSEを比べる
import numpy as np
# J個の正規平均。y_j = θ_j + N(0,σ²)。収縮が総MSEを下げるか
rng = np.random.default_rng(0)
J, sigma, tau, M = 10, 1.0, 2.0, 20000
err_mle = err_js = err_bayes = 0.0
for _ in range(M):
theta = rng.normal(5.0, tau, J) # 真のグループ平均
y = rng.normal(theta, sigma) # 観測(MLE = y_j)
ybar = y.mean()
# ジェームズ–スタイン(全体平均へ収縮)
S = np.sum((y - ybar)**2)
factor = max(0.0, 1 - (J-3)*sigma**2/S)
theta_js = ybar + factor*(y - ybar)
# ベイズ部分プーリング(τ既知):B=σ²/(σ²+τ²)
B = sigma**2/(sigma**2 + tau**2)
theta_bayes = (1-B)*y + B*ybar
err_mle += np.sum((y - theta)**2)
err_js += np.sum((theta_js - theta)**2)
err_bayes += np.sum((theta_bayes - theta)**2)
print(f"総二乗誤差の平均(J={J}, σ={sigma}, τ={tau}):")
print(f" 非プーリング(MLE) = {err_mle/M:.3f} (理論 Jσ²={J*sigma**2})")
print(f" ジェームズ–スタイン = {err_js/M:.3f}")
print(f" ベイズ部分プーリング = {err_bayes/M:.3f}")
print(f" → 収縮で {100*(1-err_js/err_mle):.0f}%(JS)/ {100*(1-err_bayes/err_mle):.0f}%(Bayes)改善")
出力:
総二乗誤差の平均(J=10, σ=1.0, τ=2.0):
非プーリング(MLE) = 10.024 (理論 Jσ²=10.0)
ジェームズ–スタイン = 8.611
ベイズ部分プーリング = 8.213
→ 収縮で 14%(JS)/ 18%(Bayes)改善
出力の意味:MLE の総 MSE は (理論値 どおり)。ジェームズ–スタインは 、ベイズ部分プーリングは と、収縮するだけで 〜 も誤差が下がります。ベイズが JS よりわずかに良いのは、真の を使って最適に収縮しているから(JS は を知らずデータから暗に推定)。「各グループ独立が最善」という直観が、ここで覆ります。
3. 最適収縮率=ベイズの精度加重
なぜこの収縮率なのか。1グループに注目し、事前 、観測 とすると、事後平均(二乗損失で最適な推定)は分散既知の正規–正規(正規正規モデル)より
- 小(グループが互いに似ている)→ → 強く全体平均へ収縮。
- 大(グループがばらばら)→ → ほとんど収縮せず を信じる。
import numpy as np
print("収縮率 B = σ²/(σ²+τ²)(σ=1):")
for t in [0.5, 1, 2, 5]:
print(f" τ={t}: B={1/(1+t**2):.3f}")
出力:
収縮率 B = σ²/(σ²+τ²)(σ=1):
τ=0.5: B=0.800
τ=1: B=0.500
τ=2: B=0.200
τ=5: B=0.038
出力の意味:群が似ている()なら と大きく縮め、群がばらばら()なら とほぼ縮めない。ジェームズ–スタインの収縮率 は、この最適 をデータから推定したものに当たります( が群間ばらつきの目安で を推す)。だから階層ベイズと JS は本質的に同じことをしています。
4. なぜ得をするのか:バイアス-バリアンス分解
収縮は各推定に「全体平均へ寄せる」バイアスを入れます。それでも総 MSE が下がるのは、分散の減少がバイアスの増加を上回るからです。MSE はバイアス²と分散に分解できます。
収縮 の分散は で、 なら MLE の分散 より小さい。入るバイアスは小さく抑えつつ分散を大きく削れるので、合計で得をする——これは正則化(正則化の理論、リッジが係数を 0 へ縮める)とまったく同じ理屈です。階層モデルの収縮は、「全体平均」という賢い目標へ向けた正則化だと言えます(リッジは 0 へ、収縮は群平均へ)。
⚠️ よくある誤解
- 「各グループ独立が最善」ではない: では収縮が MLE を総 MSE で支配します(§1)。これがジェームズ–スタインの逆説。
- 「収縮はバイアスだから悪」ではない:バイアスと引き換えに分散を削り、合計の誤差を下げます(§4)。
- 「収縮率は全グループ一律」ではない: はグループの不確実性で変わります(階層モデルの構造)。
- 「個別グループの推定はいつも改善する」ではない:改善するのは総MSE。たまたま極端な真値を持つ1グループは、収縮で悪化することもあります(全体では得)。
関連ノート
- 階層モデルの構造
- 経験ベイズ(次のトピック・収縮率を決める τ の推定)
- 正規正規モデル(精度の加重平均=最適収縮)
- 正則化の理論(機械学習・収縮=正則化)
- 第5章 階層ベイズモデル 目次
- ベイズ統計テキスト 全体目次