回归与显著性:重叠样本让 t 值虚高
纯噪声数据上,假阳性率高达 56.8%——然后回头修正 P2
P2 每一节,我都用日频数据算"未来 10 日 / 20 日 / 60 日收益",然后做 t 检验。
这里有个被广泛忽略的问题:这些收益窗口是重叠的。今天算的"未来 20 日收益",和明天算的,共享 19 天的行情。
后果有多严重?我在纯随机数据上做了模拟——没有任何真实效应,理想的假阳性率应该是 5%:
| 情形 | 普通 OLS 假阳性率 |
|---|---|
| 信号逐日独立(不真实) | 6.2% |
| 信号持续 20 天(接近真实) | 56.8% |
一半以上的"发现"是假的。而真实的交易信号——RSI>70、价格在均线上方——全都是持续的。
这一节找出 t 检验失效的真正条件,然后回头把 P2 的结论用 Newey-West 重算一遍。
你想估计一个城市的平均身高,于是采访了 1000 个人。
但如果这 1000 人来自 50 个家庭,每家 20 口——你的有效样本量根本不是 1000,因为同一家人身高相似,后 19 个人提供的新信息远少于第一个。
而 t 值大致按 √N 增长。把 50 当成 1000,你的置信度会虚高约 4.5 倍。
一、模拟:找出 t 检验失效的真正条件
这一节我最初的模拟设计是错的,而那个错误恰好指出了真正的机制。
第一版模拟里,我把"信号日"设成逐日独立的随机数(每天各自抛硬币)。结果:普通 OLS 假阳性率 6.2%,接近理想的 5%——重叠窗口似乎没有造成任何问题。
这与预期不符。原因是:光有"y 用重叠窗口"还不够。
真正让 t 检验崩掉的,是 x 和 y 同时具有持续性。而真实的交易信号恰恰都是持续的:RSI>70 会连着好几天,价格在均线上方会连着好几周。
修正模拟:把信号改成"一旦成立就连续成立 20 天"——假阳性率立刻飙到 56.8%。
400 次模拟,每次 2000 天纯随机收益(不含任何真实效应),检验"信号日"的未来 20 日收益是否异于其他日子:
| 情形 | 普通 OLS | Newey-West |
|---|---|---|
| A. 信号逐日独立(不真实) | 6.2% | 7.2% |
| B. 信号持续 20 天(接近真实) | 56.8% | 8.8% |
两个结论:
- 在完全没有效应的数据上,普通 t 检验有 56.8% 的概率报告"显著"
- Newey-West 把它拉回到 8.8%——不完美,但已经在可用范围
二、为什么:有效样本量
| 未来 N 日收益 | 名义样本 | 一阶自相关 | 有效样本 | 缩水 |
|---|---|---|---|---|
| 1 日 | 4022 | 0.020 | 3863 | 4.0% |
| 5 日 | 4018 | 0.804 | 436 | 89.1% |
| 10 日 | 4013 | 0.903 | 206 | 94.9% |
| 20 日 | 4003 | 0.956 | 90 | 97.7% |
| 60 日 | 3963 | 0.985 | 29 | 99.3% |
用一阶近似 N_eff ≈ N × (1-ρ)/(1+ρ):
未来 20 日收益,名义样本 4003,有效样本只有 90 个。60 日更极端——只剩 29 个。
而 t 值大致按 √N 增长。把 90 当成 4003,t 值会虚高约 √(4003/90) ≈ 6.7 倍。
这解释了 P2 那些 t 值为什么普遍很大:不是效应强,是样本被重复计数了。
🔧 动手做:在纯随机数据上,造出 56.8% 的"显著"(6 分钟)
跑 python overlap_bias.py。它在完全没有真实效应的纯随机数据上,用重叠窗口(今天算未来 20 日、明天再算,共享 19 天)做 t 检验。
你会看到(实测):普通 OLS 的假阳性率高达 56.8%(理想应是 5%),Newey-West 修正后拉回 8.8%。
想明白:重叠窗口让有效样本量远小于名义样本(未来 20 日收益名义 4003、有效仅 90),t 值因此虚高。一半以上的"发现"是噪声——而真实交易信号(RSI>70、均线上方)全都是持续的,全踩这个坑。用重叠窗口做检验,必须报 Newey-West。
三、回头修正 P2
把 P2 的关键结论改写成回归形式,同时报普通 t 值与 Newey-West t 值:
| 检验 | 持有期 | 系数 | 普通 t | 普通 p | NW t | NW p | 结论 |
|---|---|---|---|---|---|---|---|
| p2.2 RSI 上穿 70 | 10 日 | 1.024pp | 7.16 | 0.0000 | 5.04 | 0.0000 | 仍显著 |
| p2.2 RSI 上穿 70 | 20 日 | 1.185pp | 5.70 | 0.0000 | 3.91 | 0.0001 | 仍显著 |
| p2.3 上穿布林上轨 | 10 日 | 0.385pp | 3.85 | 0.0001 | 3.08 | 0.0021 | 仍显著 |
| p2.3 上穿布林上轨 | 20 日 | 0.650pp | 4.48 | 0.0000 | 3.47 | 0.0005 | 仍显著 |
| p2.4 OBV 顶背离 | 10 日 | 0.788pp | 5.45 | 0.0000 | 3.44 | 0.0006 | 仍显著 |
| p2.4 OBV 顶背离 | 20 日 | 0.890pp | 4.24 | 0.0000 | 2.35 | 0.0188 | 仍显著 |
诚实的读法:
- 六项全部仍然显著——P2 的核心结论经受住了这一轮修正
- 但 t 值普遍缩水:RSI 10 日从 7.16 降到 5.04,OBV 20 日从 4.24 降到 2.35(已接近临界)
- 缩水幅度与重叠程度相关:持有期越长,虚高越严重
这不是说 P2 全错,而是说:它们的置信度被高估了。而 OBV 20 日那一项,修正后的 t=2.35 已经在"再多一层校正就会掉出去"的边缘——若先用 Newey-West 修正后的 p 值,再做 P3.4 的多重检验,它就会掉出去(P3.4 用的是 P2 原始 p 值,详见那一节的口径说明)。
四、规矩
- 任何用重叠窗口做的检验,都必须报 Newey-West 修正后的 t 值(
maxlags取持有期长度) - 同时报有效样本量,让读者知道你的 4000 个观测其实相当于 90 个
- 能不用重叠就不用:如果数据够多,改成不重叠的分段(20 日收益就每 20 天取一个点),代价是样本变少,但结论干净
📌 免责:本课为技术教学,统计结果为历史模拟,不构成投资建议。
这一节做了三件事:
- 模拟找出失效条件:光有重叠窗口不够,x 和 y 同时持续才会崩——纯噪声数据上假阳性率 56.8%,Newey-West 修正回 8.8%
- 有效样本量:未来 20 日收益名义 4003、有效仅 90(缩水 97.7%);60 日只剩 29
- 回头修正 P2:六项全部仍显著,但 t 值普遍缩水(RSI 10 日 7.16→5.04,OBV 20 日 4.24→2.35)
还有一个附带收获:我最初的模拟设计是错的(信号设成了逐日独立),而正是那个错误让我找到了真正的机制。这类"失败先于结论"的过程,我在课里原样保留——因为知道一个方法什么时候不失效,和知道它什么时候失效,是两种不同的理解。
下一节讲协整与配对交易。它是"统计套利"的统计前提,也是数据挖掘偏差最干净的实证:我会在 1035 对标的里做全量协整检验,样本内找到 68 对"显著"——然后告诉你其中有多少经得起校正,以及样本外还剩几对。
🔎 来源与核验· 4 条,点开核对
