adaptive-wfo-epoch について
Adaptive Walk-Forward Epoch Selection(AWFES)は、Walk-Forward Optimizationの各フォールドでモデルの学習エポック数を選ぶためのリファレンススキルです。機械学習やトレーディングモデルの実践者向けに、早期停止ではなくWalk-Forward Efficiencyと学習コストを用いてエポック数を選定します。
主な機能
- 01フォールドごとの候補エポック評価
- 02Walk-Forward Efficiencyの計算
- 03パレートフロンティアによる選定
- 04フォールド間でエポック事前値を継承
- 05WFE集約と安定性のガイド
活用シーン
- 01Walk-Forward学習のエポック数選定
- 02WFEと学習コストの比較
- 03フォールド間でのエポック選択の継承
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill adaptive-wfo-epochインストール後、Claude Code で/adaptive-wfo-epochを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/academic-foundations.mdanti-patterns.mdconfiguration-framework.mdefficient-frontier.mdepoch-selection-decision-tree.mdepoch-smoothing-methods.mdepoch-smoothing.mdevolution-log.mdfeature-sets.mdguardrails.mdlook-ahead-bias-v3.mdlook-ahead-bias.mdmathematical-formulation.mdoos-application.mdoos-metrics-implementation.mdoos-metrics.mdoos-workflow.mdrange-bar-metrics.mdtroubleshooting.mdwfe-aggregation.mdxlstm-implementation.md詳細
適応型ウォークフォワード・エポック選択(AWFES)
ウォークフォワード最適化(WFO)における適応型エポック選択の機械可読リファレンスです。ウォークフォワード効率(WFE)を目的関数として、フォールドごとのトレーニングエポックを最適化します。
自己進化型スキル:このスキルは利用を通じて改善されます。指示に誤りがある場合、パラメーターにずれが生じた場合、または回避策が必要になった場合は、先送りせず、直ちにこのファイルを修正してください。実際に再現可能な問題がある場合のみ更新してください。
このスキルを使用する場面
次の場合にこのスキルを使用します。
- WFO における ML モデルの最適なトレーニングエポックを選択する
- ウォークフォワード効率指標を使って過学習を回避する
- フォールドごとの適応型エポック選択を実装する
- エポックとパフォーマンスのトレードオフに関する効率的フロンティアを計算する
- WFO のフォールド間でエポックの事前情報を引き継ぐ
クイックスタート
from adaptive_wfo_epoch import AWFESConfig, compute_efficient_frontier
# Generate epoch candidates from search bounds and granularity
config = AWFESConfig.from_search_space(
min_epoch=100,
max_epoch=2000,
granularity=5, # Number of frontier points
)
# config.epoch_configs → [100, 211, 447, 945, 2000] (log-spaced)
# Per-fold epoch sweep
for fold in wfo_folds:
epoch_metrics = []
for epoch in config.epoch_configs:
is_sharpe, oos_sharpe = train_and_evaluate(fold, epochs=epoch)
wfe = config.compute_wfe(is_sharpe, oos_sharpe, n_samples=len(fold.train))
epoch_metrics.append({"epoch": epoch, "wfe": wfe, "is_sharpe": is_sharpe})
# Select from efficient frontier
selected_epoch = compute_efficient_frontier(epoch_metrics)
# Carry forward to next fold as prior
prior_epoch = selected_epoch
方法論の概要
これは何か
フォールドごとの適応型エポック選択です。次の手順で行います。
- 複数のエポック数(例:400、800、1000、2000)でモデルをトレーニングする
- エポック数ごとに WFE = OOS_Sharpe / IS_Sharpe を計算する
- トレーニングコストに対する WFE を最大化するエポックの「効率的フロンティア」を見つける
- フロンティアから最適なエポックを選択して OOS 評価を行う
- 次のフォールドの事前情報として引き継ぐ
これは何ではないか
- 早期停止ではありません:早期停止は検証損失を継続的に監視しますが、これは事後に離散的な候補を評価します
- ベイズ最適化ではありません:代理モデルは使用せず、すべての候補を直接評価します
- ネストされた交差検証ではありません:シャッフル分割ではなく、時間順の WFO を使用します
学術的基盤
| 概念 | 引用 | 主な知見 |
|---|---|---|
| ウォークフォワード効率 | Pardo (1992, 2008) | WFE = OOS_Return / IS_Return を頑健性指標とする |
| 確率的シャープレシオ | Bailey & López de Prado (2012) | 単一ルールにおけるシャープレシオの有意性 |
| パレート最適な HP 選択 | Bischl et al. (2023) | 多目的ハイパーパラメーター最適化 |
| ウォームスタート | Nomura & Ono (2021) | 最適化実行間で知識を転移する |
文献レビューの全文は、references/academic-foundations.md を参照してください。
中核となる式:ウォークフォワード効率
def compute_wfe(
is_sharpe: float,
oos_sharpe: float,
n_samples: int | None = None,
) -> float | None:
"""Walk-Forward Efficiency - measures performance transfer.
WFE = OOS_Sharpe / IS_Sharpe
Interpretation (guidelines, not hard thresholds):
- WFE ≥ 0.70: Excellent transfer (low overfitting)
- WFE 0.50-0.70: Good transfer
- WFE 0.30-0.50: Moderate transfer (investigate)
- WFE < 0.30: Severe overfitting (likely reject)
The IS_Sharpe minimum is derived from signal-to-noise ratio,
not a fixed magic number. See compute_is_sharpe_threshold().
Reference: Pardo (2008) "The Evaluation and Optimization of Trading Strategies"
"""
# Data-driven threshold: IS_Sharpe must exceed 2σ noise floor
min_is_sharpe = compute_is_sharpe_threshold(n_samples) if n_samples else 0.1
if abs(is_sharpe) < min_is_sharpe:
return None
return oos_sharpe / is_sharpe
原則に基づく設定フレームワーク
すべてのパラメーターは、第一原理またはデータの特性に基づいて導出されます。AWFESConfig は、対数間隔によるエポック生成、探索空間からのベイズ分散の導出、市場固有の年率換算係数を備えた統一的な設定を提供します。
完全な AWFESConfig クラスと compute_is_sharpe_threshold() の実装については、references/configuration-framework.md を参照してください。
ガードレール(原則に基づくガイドライン)
試行回数補正の禁止(運用ルール、2026-10-15):Deflated Sharpe Ratio、最小バックテスト期間(MinBTL)、またはその他の試行回数補正(Holm や Benjamini-Yekutieli などの FWER/FDR 手法、e-LOND、およびその他のオンライン多重検定)を計算、報告、順位付けに使用したり、引用したりしてはいけません。エポック選択リスクには、モデル自体の簡潔性を評価すること(事前に宣言した少数の候補集合)、実行前の登録、未使用データによって対処します。また、各ルールでは独自の統計量(Sharpe、PSR、MinTRL)を報告します。以前の DSR ガードレールは意図的に削除されました。再追加しないでください。
- G1:WFE のしきい値 - 実務者のコンセンサスに基づき、0.30(却下)、0.50(警告)、0.70(目標)
- G2:IS_Sharpe の最小値 - データに基づくしきい値:
2/sqrt(n)でサンプルサイズに適応 - G3:安定性ペナルティ - WFE の分散から導出される適応型しきい値により、エポックの頻繁な変更を防止
- G4:登録と未使用データ - エポック候補集合、WFE のしきい値、合格基準はスイープ前に固定します。選択プロセスが一度も触れていないテストデータで合否を判定します。試行回数補正は適用しません
すべてのガードレールの完全な実装については、references/guardrails.md を参照してください。
WFE の集約方法
帰無仮説の下では、WFE はコーシー分布に従うため、定義された平均値はありません。常に中央値またはプール方式を優先してください。
- プール WFE:サンプルサイズによる精度加重(フォールドサイズが異なる場合に最適)
- 中央値 WFE:外れ値に対して頑健(レジーム変化が疑われる場合に最適)
- 加重平均:逆分散加重(同質的なフォールドに最適)
実装と選択ガイドについては、references/wfe-aggregation.md を参照してください。
効率的フロンティアアルゴリズム
パレート最適なエポック選択:他のどのエポックにも支配されない(WFE が高く、かつトレーニング時間が短い)場合、そのエポックはフロンティア上にあります。AdaptiveEpochSelector クラスは、適応型安定性ペナルティを用いてフォールド間の状態を保持します。
アルゴリズムと繰り越しメカニズムの全容については、references/efficient-frontier.md を参照してください。
アンチパターン
| アンチパターン | 症状 | 修正 | 深刻度 |
|---|---|---|---|
| 拡張ウィンドウ(レンジバー) | フォールドごとにトレーニングサイズが増加 | 固定スライディングウィンドウを使用 | CRITICAL |
| ピークの選択 | 最良のエポックが常にスイープ境界にある | 範囲を広げ、プラトーを確認 | HIGH |
| フォールド数不足 | effective_n < 30 | フォールド数またはデータ期間を増やす | HIGH |
| 時間的自己相関の無視 | フォールド間に相関がある | パージド CV を使用し、フォールド間にギャップを設ける | HIGH |
| IS への過剰適合 | IS >> OOS Sharpe | エポック数を減らし、正則化を追加する | HIGH |
| 暗号資産に sqrt(252) を使用 | Sharpe が過大になる | sqrt(365) または週次の sqrt(7) を使用 | MEDIUM |
| 単一エポックの選択 | 不確実性を定量化できない | 信頼区間を報告する | MEDIUM |
| メタ過剰適合 | エポック選択自体が過剰適合する | 候補を最大 3~4 個に制限する | HIGH |
CRITICAL:レンジバーの ML トレーニングでは、拡張ウィンドウを決して使用しないでください。詳しい分析については、references/anti-patterns.md のセクション 7 を参照してください。
意思決定ツリー
実務者向けの意思決定ツリー全体については、references/epoch-selection-decision-tree.md を参照してください。
Start
│
├─ IS_Sharpe > compute_is_sharpe_threshold(n)? ──NO──> Mark WFE invalid, use fallback
│ │ (threshold = 2/√n, adapts to sample size)
│ YES
│ │
├─ Compute WFE for each epoch
│ │
├─ Any WFE > 0.30? ──NO──> REJECT all epochs (severe overfit)
│ │ (guideline, not hard threshold)
│ YES
│ │
├─ Compute efficient frontier
│ │
├─ Apply AdaptiveStabilityPenalty
│ │ (threshold derived from WFE variance)
└─> Return selected epoch
rangebar-eval-metrics との統合
このスキルは rangebar-eval-metrics を拡張します。
| メトリクスのソース | 用途 | 参照 |
|---|---|---|
sharpe_tw | WFE の分子(OOS)と分母(IS) | range-bar-metrics.md |
n_bars | 集計の重み付けに使用するサンプルサイズ | metrics-schema.md |
psr, min_trl | 最終的な受け入れ基準 | sharpe-formulas.md |
prediction_autocorr | モデルが崩壊していないことの検証 | ml-prediction-quality.md |
is_collapsed | モデルのヘルスチェック | ml-prediction-quality.md |
| 拡張リスクメトリクス | 詳細なリスク分析(任意) | risk-metrics.md |
推奨ワークフロー
rangebar-eval-metrics:compute_metrics.pyを使用して基本メトリクスを計算しますsharpe_twを主要シグナルとして、エポック選択のためにAWFES に入力します- デプロイ前に、未使用のテスト分割で
psr > 0.85を満たし、min_trlに必要な十分なデータがあることを検証します - モデルのヘルス状態を把握するため、
is_collapsedとprediction_autocorrを監視します
OOS 適用フェーズ
AWFES は、各フォールドを 3 つのデータ分割(Train 60% / Val 20% / Test 20%)に分け、各境界に 6% のエンバーゴギャップを設ける Nested WFO を使用します。フォールドごとのワークフローは、train でのエポックスイープ、validation での WFE 計算、ベイズ更新、train+val での最終モデルの学習、test での評価です。
図、BayesianEpochSelector クラス、および apply_awfes_to_test() の実装を含む完全なワークフローについては、references/oos-workflow.md を参照してください。拡張版のリファレンスについては、references/oos-application.md も参照してください。
エポックの平滑化手法
ベイズ更新(推奨)は、原則に基づいた不確実性を考慮する平滑化を提供します。代替手法には EMA と SMA があります。AWFESConfig.from_search_space() による初期化では、エポック範囲から分散が自動的に導出されます。
すべての手法、数式、初期化戦略については、references/epoch-smoothing-methods.md を参照してください。拡張された数学的分析については、references/epoch-smoothing.md を参照してください。
OOS メトリクスの仕様
テスト評価のための 3 階層のメトリクス構成です。
- Tier 1(主要):
sharpe_tw、hit_rate、cumulative_pnl、positive_sharpe_folds、wfe_test - Tier 2(リスク):
max_drawdown、calmar_ratio、profit_factor、cvar_10pct - Tier 3(統計):
psr、binomial_pvalue、hac_ttest_pvalue
完全なメトリクステーブル、compute_oos_metrics()、フォールド集計コードについては、references/oos-metrics-implementation.md を参照してください。しきい値の根拠については、references/oos-metrics.md を参照してください。
先読みバイアスの防止
重要(v3 の修正):TEST では val_optimal_epoch ではなく、(過去のフォールドのみから得られる)prior_bayesian_epoch を使用する必要があります。ベイズ更新はテスト評価の後に行い、情報が過去から現在にのみ流れるようにします。
v3 の修正内容、エンバーゴ要件、検証チェックリスト、アンチパターンについては、references/look-ahead-bias-v3.md を参照してください。詳細な例については、references/look-ahead-bias.md を参照してください。
参考資料
| トピック | 参考ファイル |
|---|---|
| 学術文献 | academic-foundations.md |
| 数学的定式化 | mathematical-formulation.md |
| 設定フレームワーク | configuration-framework.md |
| ガードレール | guardrails.md |
| WFE の集約 | wfe-aggregation.md |
| 効率的フロンティア | efficient-frontier.md |
| 決定木 | epoch-selection-decision-tree.md |
| アンチパターン | anti-patterns.md |
| OOS ワークフロー | oos-workflow.md |
| OOS の適用 | oos-application.md |
| エポック平滑化手法 | epoch-smoothing-methods.md |
| エポック平滑化分析 | epoch-smoothing.md |
| OOS メトリクスの実装 | oos-metrics-implementation.md |
| OOS メトリクスのしきい値 | oos-metrics.md |
| 先読みバイアス(v3) | look-ahead-bias-v3.md |
| 先読みバイアスの例 | look-ahead-bias.md |
| 特徴量セット | feature-sets.md |
| xLSTM の実装 | xlstm-implementation.md |
| レンジバーメトリクス | range-bar-metrics.md |
| トラブルシューティング | troubleshooting.md |
関連スキル
| スキル | 関連性 |
|---|---|
| sharpe-ratio-non-iid-corrections | 一般化シャープ分散、PSR、MinTRL |
| opendeviation-eval-metrics | WFE が使用するメトリクスの定義 |
引用文献一覧
- Bailey, D. H., & López de Prado, M. (2012). The Sharpe ratio efficient frontier. Journal of Risk, 15(2), 3-44.
- Bischl, B., et al. (2023). Multi-Objective Hyperparameter Optimization in Machine Learning. ACM Transactions on Evolutionary Learning and Optimization.
- López de Prado, M. (2018). Advances in Financial Machine Learning. Wiley. 第7章。
- Nomura, M., & Ono, I. (2021). Warm Starting CMA-ES for Hyperparameter Optimization. AAAI Conference on Artificial Intelligence.
- Pardo, R. E. (2008). The Evaluation and Optimization of Trading Strategies, 2nd Edition. John Wiley & Sons.
実行後の振り返り
このスキルの実行後、終了する前に以下を確認してください。
- コマンドは成功しましたか? — 成功しなかった場合は、失敗の原因となった手順またはエラーテーブルを修正してください。
- パラメーターや出力に変更はありましたか? — 基盤となるツールのインターフェースに変更があった場合は、使用例とパラメーター表をそれに合わせて更新してください。
- 回避策が必要でしたか? — 異なるフラグや追加手順などで対応した場合は、次回同じ回避策が不要になるよう、このSKILL.mdを更新してください。
問題が実際に発生し、再現可能な場合にのみ更新してください。推測に基づく更新は避けてください。