シグナル事後分析 (Signal Postmortem)
概要
Signal Postmortemは、エッジパイプライン、スクリーナー、その他のスキルによって生成された取引シグナルの成果を記録・分析します。予測されたエッジ方向と5日および20日の実現リターンを比較し、結果をカテゴリ(真陽性、偽陽性、機会損失、レジームミスマッチ)に分類し、edge-signal-aggregatorの重み調整とスキル改善バックログエントリのためのフィードバックを生成します。
使用タイミング
- 取引がクローズされ、その成果を記録したい場合
- 保有期間(5日または20日)に達したシグナルのバッチをレビューする場合
- 特定のスキルからの系統的な偽陽性パターンを特定する場合
- edge-signal-aggregatorの重み調整のためのフィードバックを生成する場合
- 意思決定品質メトリクスからスキル改善バックログを構築する場合
- 定期的(週次/月次)なシグナル品質監査のため
前提条件
- Python 3.9+
- FMP APIキー(オプション、手動で提供しない場合に実現リターンを取得するため)
- 標準ライブラリ + API呼び出し用の
requests - 入力:JSON形式のシグナルレコード(edge-signal-aggregatorまたはスクリーナー出力から)
APIキーの設定(オプション)
リターン計算用の価格データを自動取得する場合は、FMP APIキーを設定します:
export FMP_API_KEY=your_api_key_here
または、コマンドラインで --api-key YOUR_KEY としてキーを渡すこともできます。APIキーがない場合でも、--exit-price と --exit-date を指定して手動で成果を記録できます。
ワークフロー
ステップ1:シグナルレコードの準備
クローズ済みまたは成熟したシグナルレコードを収集します。各レコードには以下を含める必要があります:
signal_id:一意の識別子ticker:株式シンボルsignal_date:シグナル生成日predicted_direction:LONG または SHORTsource_skill:シグナルを生成したスキルentry_price:シグナル生成時の価格(オプション、手動上書き用)
# 例:事後分析準備ができているシグナル(5日以上経過)をリスト表示
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--list-ready \
--signals-dir state/signals/ \
--min-days 5
ステップ2:成果の記録
事後分析レコーダーを実行して実現リターンを取得し、結果を分類します。
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--signals-file state/signals/aggregated_signals_2026-03-10.json \
--holding-periods 5,20 \
--output-dir reports/
手動で成果を記録する場合(価格データが既に利用可能な場合):
python3 skills/signal-postmortem/scripts/postmortem_recorder.py \
--signal-id sig_aapl_20260310_abc \
--exit-price 178.50 \
--exit-date 2026-03-15 \
--outcome-notes "Closed at target, +3.2% in 5 days" \
--output-dir reports/
ステップ3:結果の分類
レコーダーは各シグナルを自動的に4つのカテゴリのいずれかに分類します:
| カテゴリ | 定義 |
|---|---|
| TRUE_POSITIVE | 予測方向が実現リターンの符号と一致 |
| FALSE_POSITIVE | 予測方向が実現リターンと逆 |
| MISSED_OPPORTUNITY | シグナルが取引されなかったが、利益が出ていた可能性がある |
| REGIME_MISMATCH | 市場レジームの変化によりシグナルが失敗 |
分類ルールは references/outcome-classification.md に文書化されています。
ステップ4:フィードバックファイルの生成
下流のコンシューマー向けにフィードバックを生成します:
# edge-signal-aggregatorの重み調整提案を生成
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-weight-feedback \
--output-dir reports/
# スキル改善バックログエントリを生成
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--generate-improvement-backlog \
--output-dir reports/
ステップ5:サマリー統計のレビュー
スキル別、ティッカー別、期間別の集計統計を生成します:
python3 skills/signal-postmortem/scripts/postmortem_analyzer.py \
--postmortems-dir reports/postmortems/ \
--summary \
--group-by skill,month \
--output-dir reports/
出力形式
事後分析レコード(JSON)
{
"schema_version": "1.0",
"postmortem_id": "pm_sig_aapl_20260310_abc",
"signal_id": "sig_aapl_20260310_abc",
"ticker": "AAPL",
"signal_date": "2026-03-10",
"source_skill": "edge-signal-aggregator",
"predicted_direction": "LONG",
"entry_price": 172.50,
"realized_returns": {
"5d": 0.032,
"20d": 0.058
},
"exit_price": 178.50,
"exit_date": "2026-03-15",
"holding_days": 5,
"outcome_category": "TRUE_POSITIVE",
"regime_at_signal": "RISK_ON",
"regime_at_exit": "RISK_ON",
"outcome_notes": "Clean breakout, held through minor pullback",
"recorded_at": "2026-03-17T10:30:00Z"
}
重みフィードバック(JSON)
{
"schema_version": "1.0",
"generated_at": "2026-03-17T10:35:00Z",
"analysis_period": {
"from": "2026-02-01",
"to": "2026-03-15"
},
"skill_adjustments": [
{
"skill": "vcp-screener",
"current_weight": 1.0,
"suggested_weight": 0.85,
"reason": "15% false positive rate in RISK_OFF regime",
"sample_size": 42
}
],
"confidence": "MEDIUM",
"min_sample_threshold": 20
}
スキル改善バックログエントリ(YAML)
- skill: vcp-screener
issue_type: false_positive_cluster
severity: medium
evidence:
false_positive_rate: 0.15
sample_size: 42
regime_correlation: RISK_OFF
suggested_action: "Add regime filter or reduce signal confidence in RISK_OFF"
generated_by: signal-postmortem
generated_at: "2026-03-17T10:35:00Z"
サマリーレポート(Markdown)
レポートは reports/ ディレクトリに postmortem_summary_YYYY-MM-DD.md というファイル名で保存されます。
リソース
scripts/postmortem_recorder.py-- 個々のシグナル成果を記録しますscripts/postmortem_analyzer.py-- フィードバックとサマリー統計を生成しますreferences/outcome-classification.md-- 分類ルールとエッジケースreferences/feedback-integration.md-- フィードバックを下流スキルと統合する方法
主要原則
- 正直な帰属 -- すべての成果は説明責任のために元のスキルに帰属されます
- レジーム認識 -- スキルの失敗と市場レジームシフトを区別するためにレジームコンテキストが記録されます
- 最小サンプルサイズ -- 重み調整には統計的有意性のために20以上のシグナルが必要です
- フィードバックループの閉鎖 -- 結果はシグナル集約とスキル品質の両方を改善するためにフィードバックされます