バックテスト罠 10 選 — Marcos Lopez de Prado まとめと連載総括

TL;DR

  • 連載で扱った概念を Marcos Lopez de Prado (AFML, 2018) の罠カタログにマップした連載総括
  • 10 個の罠は独立ではなく相互作用する。1 つ躱しても次が待つ
  • 実務では「自分が踏んでいないか」のチェックリストとして毎回回す
  • メタ処方箋は「edge を見つけたら疑え」

Hook

連載 9 記事で扱った概念は、それぞれ別々の罠ではなく、quantitative strategy 開発における共通の落とし穴カタログの一部だった。

Marcos Lopez de Prado が Advances in Financial Machine Learning (2018) で体系化した罠リストを、連載総括として整理する。これを「自戦略点検チェックリスト」として、新しい backtest を組むたびに回す習慣をつけると、量産される false positive を機械的に減らせる。

罠 10 選

1. Survivorship Bias (生存者バイアス)

症状: 「成功事例だけのデータ」で平均を計算、効果サイズが過大評価される。

: アクティブファンドの長期リターン (閉鎖 fund 除外)、起業家の朝の習慣 (失敗者除外)、競馬の勝率 (F/PU 除外)。

対策: survivorship-bias-free データセット、全期間生存と消滅を含む再構築、保守的な効果サイズ解釈。

詳細: 連載記事 7。

2. Look-Ahead Bias (未来情報リーク)

症状: backtest の features に「未来でしか得られない情報」が混ざり、現実より良い結果が出る。

: 当日 close を当日中の判定に使う、earnings 発表前の trade に発表後の数字を使う。

対策: features 生成時の timestamp を厳密に点検、「この情報は実運用時に既知だったか」を毎回問う。

詳細: 連載記事 5。

3. Data Leakage (CV 中の情報漏洩)

症状: train data に test 由来の情報が混入。CV (cross-validation) で時系列を考慮しないと頻発。

: 翌週のラベルを今週の features に使う、purge zone なしの k-fold で隣接サンプルが train/test 両方に存在。

対策: time-series-aware CV、purge zone (重複情報除去)、embargo (波及効果除去)。Lopez de Prado の Combinatorial Purged CV が代表的解。

4. Multiple Testing (複数検定の罠)

症状: 多数の戦略・パラメータを試して「最良」を選ぶと、family-wise error rate が累積する。

: 12 か月から最強月を選ぶ (k=12 で FWER 約 46%)。100 戦略から有意なものを選ぶ (k=100 でほぼ確実に偽陽性)。

対策: Bonferroni 補正、Benjamini-Hochberg FDR、検定数の事前固定、pre-registration。

詳細: 連載記事 4。

5. Overfitting (過学習)

症状: backtest 期間特有のノイズに fit して、未知期間で性能が落ちる。

: backtest で +30% の戦略が live で -10%。

対策: IS-OOS split、walk-forward、CPCV、パラメータ次元数の制限。

詳細: 連載記事 5。

6. Regime Change (体制変化)

症状: 学習期と運用期で市場体制 (volatility、相関、流動性) が異なり、edge が消失または逆転する。

: low-vol 学習期で見つけた signal が high-vol で機能しない、bull で機能した signal が bear で逆向き。

対策: 複数 regime をまたぐ長期データ、regime indicator での分割検証、regime adaptive な戦略設計。

7. Slippage (約定価格 slippage)

症状: 想定価格と実約定価格の差。MARKET order の宿命、LIMIT でも adverse selection で発生。

: signal 価格で約定する想定が、現実は spread を喰らって 1-2 ticks 不利。

対策: realistic な約定 model (約定確率・slippage 分布)、conservative な execution コスト見積もり。

詳細: 連載記事 8。

8. Transaction Cost (取引コスト軽視)

症状: gross PnL のみを評価し、commission・spread・market impact を抜きに「edge あり」と判断。

: backtest gross +5% が、commission 1% + slippage 2% で net +2% に縮む。

対策: gross と net の並列保存、liquidity-adjusted Sharpe、高頻度戦略では特に厳しく見る。

9. Capacity (戦略の容量限界)

症状: 戦略を small size で backtest すると edge があるが、size を上げると edge が消える。alpha decay の本質。

: 1K で backtest +X%、1M に上げると edge 消失 (market impact、流動性消費)。

対策: capacity-aware backtest、market impact model、size を増やす前に linear extrapolation の限界を意識。

10. Reproducibility (再現性)

症状: 同じ backtest を再実行しても結果が異なる。乱数 seed、library version、データ snapshot の差で発生。

: 6 ヶ月後に同じコードを動かしたら別の結果、library 更新で公式が変わった、データソースが retroactive に修正された。

対策: 乱数 seed 固定、依存 lock (poetry/pip freeze)、データ snapshot 保存、Docker 化。

罠は独立ではない — 相互作用する

これら 10 罠は「列挙した順番に潰す」のではなく、相互に影響する 点に注意。

  • Survivorship を躱しても overfitting に落ちる
  • overfitting を躱しても regime change で死ぬ
  • regime change を躱しても slippage で edge が消える
  • slippage を躱しても capacity で頭打ち

罠を 1 つずつ消すのではなく、毎回チェックリストとして回す のが実務。

連載のまとめ — 「edge を見つけたら疑え」

連載 1-9 で扱った具体策と、本記事の 10 罠を並べると、メタ的な処方箋は 1 つに集約される。

「edge を見つけたら、まず疑う習慣をつけろ」

具体的に:

  • 平均値だけでなく Bootstrap CI を見る (記事 3)
  • 月別最強月は Bonferroni で叩く (記事 4)
  • IS-OOS で過学習を検証 (記事 5)
  • iid MC を信用しすぎない (記事 6)
  • 生存者バイアスを忘れない (記事 7)
  • 約定 modeling を真面目にやる (記事 8)
  • 期待値より破産確率を見る (記事 9)
  • そして Kelly は Fractional で (記事 1)
  • FLB のような theoretical edge と運用可能 edge の差を見極める (記事 2)

これを毎 backtest で回す機械的な習慣が、long-run で運用継続できる戦略運用者の境界線。

個人的経験 — 連載総括

systematic な戦略を 6 ヶ月運用してきて学んだのは、「理論の罠」と「自分の罠」が別物だということ。Lopez de Prado の罠カタログは教科書で読めるが、実運用すると自分独自の罠 (= 自分の認知バイアス) が混じる。

「この戦略は他と違う」「自分の edge は本物」という確信そのものが、最大の罠かもしれない。理論罠は外部参照でチェックできるが、認知バイアスは外部参照しにくい。だからこそ、理論罠だけは機械的に消す習慣をつけて、認知罠と戦う余地を作る。

連載読者への提案

自分の戦略を、本記事の 10 罠でチェックリスト化してみる。各罠について「自分は対策済か?」を yes/no で答えてみる。

対策済? 対策内容
Survivorship
Look-ahead
Data leakage
Multiple testing
Overfitting
Regime change
Slippage
Transaction cost
Capacity
Reproducibility

埋まらない欄が見つかったら、それが次に取り組むべき罠だ。

連載完結に寄せて

10 記事を通じて、quant 戦略開発における共通のアンチパターンと、それに対する academic / industry の標準的回答を整理した。完璧な戦略は存在しないし、罠を完全に避けることもできない。だが、罠を知って意識する者と、知らずに踏む者の差は、long-run で大きく開く。

連載で挙げた書籍・論文に当たって、自分の戦略開発の「精度の高い batting average」を作っていくことが、retail quant の道だと考えている。

参考文献

  • Lopez de Prado, M. (2018). Advances in Financial Machine Learning. Wiley.
  • 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.
  • Harvey, C.R., Liu, Y. (2014). Backtesting. Journal of Portfolio Management, 42(1), 13-28.
  • Bailey, D.H., Lopez de Prado, M. (2014). The Deflated Sharpe Ratio. Journal of Portfolio Management, 40(5), 94-107.
  • 連載記事 1-9 (本ブログ Quant カテゴリ)

コメントする