DOCUMENTATION
Auto-Tuner解剖 ⑥:MCMC — 不確実性まで知るエンジン
Grid Searchが「最善の1点」を見つけるのに対し、MCMCは「あり得るすべての点の分布」を推定する。Emcee Ensemble MCMCを用いた事後分布推定、収束診断、HDI解釈を解剖。
前編:⑤ 統計的検証解剖ではAUC、K-fold CV、Prior推奨を解説しました。本編ではAuto-Tunerの最も高度なツール——MCMC事後分布推定を解剖します。
1. Grid Searchが残した隙間
Grid Searchは点推定を提供します。しかし:
- 4.2でも4.7とほぼ同じ結果かもしれない
- 4.7が最善だとして、どの程度確信できるか?
- ImpactとDampeningを同時に変えたときの相互作用は?
MCMCはピン1本ではなく確率の等高線図全体を描画します。
2. Emcee — 32人の探検隊
EXAWinはEmcee(Affine-Invariant Ensemble Sampler)を使用。通常のMCMCが1人の探検家を送るのに対し、Emceeは32人のウォーカーを同時に派遣し、互いの位置を参照(「ストレッチムーブ」)します。
主な利点:
- 勾配不要 — 尤度関数の値のみ必要
- アフィン不変 — スケールの違い(Impact 5.0 vs dampening 0.25)に自動対応
- 並列探索 — 局所最適に陥りにくい
確率モデル
# Impact — 常に正
impact_gc ~ LogNormal(log(5.0), 0.5)
# Dampening — 0~1範囲
dampening ~ Beta(5, 15) # 平均 ≈ 0.25
# Silence — 0~1範囲
silence_ratio ~ Beta(3, 7) # 平均 ≈ 0.30
尤度関数
各プロジェクトでRubyのsimulate_projectと同一のロジックをPythonで実行。Bernoulli尤度:
3. 実行アーキテクチャ
BayesianAutoTuner.full_report
→ MCMCService.run(company, tuner_data)
→ JSONシリアライズ
→ python3 lib/mcmc/mcmc_runner.py input.json output.json
→ (subprocess, 最大300秒タイムアウト)
→ 結果JSON解析 → レポートにマージ
subprocessによるプロセス分離:メモリ安全、マルチテナント安全、障害分離。MCMC失敗時もGrid Search結果は正常に返却。
4. 結果の読み方
HDI(最高密度区間)
95% HDI =「パラメータがこの範囲内にある確率が95%」
Game Changer: HDI [3.5, 6.2]
→ 現在値5.0は範囲内 → 変更不要
Game Changer: HDI [2.0, 3.5]
→ 現在値5.0はHDI外 → 過大評価の可能性 → 3.0前後に調整推奨
R̂(R-hat)— 収束の証明
| R̂ | 解釈 |
|---|---|
| < 1.01 | 完璧な収束 ✅ |
| 1.01~1.05 | 収束OK |
| 1.05~1.10 | 要注意 ⚠️ |
| > 1.10 | 非収束 🚨 |
5. Grid Search × MCMC クロスリファレンス
一致する場合 → 高い確信で推奨:
Grid Search: 4.7 MCMC HDI: [3.8, 5.9], 平均 4.8 → 強い証拠
食い違う場合 → MCMCのより広い探索を優先:
Grid Search: 2.0 MCMC HDI: [3.5, 6.0], 平均 4.7 → Gridが局所的に嵌まった可能性
シリーズ全目次:
参考文献
- Foreman-Mackey, D. et al. (2013). "emcee: The MCMC Hammer." PASP, 125(925), 306-312.
- Goodman, J. & Weare, J. (2010). "Ensemble samplers with affine invariance." CAMCS, 5(1), 65-80.
- Gelman, A. & Rubin, D.B. (1992). "Inference from Iterative Simulation Using Multiple Sequences." Statistical Science, 7(4), 457-472.