なぜ単一のOOS(アウトオブサンプル)では危険なのか

従来のクオンツ実務で標準とされてきた「単一OOS検証(70%を学習、30%をテスト)」には、深刻な構造的欠陥があります。

① 従来の単一OOS (Single Split) Train (70%) OOS (30%) ⇒ OOS資産曲線は「たった1本」のみ(運に左右される) ② ウォークフォワード (Walk-Forward Analysis) ⇒ 時系列順に前進。歴史の1本の道筋を辿る(OOSは1本) ③ CPCV (Combinatorial Purged Cross-Validation) N個のグループからk個をテストに選ぶ全組合せ C(N, k) ⇒ 全長にわたる「φ本の異なるOOS資産曲線」を生成!
図1:単一OOS・ウォークフォワード・CPCVのデータ利用構造と生成されるOOS経路の比較

CPCVの分割数学:組合せ式とOOSパス本数

CPCVでは、過去の全時系列データをシャッフルせずに、時間順に並んだ \(N\) 個の連続したブロック(グループ) \(G_1, G_2, \dots, G_N\) に等分割します。各分割(Split)において、\(k\) 個のブロックをテスト(OOS)に割り当て、残りの \(N - k\) 個のブロックを学習(Train)に割り当てます。

heta_{ ext{train}} = rac{N - k}{N} = 1 - rac{k}{N}

1. 総分割数 \(S\)(モデルを学習させる回数)

\(N\) 個のグループからテスト用の \(k\) 個を選ぶ組み合わせの総数 \(S\) は、高校数学で学ぶ二項係数(コンビネーション)です。

S = inom{N}{k} = rac{N!}{k!(N - k)!}

2. 構成可能な完全OOS経路(パス)の本数 \( arphi\)

すべての分割において \(k\) 個のグループがテストされるため、テストグループが生成される総延べ回数は \(k imes S\) 回です。1本の「全期間を網羅する完全なOOS資産曲線」を組み立てるには、全 \(N\) 個のグループがちょうど1回ずつ必要となります。したがって、構築できる独立した完全OOS経路の本数 \( arphi\) は次のように厳密に導かれます。

arphi(N, k) = rac{k \cdot S}{N} = rac{k}{N} inom{N}{k} = inom{N - 1}{k - 1}
グループ数 \(N\) テスト数 \(k\) 学習比率 \( heta_{ ext{train}}\) 総分割数 \(S = inom{N}{k}\) 生成される完全OOS経路数 \( arphi = inom{N-1}{k-1}\)
\(N = 6\) \(k = 2\) \(66.7\%\) 15 通り 5 本(初歩的な診断に最適)
\(N = 8\) \(k = 2\) \(75.0\%\) 28 通り 7 本(計算負荷と精度のバランス良)
\(N = 10\) \(k = 2\) \(80.0\%\) 45 通り 9 本(標準的なクオンツ仕様)
\(N = 16\) \(k = 2\) \(87.5\%\) 120 通り 15 本(大規模データ・高頻度トレード向け)

CPCVの完全実行アルゴリズム

CPCVを実行するプロセスは、以下の厳密なパイプラインに沿って行われます。

1. 時系列N分割 シャッフル厳禁 G₁〜GNの連続ブロック 2. C(N,k)の組合せ k個のTestを選択 残りN-k個をTrainに配置 3. Purge & Embargo 境界を跨ぐラベル排除 Test直後に空白バッファ 4. φ本パスの再構成 G₁〜GNを時系列連結 完全な資産曲線を生成 CPCVの厳密な実行ルール ・各Splitにおいて、標準化(StandardScaler)や特徴量選択をTrainデータの中だけで独立実行する。 ・テスト対象となるブロック \(G_j\) のリターン予測値を、Split IDとともにデータベースに保存する。 ・各ブロックがちょうど1回ずつ登場する組み合わせを \( arphi\) 組アルゴリズムで抽出し、全長リターン系列を復元する。 ・各パスについて、スプレッド・手数料控除後のシャープレシオ、最大ドローダウン、プロフィットファクターを算出。
図2:CPCVの分割・パージング・パス再構成パイプライン

OOS資産曲線(エクイティパス)の再構成

CPCVが他の交差検証と決定的に異なるのは、単に「テスト精度の平均」を出すのではなく、「実運用で投資家が直面したかもしれない \( arphi\) 通りの現実的な資産曲線(エクイティカーブ)」を視覚的に描ける点にあります。

ext{Path}_p = ext{OOS}(G_1, s_{1,p}) \oplus ext{OOS}(G_2, s_{2,p}) \oplus \dots \oplus ext{OOS}(G_N, s_{N,p})

※\(\oplus\) は時系列の直接連結を表します。\(s_{j,p}\) は第 \(j\) グループをテストとして使ったSplitのID。

全検証期間(時系列) → 累積資産 (Equity) 元本 1.0 最良パス (SR=1.6) 中央値パス (SR=1.2) 最悪パス (SR=-0.2:元本割れ) φ本のOOS資産曲線(ファンチャート) 分割の組み合わせによりこれだけの成績幅が生じる
図3:CPCVによって生成される複数のOOS資産曲線(分割による成績のばらつきと最悪シナリオの可視化)

評価分布の読み方:平均値ではなく最悪シナリオに耐える

CPCVを実行した結果得られるのは、「単一の数字」ではなく「\( arphi\) 本のOOSパフォーマンスの確率分布」です。クオンツはこの分布から以下の項目を冷徹に監査します。

CPCV評価指標 意味と計算方法 合格基準の目安
OOSシャープレシオ中央値 \( arphi\) 本のパスのSRの中央値。外れ値に引きずられない実力値。 中央値 \( ext{SR}_{ ext{med}} \ge 1.0\)
下位10%(最悪ケース)SR 最も相性の悪かった分割におけるSR。相場急変時の耐久力。 下位10%でも \( ext{SR} \ge 0.0\)(元本を死守できる)
最大ドローダウン分布 各パスにおける最大DDの最大値(最悪ケースのドローダウン)。 最悪パスのMDDが許容リスク許容度(例: 20%)以内
失敗確率(破綻率) SRがゼロ以下、または最大DDが基準を超えたパスの割合:
\(p_{ ext{fail}} = rac{1}{ arphi} \sum 1[J( ext{Path}_p) \le 0]\)
\(p_{ ext{fail}} < 0.05\)(失敗するパスが5%未満)

CPCVの理論的限界とウォークフォワードとの使い分け

CPCVは極めて強力な手法ですが、万能のタイムマシンではありません。以下の限界を認識しておく必要があります。

次回への接続:過学習確率をパーセンテージで算出する(PBO)

CPCVによって複数のOOSパフォーマンスが得られました。これを使って、いよいよ「このバックテスト結果が過剰最適化(カーブフィッティング)である確率」を0〜100%の数値として算出するPBO(Probability of Backtest Overfitting)を導出します。次回、過学習の最終審判を下す数理に迫ります。

ミニテスト

4問の理解度テストです。

Q1. 時系列データを \(N=6\) 個のグループに分割し、テストグループ数を \(k=2\) としたCPCVにおける総分割数 \(S\) はいくつか?

正解はCです。二項係数の公式より、\(S = inom{6}{2} = rac{6 imes 5}{2 imes 1} = 15\) 通りとなります。

Q2. \(N=6, k=2\) のCPCVにおいて、構成可能な「全期間を網羅する完全OOS資産曲線」の本数 \( arphi\) はいくつか?

正解はAです。公式 \( arphi = inom{N-1}{k-1} = inom{5}{1} = 5\) 本となります。(または \( rac{k}{N} imes S = rac{2}{6} imes 15 = 5\))

Q3. CPCVの各分割(Split)において、情報漏洩を防ぐために絶対に行わなければならない処理はどれ?

正解はBです。テスト期間の未来情報が学習データに漏れるのを防ぐため、各分割ごとにPurgingとEmbargoを適用し、前処理スケーラーもTrain内だけで適合させます。

Q4. CPCVによって生成された \( arphi\) 本のOOS資産曲線(エクイティパス)に関する正しい認識はどれ?

正解はCです。CPCVは新しい相場データを生み出すわけではなく、過去データの分割の偶然性に依存するリスクを暴くための頑健性診断ツールです。

学術文献・参考資料