Bonferroni 補正 — 複数検定の罠と「最強の月」の幻

TL;DR

  • 複数の検定を同時に行うと、偶然「有意」が出る確率 (false positive) が累積する
  • 12 か月から「最強月」を選ぶ = 12 回の検定。α = 0.05 でも family-wise error は約 46%
  • Bonferroni 補正: p < α/k を要求。conservative だが安全
  • Benjamini-Hochberg (FDR): 有意項目内の偽陽性割合を制御。large k で実用的
  • 戦略開発、A/B テスト、特徴量選択、すべてに通用する原則

Hook

backtest を月別に分析したら「6 月は ROI が突出して高い」が見つかったとする。p-value 0.04 で有意。「6 月狙い戦略」を組むべきか?

否。これは典型的な複数検定の罠だ。12 か月から「最強の月」を選んでいる時点で、暗黙のうちに 12 回の検定 をしている。1 つでも α = 0.05 を切れば「発見」と呼ぶなら、family-wise error は:

1 – (1 – 0.05)^{12}

つまり半分近い確率で「ランダムな最強月」が偶然見つかる。有意性は本物ではない

検定の累積誤り — Family-Wise Error Rate

独立な k 個の検定を α = 0.05 で行うと、少なくとも 1 つで false positive が出る確率は:

FWER = 1 - (1 - α)^k
k (検定数) FWER (α = 0.05)
1 5%
2 9.75%
5 22.6%
10 40.1%
20 64.2%
50 92.3%

10 戦略を同時検定して「ベスト」を選べば、4 割は偽物。100 戦略なら 99% が偽物 (1 つは必ず偶然有意になる)。

これは戦略開発の現場で日常的に発生する。問題意識なく「最強パラメータ探索」をすれば、自動的に複数検定の罠に落ちる。

Bonferroni 補正 — 最も簡単な防御

Bonferroni (1936) の発想は単純。個別検定で要求する p を α/k まで厳しくする

p_i <

これで FWER が α 以下に保証される (union bound)。

例: k = 12、α = 0.05 なら、各月の検定で要求する p は 0.05/12 approx 0.004。普通の p < 0.05 では有意でも、Bonferroni 後では有意ではない。

利点

  • 簡単 (1 行の補正)
  • 検定間の独立性を仮定しなくてよい (union bound は依存性に頑健)
  • conservative なので false positive を抑える

欠点

  • 過剰に保守的。本物の発見も見落としやすい (低 power)
  • k が大きいと、ほとんど何も有意にならない (例: k=1000 なら p < 5×10⁻⁵)

Benjamini-Hochberg — FDR 制御

k が大きい設定 (大量の特徴量検定など) で Bonferroni が厳しすぎるなら、False Discovery Rate (FDR) 制御 が代替になる。

Benjamini-Hochberg (1995) のアルゴリズム:

  1. p-value を昇順にソート: p_(1) ≤ p_(2) ≤ … ≤ p_(k)
  2. 順位 i で p_(i) ≤ (i/k)·α を満たす最大の i を i* とする
  3. p_(1), …, p_(i*) までを有意とする

解釈

  • FWER: 「少なくとも 1 つの偽陽性が出る確率」を抑える
  • FDR: 「有意とした項目のうち偽陽性の割合」を抑える

何百の検定を流して「有意のうち少なくとも 5% は本物が混ざっていてほしい」場合は FDR、「絶対に偽物を出したくない」なら Bonferroni。

10 検定で p-values: 0.001, 0.008, 0.015, 0.020, 0.030, 0.045, 0.060, 0.080, 0.100, 0.150。α = 0.05。

  • Bonferroni: α/10 = 0.005 → 0.001 のみ有意
  • BH: (i/10)·0.05 と比較。i=4 で p = 0.020 ≤ 0.020 で stop → 上位 4 つ有意

BH のほうが 4 倍多く拾う。

戦略開発・A/B テストでの実装

戦略候補から選ぶケース

10 個のシグナルを試して、ベストな 1 つを選ぶ場合:

  1. 各シグナルで p-value 計算
  2. Bonferroni: p < 0.005 で有意とする
  3. それでも有意ならば、そのシグナルは本物の候補
  4. OOS で再検証 (記事 5 で扱う)

A/B テストでのケース

複数バリアントの同時テスト:

  • 5 variant 同時テストで「最良」を選ぶ → Bonferroni or BH
  • 結論: 「最良」を選ぶ時点で複数検定。事前に候補数を fix し、補正済 p-value で判断

事前 hypothesis 登録

Pre-registration (OSF.io 等) は、「事後に検定数を膨らませる」逃げ道を塞ぐ仕組み。仮説と検定方法を運用前に固定すると、暗黙の複数検定が発生しない。retail でも自分のメモやブログに公開仮説を書く方式で代替できる。

個人的経験

ある時、月別分析で 1 つの月が突出して見えた。喜んで深掘りして「6 月狙い戦略」の構築に向かいかけたが、Bonferroni 補正したら有意性が消えた。「やっぱりノイズだったか」と棄却した経験がある。これがまさに本記事の根本テーマ 。multiple comparison は静かに発生する罠で、意識しないと「ランダムを strategy と勘違い」する。

「自分は何回検定しているか」を数える習慣がついてから、戦略候補のうちどれが残るかは半減した。それは健全な減り方だ。

まとめ

  • 複数検定は false positive を累積する。発見の前に「何回検定したか」を数える
  • Bonferroni: 安全側、簡単、conservative
  • Benjamini-Hochberg: high k で実用、power 維持
  • 戦略開発では候補数を事前固定 + 検定回数を意識
  • pre-registration で「事後に検定数を膨らませる」を防ぐ

次回は、backtest +30% を実運用したら -10%、なぜか。IS-OOS split で過学習を防ぐ実践 を扱う。

参考文献

  • Bonferroni, C.E. (1936). Teoria statistica delle classi e calcolo delle probabilità.
  • Benjamini, Y., Hochberg, Y. (1995). Controlling the False Discovery Rate. Journal of the Royal Statistical Society B, 57(1), 289-300.
  • Bailey, D.H., Borwein, J., Lopez de Prado, M., Zhu, Q.J. (2014). Pseudo-Mathematics and Financial Charlatanism. Notices of the AMS, 61(5), 458-471.
  • Lopez de Prado, M. (2018). Advances in Financial Machine Learning. Wiley. Ch. 8.
  • Gelman, A. Statistical modeling blog. statmodeling.stat.columbia.edu
  • Open Science Framework. osf.io

コメントする