我做的一次量化实验里,遇到一件挺反直觉的事。
同一个 ATR 突破因子,连续版的 IC 只有 0.07,IC_IR 0.188,离 0.5 的及格线差了一大截,按教科书早该被毙掉。但换成离散版 0/1 信号去跑分类检验,Precision 61.86%,Lift +5.42ppt,事件研究 T+10 收益 +3.14%、p < 10⁻³⁷——同一个因子,前后两副面孔。
如果只看 IC,这个因子早就被丢进废纸篓了。
这就是为什么因子验证不能只用一招。统计学家有一句老话:每个工具都只在自己擅长的问题上有效。把 IC、PRF、事件研究、Spearman 冗余拼成一套组合拳,才能把因子的”真本事”摸清楚。我跑过的 ATR 因子恰好能作为案例,拆开这四件套各自在看什么、什么时候该信哪一个。
四件套各自的分工,可以一图概括:
ADF 是体检,IC 和 PRF 是单兵能力测试(一个测幅度、一个测事件),事件研究是收益持续性的”X 光片”,Spearman 是组队能力评估。这五项里,前四项问”这因子单独够不够强”,最后一项问”它放进队伍是不是替补”。
连续路径:IC 在问的是”方向感”
IC(Information Coefficient)的物理意义就一句话:因子值的高低,能不能跟未来收益的高低对得上号。它本质上是一个截面 Spearman 秩相关——每个截面(比如每个月的全部标的),按因子值排个序,再按未来 10 日收益排个序,看两个序列像不像。
在跑 IC 之前,我还顺手做了一件事:五分位分组回测。把全部样本按 atr_ratio 从低到高切成 5 组,看每组未来 10 日的平均收益。教科书级”好因子”应该呈现单调阶梯——Q1 到 Q5 收益递增,多空组合(Long Q5 / Short Q1)有正超额。
我跑出来的结果完全不是这样:Q1 +2.30%、Q2 +2.58%、Q3 +2.38%、Q4 +1.36%、Q5 +1.28%。波动越平静的反而收益越高,多空组合 Q5-Q1 = -1.01%,简单年化 -12.8%,Sharpe -0.44。这一步直接给我泼了第一盆冷水——按连续幅度走,这因子是反向信号,不是顺向信号。
但我没急着丢掉它。分组回测和 IC 都是连续路径的工具,它们一起说”幅度信息无效”是一致的,但没有说”事件无效”。这给了切到离散路径的理由。
我喜欢这么形容:IC 在问”这个因子对收益的方向感强不强”,PRF 在问”这个因子触发后真涨的频率比平均高多少”。一个看排序,一个看命中率,根本不是同一个问题。
先做平稳性体检
跑 IC 之前要先过 ADF 检验,确认序列平稳。这一步是为了排除”伪相关”——两个都在持续漂移的非平稳序列摆在一起,相关系数会虚高。
我这次的 atr_ratio 是个比率型变量,天然近似平稳。ADF 跑出来统计量 -7.90,p = 4.15×10⁻¹²,远超 0.05 的门槛,体检通过。
IC 不达标,但有意思的事情发生了
5 年左右的月度 IC 在三个持有期呈现出以下结果:
| 持有期 | IC 均值 | IC_IR | 阈值 ≥ 0.5 |
|---|---|---|---|
| 5D | +0.068 | 0.174 | 不达标 |
| 10D | +0.070 | 0.188 | 不达标 |
| 20D | +0.013 | 0.037 | 几乎为零 |
10D 是最高期,IC 也才 0.07。IC_IR(IC 均值除以 IC 标准差,相当于”方向感的稳定性”)只有 0.188,离学术圈和业界普遍接受的 0.5 差了快三倍。
更诡异的是,全样本(不分月度,把所有点池在一起)跑 Spearman ρ,结果是 -0.063,p = 0.34——方向反了,而且不显著。
月度 IC 是正的,全样本 ρ 是负的。两个看似都在量”相关性”的指标打起架了。
我第一次看到这个分歧时,心想这因子真的废了。但停下来想想,月度 IC 是”每个时段内的截面排名相关”,全样本 ρ 是”跨所有时点的绝对值相关”,两者衡量的根本不是同一件事。方向打架恰好是个量化预警信号:这个因子在某些市场状态下有效、在另一些时段效果归零,时间段依赖很强。
具体一点说:牛市里”波动加速”往往伴随上涨,熊市里”波动加速”反而是恐慌下跌前兆。把所有市场状态的样本混在一起,正负效应彼此抵消,全样本 ρ 自然就接近零、甚至翻号。月度 IC 之所以为正,是因为它把每个月当成一个”市场状态相对稳定的小样本”——只有同一状态内的排序一致性才会被记录到。
这种分歧不是 bug,是市场结构本身告诉我们:单凭幅度本身预测不了未来,但幅度加上”现在处于什么状态”——这是一个二维问题,IC 这种一维相关系数捕捉不到。
四维判定,连续路径不及格
把上面这些指标合在一起,连续路径的判定框架就出来了:
| 维度 | 指标 | 标准 | 判定 |
|---|---|---|---|
| ADF 平稳性 | p = 4.15×10⁻¹² | p < 0.05 | 通过 |
| IC 方向 | +0.070(10D) | IC > 0 | 正向 |
| IC_IR 稳定性 | 0.188 | ≥ 0.5 | 不达标 |
| 全样本 ρ 同向 | -0.063 | 与 IC 同向 | 分歧 |
两过两不过。说明因子设计有合理性,但幅度信息本身不稳定——atr_ratio 大小没法线性地预测收益方向。
如果只到这一步收手,这个因子就废了。但我还有一招没用:把连续值砍成 0/1 离散信号,看看”触发/不触发”这个二元事件能不能跑出来。
离散路径:PRF 是另一套问题
切到离散路径之前,先解释清楚为什么连续不行的因子,离散版有可能行。
连续版 atr_ratio 衡量的是”波动加速的幅度”,假设了”幅度越大,未来收益越高”这种线性关系。如果实际世界是”波动突破到一定阈值后才有效,没到阈值时是噪声”——那线性假设就崩了。
把因子改成 ATR14[t] > SMA(ATR14, 3)[t-1],0 或 1,问题立刻变了:不再问”幅度多大”,而是问”突破事件本身有没有预测力”。阈值化的本质是过滤掉无效区间,只保留强信号时段。
PRF(Precision、Recall、F1)就是为这种”事件预测”准备的。
把分类指标讲人话
| 指标 | 公式 | 大白话 |
|---|---|---|
| Precision | TP / (TP + FP) | 信号触发那天真涨的比例 |
| Recall | TP / (TP + FN) | 真涨的日子里,信号触发覆盖了多少 |
| Lift | Precision − 同期基线上涨率 | 信号到底比”闭眼买”强多少个百分点 |
| F1 | 2·P·R / (P + R) | Precision 和 Recall 的综合分 |
这里最容易被忽略的是 Lift。光看 Precision 61.86% 没意义——如果整体上涨概率本来就 80%,那 61% 反而是负超额。Lift 是把”基线”扣掉之后的真实超额,是信号有没有 alpha 的最干净刻画。
跑出来的数
| 持有期 N | Precision | 基线 | Lift | Recall | F1 |
|---|---|---|---|---|---|
| 1 | 54.7% | 52.9% | +1.8 | 22.3% | 0.317 |
| 5 | 58.2% | 54.5% | +3.7 | 22.7% | 0.327 |
| 10 ★ | 61.9% | 56.4% | +5.4 | 22.7% | 0.333 |
| 60 | 72.7% | 62.2% | +10.5 | 22.1% | 0.339 |
Precision 随持有期单调递增,Lift 也跟着抬。N=10 是我选的主 horizon:1623 个事件样本,Lift +5.4ppt,Precision 比基线 56.44% 高出近 6 个百分点。
注意一个细节:N=1 时 Precision 54.7%、基线 52.9%,Lift 只有 +1.8——基本没超。这告诉我们 ATR 突破不是个隔日就兑现的短线信号,它捕捉的是趋势加速,需要给到 5-10 天的窗口才能展开。
Recall 一直卡在 22% 左右,这是另一个关键信号:单凭 ATR 突破,会漏掉大约 77% 的实际上涨机会。这意味着这个因子不能单兵作战,它得配一支队伍。
这里要插一句关于 Lift 的”陷阱”。我见过不少初学者拿着 Precision 80% 的指标兴奋地说”这因子准爆了”,结果一查基线——同期市场上涨率本来就 78%。换言之,这个因子比闭眼乱买强不到 2 个百分点,再扣手续费就没了。只看 Precision 是看不到信号真实价值的,必须把基线从天花板上扯下来一起看。这一点也是为什么 PRF 检验里基线那一栏不能省。
同一个因子,IC 不及格、PRF 通过
连续路径不达标 + 离散路径过线,这就是同一个 ATR 因子前后两副面孔的来源。我第一次看到 IC=0.07 想直接放弃,是 PRF 把这个因子救回来的。
教训是:因子验证不能一招打天下。幅度有没有预测力、事件触发有没有预测力,这是两个独立的问题,得分别问。把这两个问题混在一起,就会出现”因子明明有效,但 IC 报告说它废了”这种荒诞场面。
事件研究:触发之后到底涨多少
PRF 告诉我”信号触发的那批日子,比平均更可能涨”。但还有一个问题没回答:真正涨的时候,涨多少?
事件研究就是干这个的。把每次信号触发的那一天当作 t=0,往后看 T+1、T+5、T+10、T+20 的累计平均收益,再做 t 检验看是不是显著大于零。
| 持有期 | 均值收益 | 胜率 | t 值 | p 值 |
|---|---|---|---|---|
| T+1 | +0.43% | 54.65% | +5.9 | < 10⁻⁸ |
| T+5 | +1.74% | 58.20% | +10.8 | < 10⁻¹⁸ |
| T+10 ★ | +3.14% | 61.86% | +13.1 | < 10⁻³⁷ |
| T+20 | +4.73% | 60.17% | +12.8 | < 10⁻³⁷ |
两个观察。
第一个,收益单调递增。从 T+1 到 T+20,均值收益一路爬升。这说明 ATR 突破捕捉的是一段持续数周的趋势加速,不是一闪而过的噪声。如果是噪声事件,T+5 应该比 T+1 更弱才对——单调性本身就是因子有”持续效应”的最直接证据。
第二个,p 值低到离谱。p < 10⁻³⁷ 是什么概念?意思是”这个结果在 5 年样本中由纯随机产生的概率,比你连续中 30 次彩票还低”。
但这里有个陷阱我必须说清楚:统计显著 ≠ alpha。这一句话顶得上读三本量化书。
p < 10⁻³⁷ 只能告诉你”这个结果不是偶然”,但不能直接换算成”我能赚到这么多”。原因有几个:
- 事件研究算的是信号触发那批日子的平均收益,不扣交易成本(佣金 + 滑点 + 冲击)
- 它也不考虑资金流转——你不可能每个信号都满仓买入
- 更不考虑信号之间的叠加效应——同一天可能多只票一起触发,仓位怎么分
事件研究是因子价值的”上限刻画”,告诉你”如果一切完美,最多能赚多少”。真正能不能落到 alpha,得等回测时把成本压上去再看。我之前一篇文章里讲过的那个 Sharpe 从 1.74 砍到 1.04 的审计故事,本质上就是把事件研究的”理想收益”逐步往真实成本上贴的过程。
但在这一阶段,事件研究通过验证已经够了:它证明 ATR 突破信号触发后,市场确实给出了一段可观察、可统计、有持续性的正收益。下一步就该问:这个因子和别的因子是不是在重复说同一句话?
Spearman 冗余:八个因子里有几个重影
到目前为止,我手里的 8 个候选因子分别落在趋势、动量、量能、波动率四个维度。每一个都各自跑了 ADF + IC + PRF + 事件研究,单兵能力都过关。
但单因子过关 != 组合可用。两个因子如果说的是同一件事,叠加在一起就是重复计数——两根均线靠得太近,等于只有一根;两个量能指标同涨同跌,等于只有一个。重复计数的危害不是”多余”那么轻飘,它会让你误以为同一个证据被多次确认,从而给一个本来风险很大的位置过分加杠杆。
Spearman 矩阵就是用来识别这种”重影”的。我把 8 个因子两两算秩相关,得到一个 8×8 的对称矩阵。
读这张矩阵有三个关键发现。
第一个红框警报:ma50 ↔ align = 0.72。两个都是趋势层因子,相关性突破 0.7 阈值,必须二选一。我留下了 ma50(年线站稳更直观),删掉了 align(多头排列虽然漂亮但跟 ma50 高度重合)。
第二个橙框预警:atr ↔ vol>k = 0.49。这是 ATR 因子在矩阵里相关性最高的对手。0.49 没破 0.7 红线,但接近 0.5,说明波动率和量能在某种程度上在讲一件事——量增的时候波动也会大。我的处理是:允许两者同时在组合里,但要给较低权重,不能让它俩”同票数”压过别的维度。
第三个观察是反向的:macd 和 vol↑ 几乎跟所有人独立(最大相关都在 0.1 以下)。这说明它们带来的是真正的独立信息——加进组合的边际价值很高。
在多因子设计里有一条经验法则:信息独立性比单因子强度更值钱。一个能力中等但信息独立的因子,比一个能力强但跟主力高度冗余的因子有用得多。这是经验上反直觉的一条——很多人会反复强化”最强的那个因子”,结果做出来的组合像一支只有前锋的球队。
我做这一步的时候,还顺手把”同层留 1 个”的去重原则跑了一遍。趋势层的 ma50/ma250/align/macd 四个,留 ma50 和 macd(前者代表均线趋势,后者代表动量拐点,互不重叠)。量能层的 vol↑ 和 vol>k 各保留——它俩 ρ=0.22,可接受。
顺便提一个容易忽略的细节:Spearman ρ 是基于秩的,不受异常值影响。这跟 Pearson 相关系数不同,后者会被极端值拉飞。在金融数据里,财报日、跳空缺口都可能制造极端值,用 Pearson 跑相关矩阵经常会出现”看着很高,剔除三个异常点就归零”的伪信号。Spearman 在这件事上更稳。
冗余检验完事,ATR 顺利上车。
标准化报告:让每个因子都说人话
四件套跑完,怎么把结果攒成可复用的东西?我给每个因子定了一份标准化的验证报告,长这样:
Factor Validation Report — atr_break_mean_short
Layer : Volatility / Timing
Signal Type : Discrete (0/1)
[A] Stationarity (ADF)
ADF Stat: -7.8996 p-value: 4.15e-12
PASS — Stationary
[B] Continuous Path — Spearman IC
IC_5D : 0.068 IC_10D: 0.070 IC_20D: 0.013
IC_IR : 0.188 (best)
FAIL — IC_IR below 0.5 → switch to discrete
[C] Discrete Path — PRF (N=10)
Base: 56.44% Precision: 61.86%
Lift: +5.42 ppt Recall: 22.74% F1: 0.333
PASS — Lift > 0
[D] Event Return Analysis
T+1 : +0.43% (t=5.9, p<1e-8)
T+5 : +1.74% (t=10.8, p<1e-18)
T+10: +3.14% (t=13.1, p<1e-37) <-- primary
T+20: +4.73% (t=12.8, p<1e-37)
[E] Redundancy (Spearman ρ, top correlations)
vol>k: 0.49 ma250: 0.48 ma50: 0.38
Acceptable — no overlap above 0.7
STATUS: VERIFIED → Approved for combination phase
每一栏的作用我归到一张表里方便后续翻:
| 模块 | 作用 | 不通过怎么办 |
|---|---|---|
| [A] ADF | 排除非平稳序列伪相关 | 重新设计因子,做差分或归一 |
| [B] IC_IR | 测连续幅度的预测力 | 切到离散路径,不直接放弃 |
| [C] PRF | 测离散信号比随机选股强多少 | Lift ≤ 0 直接淘汰 |
| [D] 事件 | 测信号触发后收益的持续性 | p > 0.05 淘汰;p < 0.05 但收益小则备选 |
| [E] 冗余 | 测因子带来的独立信息 | |ρ| > 0.7 同层去重 |
这份报告的好处是全员同一张卷子——8 个候选因子每个跑一遍同模板,最后能直接 diff 优劣,不会出现”这个因子用了 IC、那个用了 PRF”的不公平比较。
我把 8 份报告挂在一个目录里,每跑一个新因子就追加一份。这种结构有个隐性好处:半年后回头看,因子的衰减情况一目了然——同一个因子两次报告对照一下,IC、Lift 哪一项滑坡了,哪一项还稳得住,因子是死了还是只是”换姿势了”,都能判断。
因子使用规范:会用比验证更难
报告通过不等于因子能直接用。真正落地前,还要明确它的使用边界。
不单用。Recall 22.74% 意味着 ATR 单独触发只能覆盖大约四分之一的实际上涨机会,剩下三分之二会被错过。把它当主入场信号会踏空大量行情。正确姿势是当作”波动率确认层”——趋势 + 动量 + 量能三个维度都过线之后,最后用 ATR 突破做一次”波动正在加速”的确认。
不短线。N=1 时 Precision 54.7%、基线 52.9%,Lift 只有 +1.8,几乎没超。隔日操作里 ATR 信号被噪声淹没,得等到 N=5 之后才看出超额。这个因子是给波段策略(持仓 2-12 周)用的,不是日内。日内策略往往要的是反应速度,不是趋势确认;用波段因子做日内,等于让长跑选手去跑百米。
不盲目迁移。我这次的样本是美股科技/AI 主题股票,2 年日频。这种行情事件驱动性强(财报、发布会扎堆),ATR 突破跟基本面催化相互呼应,因子在这个池子里特别成立。但换池就要重跑——港股 T+1、A 股涨跌停、期货保证金,每一项都会让阈值的最优值发生位移。
第三条尤其容易翻车。因子验证里最容易犯的错误,不是数据没跑对,而是把一个池子的结论当成宇宙真理。每个因子都有自己的”生境”,离开它就死——见过有人拿美股的均线参数直接套到 A 股,结果连跌一年才意识到 A 股开盘集合竞价的结构性特征已经把信号扭曲了。
Top 5 信号组合里,ATR 出现了 4 次
把 8 个验证过的因子两两组合,按 F1 + Lift + Precision + 事件 T+5 收益 - Spearman 冗余惩罚算个综合分,得到 Top 5 入场组合:
| 排名 | 综合分 | 趋势 | 动量 | 量能 | 波动率 |
|---|---|---|---|---|---|
| 1 | 11.42 | ma250 | hi3m | vol↑ + vol>k | atr_break ★ |
| 2 | 10.86 | ma_align | hi3m | vol↑ + vol>k | atr_break ★ |
| 3 | 10.84 | ma50 | hi3m | vol↑ + vol>k | atr_break ★ |
| 4 | 10.05 | macd | hi3m | vol↑ + vol>k | atr_break ★ |
| 5 | 9.24 | ma250 | hi3m | vol↑ + vol>k | (无 ATR) |
ATR 出现在 4/5 组合,Rank 5 去掉它之后综合分从 10.84 直接掉到 9.24,差了 1.6 个绝对分。这一掉分坐实了”波动率确认层”的增量价值——不是可有可无的装饰品,而是组合里实打实多出一个维度的独立信息。
回到开头那个反直觉问题:为什么连续版 IC=0.07 不及格,离散版 PRF 漂亮通过?
不是这两个工具谁错了,是它们在量不同的东西。IC 量幅度的线性预测力,PRF 量阈值事件的命中率,市场的真实结构如果是”突破阈值之后才有效”,那 IC 必然不及格、PRF 必然通过——两套结果都对,都在讲真话,只是讲的是因子的不同侧面。
这背后还有一条更一般的写法:每一种统计工具都内置了一个隐含假设。IC 假设线性单调、PRF 假设事件可二值化、事件研究假设触发可对齐到时间轴、Spearman 假设可秩相关。你用工具之前要先问”我相信这个假设吗”,如果答案是不相信,再漂亮的统计量也是错觉。
四件套的真正价值不是”四个数都达标就发车”,而是它们提供了四个不同的视角去拷问同一个因子——任何单一视角失灵的时候,剩下三个能给你提示。这就是组合拳的意义。
参考与延伸
- 系列前文:《把交易直觉变成可计算的因子:5 层框架与 ATR 案例》
- IC 与 IC_IR 阈值的来源:Grinold & Kahn《Active Portfolio Management》
- Lift 与 Precision 在量化里的应用:De Prado《Advances in Financial Machine Learning》第 3 章
- 事件研究方法论:MacKinlay《Event Studies in Economics and Finance》
- Spearman 冗余阈值经验:业界普遍以 0.7 为高度冗余红线,0.5 为中度警戒