ウォークフォワード分析とOOS検証のやり方|過剰適合を見抜く分割設計
Backtest Learning ・ BT06
ウォークフォワード分析とOOS検証のやり方|過剰適合を見抜く分割設計
最適化した戦略が実運用で崩れるのは、学習に使った期間の当てはめを「成績」と勘違いしているからです。学習期間と検証期間を時系列で分け、パラメータを固定したサンプル外評価を時間方向に繰り返すことで、過剰適合の兆候を見つけやすくします。
- OOSとウォークフォワードの違いと、時系列でのリークの理由
- 固定一回・ローリング・アンカードの3方式と長所短所
- ウィンドウ長・更新頻度・最低取引数の設計の考え方
- 劣化率・安定性・分布を並べて読み、単一スコアに頼らない方法
この記事の要点
- OOS(アウトオブサンプル)は、最適化に使っていない将来側の期間で固定ルールを評価する。
- ウォークフォワードは「学習→パラメータ固定→次期間で評価」を時間方向に繰り返す設計。
- 時系列データではランダム分割が未来参照のリークを招くため、時間順に分ける。
- ローリングとアンカードは目的が違い、劣化率・取引数・分布を合わせて読む。
- ウォークフォワードでも将来は保証されず、フォワードテストやストレス確認と併用する。
目次
この記事では、TradingViewなどで最適化したストラテジーを、実運用に近い形で検証するためのウォークフォワード分析とOOS検証の設計手順を解説します。まず結論を述べ、続いて用語の区別、3つの分割方式、ウィンドウ設計、結果の読み方、リーク対策、そして手元の数字を試せるシミュレーターの順に進みます。基礎から確認したい場合は、まずTradingViewバックテストの全体像を押さえておくと、本記事の位置づけが分かりやすくなります。
30秒でわかる結論
OOS検証とは、パラメータの最適化に一切使っていない将来側の期間で、固定したルールの成績を評価することです。学習に使った期間(インサンプル=IS)の好成績は、たまたまその期間に当てはまっただけかもしれません。そこで、まだ触れていない期間(アウトオブサンプル=OOS)で同じルールをそのまま走らせ、成績がどれだけ落ちるかを見ます。落ち込みが小さいほど、その優位は当てはめの産物ではない可能性が相対的に高まります。
ウォークフォワード分析は、この「学習して固定し、次の期間で評価する」というひとまとめの手続きを、時間を少しずつ進めながら繰り返す設計です。1回だけの分割よりも複数の局面で評価できるため、結論が一つの偶然の期間に依存していないかを確かめられます。ただし後述するとおり、これは過剰適合を見抜きやすくする手法であって、将来の利益を保証するものではありません。
IS・validation・OOS・フォワードテストの違い
言葉を先に整理します。混同すると、検証したつもりで実は最適化を繰り返しているという事故が起きます。
- IS(インサンプル):パラメータを探索・最適化するために使う学習期間。ここでの成績は「当てはめの上限」に近く、そのまま実力とは読みません。
- validation(検証用):ISの中で複数候補を比べる際に切り出す中間期間。モデル選択の調整に使うため、厳密には完全なサンプル外ではありません。
- OOS(アウトオブサンプル):最適化にもモデル選択にも一度も使っていない期間。ここは評価専用で、結果を見てからルールを変えない、という規律が核心です。
- フォワードテスト:実運用に近い環境で、未来の値動きに対して前向きに走らせる検証。過去データのOOSより現実に近い一方、時間がかかります。基礎はTradingViewの公式解説も参照してください。
なぜ時系列ではランダム分割がリークを招くのか
一般的な機械学習では、データをランダムに学習用と検証用へ分けます。しかし相場のような時系列データでこれをやると、未来のバーが学習側に混ざり込む可能性があります。トレンドやボラティリティは時間的に連続しているため、未来の情報を含んだ状態でパラメータを選ぶと、評価期間の答えを先に覗いたのと同じ状態(未来参照リーク)になります。だからこそ、分割は時間順に行い、学習期間より後ろの期間だけを評価に使います。指標そのものの読み方はバックテスト結果の見方で詳しく扱っています。
分割の3方式(固定・ローリング・アンカード)
ウォークフォワードの分割には主に3つの形があります。目的に応じて選び、可能なら複数を並べて結論が揺れないかを確認します。
1. 固定一回分割(ホールドアウト)
全期間を「前半=IS/後半=OOS」と一度だけ分ける、最もシンプルな方法です(図1)。手早く過剰適合の当たりを付けられますが、評価が一つの局面に依存するため、その期間がたまたま追い風/向かい風だと結論が偏ります。
2. ローリング・ウォークフォワード
学習窓の長さを一定に保ったまま、窓全体を前へずらしていく方式です。古いデータは学習から外れていくため、直近の相場局面への追従性を見たいときに向きます。一方、遠い過去の情報は使い切らないため、長期の安定性は見えにくくなります。
3. アンカード・ウォークフォワード
学習窓の開始点を固定し、評価を進めるたびに窓を後ろへ伸ばしていく方式です。データを最大限使い、蓄積した情報で長期の安定性を見たいときに向きます。ただし直近の変化に対する反応は、ローリングよりも鈍くなりがちです。
| 方式 | 学習窓 | 向く目的 | 注意点 |
|---|---|---|---|
| 固定一回 | 1区切りのみ | 素早い当たり付け | 評価が一局面に依存 |
| ローリング | 長さ一定で前進 | 直近局面への追従 | 遠い過去を使い切らない |
| アンカード | 開始固定で伸長 | 長期の安定性 | 直近変化への反応が鈍い |
ウィンドウと更新頻度の設計
分割方式を決めたら、次は具体的な長さと頻度を設計します。ここに普遍的な黄金比はありません。戦略の性質から逆算します。
- 学習窓の長さ:長いほどルールは安定しやすい反面、直近の変化に鈍くなります。含めたい相場局面(上昇・下降・レンジ)が最低限入る長さを確保します。
- 評価窓の長さと更新頻度(ステップ):評価窓が短いと取引数が足りず数値が暴れます。ステップを評価窓と同じにすると評価期間が重ならず、独立した区間として読みやすくなります。
- 最低取引数:各評価窓で確保したい取引数の下限を先に決めます。下回る窓は参考扱いにし、結論の根拠にはしません。
- レジーム:金利・ボラティリティ・流動性が大きく変わる局面をまたいでいるかを確認します。相場局面の把握にはマクロリサーチワークベンチのような外部視点も役立ちます。
本記事では以降、学習18か月・評価6か月・ステップ6か月・全期間72か月という設定を一貫した例示に使います。これは説明のための架空の教育用データであり、推奨する比率ではありません。
手元のバックテストで同じ分割を試す
ここまでの一回分割やローリングの考え方は、Strategy TesterのCSV/XLSXを読み込めば実際の数字で確認できます。まずは無料の基本分析でKPI・エクイティ・ドローダウンを可視化し、ウォークフォワード分割やOOS信頼性スコアといった高度な検証が必要になった段階でPremiumのユースケースをPro/Premiumで確認できます。
各foldの手順と鉄則
各fold(1回分の学習・評価のまとまり)では、次の順序を厳守します。順序を崩すと検証が成り立ちません。
- 学習:その学習窓の中だけでパラメータ候補を探索する。
- 選定:あらかじめ決めた基準(例:安定した領域を選ぶ)で1組に絞る。
- 固定:選んだパラメータを凍結し、以後は触らない。
- 評価:直後の評価窓で、固定ルールをそのまま走らせて成績を記録する。
- 前進:窓をステップ分だけ進め、次のfoldへ。
ここで最も大切な鉄則は、評価窓の結果を見てからパラメータを選び直さないことです。もし評価結果を見て調整すれば、その期間はもう最適化に使われたことになり、サンプル外ではなくなります。「良い数字が出るまでOOSを見ながら調整する」は検証ではなく、時間差の最適化です。どうしても調整したいなら、まだ一度も見ていない新しい期間を評価用に確保し直します。パラメータ探索の落とし穴そのものは過剰最適化を防ぐ方法で掘り下げています。
OOS結果の読み方
foldごとの評価が集まったら、単一のスコアで良し悪しを決めず、複数の観点を横に並べて読みます。以下は前述の設定(学習18か月・評価6か月)で回した架空の教育用データです。
| Fold | 評価期間 | IS PF | OOS PF | WFE(純益比) | OOS取引数 | OOS最大DD | 状態 |
|---|---|---|---|---|---|---|---|
| F1 | 2020年下期 | 1.82 | 1.44 | 61% | 64 | -7.8% | 安定寄り |
| F2 | 2021年上期 | 1.75 | 1.51 | 68% | 59 | -6.9% | 安定寄り |
| F3 | 2021年下期 | 1.93 | 1.12 | 34% | 48 | -12.4% | 劣化大 |
| F4 | 2022年上期 | 1.70 | 1.33 | 55% | 53 | -9.6% | 中間 |
| F5 | 2022年下期 | 1.86 | 1.08 | 29% | 44 | -13.1% | 劣化大 |
| F6 | 2023年上期 | 1.78 | 1.39 | 58% | 57 | -8.3% | 安定寄り |
この例では、6分割のWFE(ウォークフォワード効率)の平均は約51%で、学習時の優位のうちおよそ半分が評価期間で失われています。注目すべきはF3とF5で、WFEが30%前後まで落ち、最大ドローダウンも他より深くなっています。両者は市場のボラティリティが変わった局面にあたり、特定のレジームでルールが効きにくい可能性を示唆します。平均値だけを見て「まずまず」と判断せず、どのfoldで、なぜ崩れたのかを個別に読むことが重要です。ドローダウンの深掘りは最大ドローダウンの見方を参照してください。
データリークと未来参照を避ける
ウォークフォワードの信頼性は、リークを防げているかにかかっています。よくある落とし穴を挙げます。
- 未来参照:まだ確定していないバーの終値や、後から分かる指標を計算に使う。
- 重複期間:学習窓と評価窓が時間的に重なり、同じバーが両方に入る。
- 同一データへの反復試行:同じOOS期間で何度も試すと、その期間にも当てはめが進む。
- レジーム偏り:評価期間が特定の相場局面に偏り、他の局面での挙動が見えない。
対策の一つが、学習窓と評価窓の間にエンバーゴ(緩衝期間)を置くことです。指標の計算に必要なルックバックがまたがると、境界付近で情報が漏れることがあります。数バー分の空白を挟めば、学習の情報が評価窓の入口に染み出すのを抑えられます。
分割シミュレーターで試す
総期間・学習月数・評価月数・ステップ月数を入れると、例示タイムライン上にfoldを描画します。入力値はブラウザ内だけで計算し、日付や個人データを外部へ送信しません。JavaScriptが無効な場合は、直下の静的な計算例をご覧ください。
ウォークフォワード分割シミュレーター
上の値で「分割を計算する」を押すと、foldの数と各窓が表示されます。
このシミュレーターはロジックのイメージ用で、成績や利益を計算するものではありません。実際のfold設計は取引数やレジームの分布を見ながら調整してください。
将来は保証されない:フォワードへの接続
ウォークフォワードでOOS劣化が小さくても、それは「過去のどの局面でも当てはめ一辺倒ではなかった」ことを示すにとどまります。将来の相場が過去と同じ性質を保つ保証はありません。特に、これまで一度も現れていないレジームが来れば、前提そのものが崩れます。
そこで、過去データのウォークフォワードの次に、実運用に近い環境でのフォワードテストへ接続します。約定・スプレッド・スリッページを含めた条件で前向きに走らせると、机上のOOSでは見えない摩擦が表面化します。コストの反映方法はコスト感度とストレステストで、複数戦略を束ねたときの挙動は複数戦略ポートフォリオのバックテストで扱っています。単一の検証で「終わり」にせず、複数の角度から前提を揺さぶることが、過剰適合に対する現実的な防御です。
実務チェックリスト
- 分割は時間順か。ランダム分割で未来参照リークが混ざっていないか。
- 各foldで「学習→固定→評価」の順序を守り、評価結果を見てから調整していないか。
- 評価窓ごとに最低取引数を満たしているか。少数の窓を結論の根拠にしていないか。
- ローリングとアンカードなど複数方式で結論が揺れないかを確認したか。
- WFE・劣化率・取引数・ドローダウン・分布を並べて読み、単一スコアに頼っていないか。
- 学習窓と評価窓の重複や、エンバーゴの要否を確認したか。
- ウォークフォワードの後に、コストとレジームを変えたストレスやフォワードテストへ接続したか。

