mcpField
A
adaptive-wfo-epoch

adaptive-wfo-epoch

github.com/terrylicaデータ・データベース2145 回インストール1 日前に更新
リポジトリ

adaptive-wfo-epoch について

Adaptive Walk-Forward Epoch Selection(AWFES)は、Walk-Forward Optimizationの各フォールドでモデルの学習エポック数を選ぶためのリファレンススキルです。機械学習やトレーディングモデルの実践者向けに、早期停止ではなくWalk-Forward Efficiencyと学習コストを用いてエポック数を選定します。

主な機能

  1. 01フォールドごとの候補エポック評価
  2. 02Walk-Forward Efficiencyの計算
  3. 03パレートフロンティアによる選定
  4. 04フォールド間でエポック事前値を継承
  5. 05WFE集約と安定性のガイド

活用シーン

  1. 01Walk-Forward学習のエポック数選定
  2. 02WFEと学習コストの比較
  3. 03フォールド間でのエポック選択の継承

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/terrylica/cc-skills --skill adaptive-wfo-epoch

インストール後、Claude Code で/adaptive-wfo-epochを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
academic-foundations.md
anti-patterns.md
configuration-framework.md
efficient-frontier.md
epoch-selection-decision-tree.md
epoch-smoothing-methods.md
epoch-smoothing.md
evolution-log.md
feature-sets.md
guardrails.md
look-ahead-bias-v3.md
look-ahead-bias.md
mathematical-formulation.md
oos-application.md
oos-metrics-implementation.md
oos-metrics.md
oos-workflow.md
range-bar-metrics.md
troubleshooting.md
wfe-aggregation.md
xlstm-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

方法論の概要

これは何か

フォールドごとの適応型エポック選択です。次の手順で行います。

  1. 複数のエポック数(例:400、800、1000、2000)でモデルをトレーニングする
  2. エポック数ごとに WFE = OOS_Sharpe / IS_Sharpe を計算する
  3. トレーニングコストに対する WFE を最大化するエポックの「効率的フロンティア」を見つける
  4. フロンティアから最適なエポックを選択して OOS 評価を行う
  5. 次のフォールドの事前情報として引き継ぐ
これは何ではないか
  • 早期停止ではありません:早期停止は検証損失を継続的に監視しますが、これは事後に離散的な候補を評価します
  • ベイズ最適化ではありません:代理モデルは使用せず、すべての候補を直接評価します
  • ネストされた交差検証ではありません:シャッフル分割ではなく、時間順の 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_twWFE の分子(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
推奨ワークフロー
  1. rangebar-eval-metrics:compute_metrics.py を使用して基本メトリクスを計算します
  2. sharpe_tw を主要シグナルとして、エポック選択のためにAWFES に入力します
  3. デプロイ前に、未使用のテスト分割で psr > 0.85 を満たし、min_trl に必要な十分なデータがあることを検証します
  4. モデルのヘルス状態を把握するため、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-metricsWFE が使用するメトリクスの定義

引用文献一覧

  • 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.

実行後の振り返り

このスキルの実行後、終了する前に以下を確認してください。

  1. コマンドは成功しましたか? — 成功しなかった場合は、失敗の原因となった手順またはエラーテーブルを修正してください。
  2. パラメーターや出力に変更はありましたか? — 基盤となるツールのインターフェースに変更があった場合は、使用例とパラメーター表をそれに合わせて更新してください。
  3. 回避策が必要でしたか? — 異なるフラグや追加手順などで対応した場合は、次回同じ回避策が不要になるよう、このSKILL.mdを更新してください。

問題が実際に発生し、再現可能な場合にのみ更新してください。推測に基づく更新は避けてください。

コメント