---
title: key_node_analysis 未来函数修复（含前后对照）
tags: [未来函数, 口径, 修复记录]
created: 2026-09-12
status: verified
---

# key_node_analysis.py 未来函数修复：100% → 58%

## 问题

「底部反转节点」的筛选条件用了**信号日之后 5 天**的价格：

```python
post_rebound = (closes[min(n-1,i+5)] / closes[local_low_idx] - 1) * 100
if post_rebound < 5: continue     # ← 用未来数据挑样本
```

然后统计「5日反弹胜率」—— 而入选样本的定义就是「5日内已反弹≥5%」，
⇒ **同义反复，必然 100%**。这不是能力，是筛选条件本身。

同源的孪生 bug 已在 `key_node_detector.py` 修过（harness 指出 `key_node_analysis.py` 漏修）。

## 修复（三处）

1. 删除 `if post_rebound < 5: continue`（前向筛选）
2. 删除 `if i + 5 >= n: continue`（它是为保护前向索引而存在，
   副作用是**最后 5 天永远进不了样本** = 样本截断型隐性偏差）
3. `post_rebound` 改作**事后统计指标**（`if i+5 < n else None`），不参与筛选

## 实证（含对照物）

| | 修复前 | 修复后 |
|---|---|---|
| 底部反转节点数 | 3,578 | **12,999** |
| 5日反弹胜率（绝对口径） | **100%** | **58%** |
| 20日反弹胜率（绝对口径） | **83%** | **53%** |
| 平均前期跌幅 | -12.3% | -11.0% |
| **对照: 放量突破节点** | 1,810 | **1,810（未变）** ✓ |

对照物证明改动是外科手术式的，没有波及未修改的那一段。

## 附带修掉的「声明与事实漂移」

原 L196 硬编码文案：`特征: 胜率最高，后续20日平均收益最大`
—— **不随数据变化的固定结论**。修掉未来函数后 58%/53% 已非最高，该文案即为假声明。
已删除并替换为「请看上方实际统计表，不要引用固定文案」。

## 未完成（如实记录）

- **`key_node_analysis.py` 运行末尾 `KeyError: nan`（rc=1）** —— pandas `.xs` 遇到 nan 键崩溃；
  修复前也存在（非本次引入），但会导致【后续段落不打印】= 分析不完整而无人知晓。
- 该 bug 属「执行性」问题，未修；建议下次处理。

## 相关

- 检测器: `~/.hermes/scripts/lookahead_filter_scan.py`（已补模块级扫描 + getattr 修复）
- 同源修复: `key_node_detector.py`（早前已修）
- 同类前例: 日报未来函数 89.2% → 52%


---
**相关概念**: [[成交量与主力控盘]] | [[买卖点判断]]
