mcpField
E
edge-signal-aggregator

edge-signal-aggregator

github.com/tradermontyデータ・データベース3.4k3.2k 回インストール2 日前に更新
リポジトリ

edge-signal-aggregator について

複数のエッジ検出スキルの出力を、重み付けしたランキングダッシュボードにまとめるスキルです。出典を追跡し、重複を整理して、矛盾するシグナルをレビュー用に示します。

主な機能

  1. 01重み付けした総合確信度スコア
  2. 02重複シグナルの統合
  3. 03矛盾シグナルの検出
  4. 04出典への追跡リンク
  5. 05重みと確信度しきい値の設定
  6. 06JSONとMarkdownのレポート

活用シーン

  1. 01複数の分析スキルの出力集約
  2. 02追加調査するエッジ案の優先順位付け
  3. 03配分判断前のシグナル矛盾の確認

インストール

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

$npx skills add https://github.com/tradermonty/claude-trading-skills --skill edge-signal-aggregator

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

同梱ファイル

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

requirements.txt
assets/
default_weights.yaml
references/
signal-weighting-framework.md
scripts/
aggregate_signals.py
scripts/tests/
conftest.py
test_aggregate_signals.py

詳細

エッジシグナルアグリゲーター

概要

複数の上流エッジ探索スキルの出力を統合し、重み付けされた確信度ダッシュボードを作成します。このスキルでは、設定可能なシグナルの重みを適用し、重複するテーマを重複排除し、スキル間の矛盾にフラグを付け、集約された信頼度スコアに基づいて複合的なエッジ案をランク付けします。その結果、各エッジ案に貢献したスキルへの参照リンク付きの、優先順位付けされたエッジ候補リストが作成されます。

使用する場面

  • 複数のエッジ探索スキルを実行した後、統合されたビューが必要な場合
  • edge-candidate-agent、theme-detector、sector-analyst、institutional-flow-tracker からのシグナルを統合する場合
  • 複数のシグナルソースに基づいてポートフォリオの配分を決定する前
  • 異なる分析アプローチ間の矛盾を特定する場合
  • どのエッジ案をさらに深く調査するべきか、優先順位を付ける場合

前提条件

  • Python 3.9+
  • API キーは不要です(他のスキルが出力したローカルの JSON/YAML ファイルを処理します)
  • 依存関係:pyyaml(ほとんどの環境で標準搭載)

ワークフロー

ステップ 1:上流スキルの出力を収集する

集約する上流スキルの出力ファイルを収集します。

  • edge-candidate-agent の reports/edge_candidate_*.json
  • edge-concept-synthesizer の reports/edge_concepts_*.yaml
  • theme-detector の reports/theme_detector_*.json
  • sector-analyst の reports/sector_analyst_*.json
  • institutional-flow-tracker の reports/institutional_flow_*.json
  • edge-hint-extractor の reports/edge_hints_*.yaml
ステップ 2:シグナル集約を実行する

上流の出力ファイルへのパスを指定して、アグリゲータースクリプトを実行します。

python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \
  --edge-candidates reports/edge_candidate_agent_*.json \
  --edge-concepts reports/edge_concepts_*.yaml \
  --themes reports/theme_detector_*.json \
  --sectors reports/sector_analyst_*.json \
  --institutional reports/institutional_flow_*.json \
  --hints reports/edge_hints_*.yaml \
  --output-dir reports/

任意:カスタムの重み設定を使用します。

python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \
  --edge-candidates reports/edge_candidate_agent_*.json \
  --weights-config skills/edge-signal-aggregator/assets/custom_weights.yaml \
  --output-dir reports/
ステップ 3:集約ダッシュボードを確認する

生成されたレポートを開き、以下を確認します。

  1. ランク付けされたエッジ案 - 複合確信度スコア順
  2. シグナルの由来 - 各案に貢献したスキル
  3. 矛盾 - 手動での確認が必要な相反するシグナルに付けられたフラグ
  4. 重複排除ログ - 統合された重複テーマ
ステップ 4:確信度の高いシグナルに基づいて行動する

確信度の最低しきい値で候補リストを絞り込みます。

python3 skills/edge-signal-aggregator/scripts/aggregate_signals.py \
  --edge-candidates reports/edge_candidate_agent_*.json \
  --min-conviction 0.7 \
  --output-dir reports/

出力形式

JSON レポート
{
  "schema_version": "1.1",
  "generated_at": "2026-03-02T07:00:00Z",
  "config": {
    "weights": {
      "edge_candidate_agent": 0.25,
      "edge_concept_synthesizer": 0.20,
      "theme_detector": 0.15,
      "sector_analyst": 0.15,
      "institutional_flow_tracker": 0.15,
      "edge_hint_extractor": 0.10
    },
    "min_conviction": 0.5,
    "dedup_similarity_threshold": 0.8
  },
  "summary": {
    "total_input_signals": 42,
    "unique_signals_after_dedup": 28,
    "contradictions_found": 3,
    "signals_above_threshold": 12,
    "invalid_signals_dropped": 2,
    "idempotency_check": {
      "total_input_signals": 42,
      "unique_evidence_ids": 28,
      "duplicate_copies_merged": 14,
      "independent_units_total": 30
    }
  },
  "ranked_signals": [
    {
      "rank": 1,
      "signal_id": "sig_001",
      "title": "AI Infrastructure Capex Acceleration",
      "composite_score": 0.87,
      "evidence_id": "ticket_2026-03-01_001",
      "score_scale_assumed": false,
      "contributing_skills": [
        {
          "skill": "edge_candidate_agent",
          "signal_ref": "ticket_2026-03-01_001",
          "raw_score": 0.92,
          "weighted_contribution": 0.23,
          "evidence_id": "ticket_2026-03-01_001",
          "event_fingerprint": "sha1-of-title-and-tickers"
        },
        {
          "skill": "theme_detector",
          "signal_ref": "theme_ai_infra",
          "raw_score": 0.85,
          "weighted_contribution": 0.13
        }
      ],
      "tickers": ["NVDA", "AMD", "AVGO"],
      "direction": "LONG",
      "time_horizon": "3-6 months",
      "confidence_breakdown": {
        "multi_skill_agreement": 0.30,
        "signal_strength": 0.35,
        "recency": 0.22
      }
    }
  ],
  "contradictions": [
    {
      "contradiction_id": "contra_001",
      "description": "Conflicting sector view on Energy",
      "skill_a": {
        "skill": "sector_analyst",
        "signal": "Energy sector bearish rotation",
        "direction": "SHORT"
      },
      "skill_b": {
        "skill": "institutional_flow_tracker",
        "signal": "Heavy institutional buying in XLE",
        "direction": "LONG"
      },
      "resolution_hint": "Check timeframe mismatch (short-term vs long-term)"
    }
  ],
  "deduplication_log": [
    {
      "merged_into": "edge_candidate_agent:ticket_001",
      "duplicates_removed": ["edge_candidate_agent:ticket_001@reports/ticket_001.json"],
      "similarity_score": 1.0,
      "reason": "same evidence re-ingested",
      "selection_rule": "newest timestamp wins; ties, missing, or unparsable timestamps keep the highest raw_score, then a stable key",
      "retained_copy": {
        "signal_ref": "ticket_001",
        "source_file": "reports/rerun.json",
        "raw_score": 0.5,
        "timestamp": "2026-10-10T00:00:00Z"
      },
      "discarded_copies": [
        {
          "signal_ref": "ticket_001",
          "source_file": "reports/ticket_001.json",
          "raw_score": 0.9,
          "timestamp": "2026-10-09T00:00:00Z"
        }
      ]
    },
    {
      "merged_into": "edge_candidate_agent:ticket_001",
      "duplicates_removed": ["theme_detector:ai_compute"],
      "similarity_score": 0.9
    }
  ],
  "invalid_signals": [
    {
      "skill": "theme_detector",
      "signal_ref": "broken_theme",
      "title": "Theme with a corrupted score",
      "reason": "non_finite",
      "declared_scale": null,
      "raw_value_repr": "nan",
      "source_file": "reports/theme_detector_2026-03-01.json"
    }
  ],
  "scale_assumptions_report": [
    {
      "skill": "theme_detector",
      "signal_ref": "ai_compute",
      "value": 7.2,
      "normalized_value": 0.072,
      "assumed_scale": "0-100",
      "source_file": "reports/theme_detector.json"
    }
  ]
}
プロデューサーの契約(任意のキー、スキーマ 1.1)

各プロデューサー項目(チケット、コンセプト、テーマ、セクター行、フロー、ヒント)には、次の項目を含めることができます。

  • evidence_id — 基になるエビデンスの安定した識別子です。このキーがない場合は、スキル、シグナル参照、タイトル、ティッカー、方向から決定論的な代替値が導出されます(タイムスタンプは除外されるため、タイムスタンプの更新によって新しい識別子が生成されることはありません)。同じエビデンス(同じスキル + evidence_id)を再取り込みしても、ボーナスは追加されません。すべてのコピーは 1 つに集約されます。コピーが異なる場合は、最新の観測が優先されます。タイムスタンプをタイムゾーン対応の日時として解析して比較し(日付のみの値とタイムゾーンのない値は UTC として扱います)、最も新しいコピーのスコアが保持されます。同じタイムスタンプ、タイムスタンプがない場合、または解析できない場合は、raw_score が最も高いコピーが優先され、次に安定キー(signal_ref、source_file)で決定されるため、取り込み順によって結果が変わることはありません。順序付けの対象は ISO-8601 形式の文字列(または YYYY-MM-DD)のみです。エポック数値や 20261010 などのコンパクト形式は、タイムスタンプなしとして扱われます。残るすべての同順位は、タイトル、方向、ティッカー、シグナルの正規化ダンプで決定されます。保持されたコピーより古いスコアを持つコピーは破棄されるため、新しい低スコアが古い高スコアに置き換わります。破棄されたコピーのスコアとタイムスタンプは、deduplication_log[].discarded_copies に記録されます。同一のコピーではスコアは変わりません。
  • score_scale — 生スコアの尺度を示す "0-1" または "0-100" です。宣言された尺度は厳密に適用されます。NaN、無限大、負の値、範囲外の値は、最大の確信度に変換されることなく invalid_signals に記録されます。宣言が存在するものの解析できない場合(""、"foo")も、拒否されます(missing_scale)。キーがない場合、(1, 100] の値は 100 で除算され、score_scale_assumed: true と scale_assumptions_report のエントリーが付与されます(value は元の入力値、normalized_value は使用された 0-1 のスコアです)。100 を超える値は拒否されます。
合意ルール(Issue #510)

合意ボーナスは、統合されたシグナルの貢献元について、agreement_tier = min(distinct evidence_ids, distinct event_fingerprints, distinct skills) に基づいて適用されます。ティア 2 では 2 スキルのボーナス、ティア 3 以上では 3 スキル以上のボーナスが得られます。重複の再取り込みでは何も得られません。同じイベントを別のスキルで言い換えた場合(正規化されたタイトル + ティッカーが同一の場合)は、1 回として数えられます。既知の制限事項:イベントフィンガープリントは語彙ベースのため、異なる語彙を使った言い換えでは合意ボーナスが適用される場合があります。異なるスキル間の言い換えは、独立した検証を行ってください。統合された重複には、コピーごとのボーナスが適用されなくなりました(merge_bonus_per_duplicate は非推奨で、無視されます)。

Markdown レポート

Markdown レポートは、人が読みやすいダッシュボードを提供します。

# Edge Signal Aggregator Dashboard
**Generated:** 2026-03-02 07:00 UTC

## Summary
- Total Input Signals: 42
- Unique After Dedup: 28
- Contradictions: 3
- High Conviction (>=0.5): 12

## Top 10 Edge Ideas by Conviction

### 1. AI Infrastructure Capex Acceleration (Score: 0.87)
- **Tickers:** NVDA, AMD, AVGO
- **Direction:** LONG | **Horizon:** 3-6 months
- **Contributing Skills:**
  - edge-candidate-agent: 0.92 (ticket_2026-03-01_001)
  - theme-detector: 0.85 (theme_ai_infra)
- **Confidence Breakdown:** Agreement 0.30 | Strength 0.35 | Recency 0.22

...

## Contradictions Requiring Review

### Energy Sector Conflict
- **sector-analyst:** Bearish rotation (SHORT)
- **institutional-flow-tracker:** Heavy buying XLE (LONG)
- **Hint:** Check timeframe mismatch

## Deduplication Summary
- 14 signals merged into 8 unique themes
- Average similarity of merged signals: 0.89

レポートは reports/ に、次のファイル名で保存されます。

  • edge_signal_aggregator_YYYY-MM-DD_HHMMSS.json
  • edge_signal_aggregator_YYYY-MM-DD_HHMMSS.md

リソース

  • scripts/aggregate_signals.py -- CLI インターフェースを備えたメインの集約スクリプト
  • references/signal-weighting-framework.md -- デフォルトの重みとスコアリング手法の根拠
  • assets/default_weights.yaml -- デフォルトのスキル重み設定

主な原則

  1. 出典の追跡可能性 -- 集約されたすべてのシグナルは、元のスキルと参照元にさかのぼれます
  2. 矛盾の透明性 -- 相反するシグナルは隠さずに明示し、情報に基づいた判断を可能にします
  3. 重みのカスタマイズ -- デフォルトの重みは一般的な信頼性を反映していますが、ユーザーごとにカスタマイズできます
  4. 情報を損なわない重複排除 -- 統合されたシグナルには、すべての元の出典への参照が保持されます
  5. 実行可能な出力 -- 各アイデアについて、明確なティッカー、方向性、期間を示すランキングリストを出力します
  6. 冪等な集約 -- 同じ証拠を再取り込みしてもスコアは増加しません。合意による加点には、異なるスキルと異なるイベントの両方が必要です
  7. 厳格なスコア検証 -- NaN/無限大、負の値、範囲外のスコアは拒否して報告し、最大の信頼度に変換することはありません

コメント