---
title: 判据归因对照组检验 —— base rate 冒充能力的实证
tags: [判据台账, 风控否决, 对照组, beta剔除, 验证方法论]
created: 2026-09-12
status: confirmed
---

# 判据归因对照组检验（2026-09-12）

## 核心发现（两个规则都测了）

| 组 | 样本 | 超额中位 | 跑输基准比例 | 中位差 | 结论 |
|---|---|---|---|---|---|
| 全市场（基准率） | 5544 只 | −1.70pp | **68%** | — | base rate |
| 被否决组（否决/回避） | 167 只 | −1.41pp | 65% | **+0.29pp** | 无识别能力 |
| 看空组（三振/出局） | 169 只 | −1.09pp | 66% | **+0.62pp** | 无识别能力 |

**两条规则合计 636 条判据 = 全部判据的 96%。**

→ 两组都**不比市场更差，反而略好于市场**。
→ 「66% 胜率」完全是 base rate（市场本身 68% 跑输基准）。
→ 系统长期用"66% 胜率"佐证信心，**那 66% 是 beta，不是能力**。
→ 与"❌避险明细"（博瑞传播 +14.9% / 远望谷 +14.2% / 武汉凡谷 +13.8%）一致：这两条规则**可能在剔除好票**（机会成本），而非识别风险。

## 怎么发现的（方法论）

1. 先补 `falsify/reason` 三要素（664/664 = 100%）→ L4（按命中率淘汰）才解锁
2. L4 首跑发现：302 条「否决」判据全部 ➖/⏳（`direction=回避/清仓/风险` 不在方向回测内）
3. 核实 `judgment_backtest.py:242` 注释 → 那是 9/11 有意设计（曾把否决误记"看空"→331 条假看空污染胜率），**不是缺陷**
4. 于是新增独立口径 `✅避险/❌避险`（标的跑输/跑赢基准），用可区分符号保证零污染（全库 0 处 `LIKE '%✅%'`）
5. 重算 169 条 → 避险正确率 66%
6. **关键一步**：发现 66% 与方向胜率 66% 完全相同 → 起疑
   - 先排除"重复计数"：两类 (date,标的) 完全不重合 → 独立样本 ✅
   - 再起疑"是否都在测同一件市场事实" → **建对照组**
7. 对照组：`get_daily_by_date` 取全市场 9/7 与 9/11 → 5544 只超额分布 → base rate = 68%
8. 结论：66% < 68% ⇒ 无识别能力

## 铁律（本次固化）

> **任何"命中率/正确率"必须走两步，缺一步就是 beta：**
> ① **减同期基准**（超额制）—— 否则测的是涨跌不是能力
> ② **与全市场 base rate 比** —— 否则测的是市场本身，不是规则

只有第①步会得出"66% 好厉害"的错觉。第②步才见底。

## 落地物

- `~/.hermes/scripts/verdict_control_test.py --date --horizon --rule`（可复跑任意窗口）
- `~/.hermes/scripts/digest_audit.py` ③b（打印避险率 + 自动反-beta 告警 + 对照组结论）
- `judgment_backtest.py`：`✅避险/❌避险` 独立口径
- `judgment_ledger.py`：`save_judgment` 三要素门（falsify/reason/source）+ `source-machine` 打标

## 诚实边界（未完成）

- 当前只覆盖 **1 个窗口**（9/7→9/11，n=167）；8/19 那批仅 5 只。
  方向明确（66% < 68% base rate），但"规则完全无效"的定论**需多窗口复验**。
- 对照组应扩展到**其它规则**：三振出局（66%）同样需要 base rate 对照才能定论。


---
**相关概念**: [[风险控制]] | [[策略回测模板]]
