| name | alpha-evaluation-guardrails |
| description | Alpha因子评估、过拟合检测、偏差控制和鲁棒性验证的完整护栏体系。当用户需要判断因子是否可用、检测过拟合、或建立因子入库标准时加载。 |
| version | 1.0.0 |
| source | 《寻找Alpha:量化交易策略》Igor Tulchinsky (WorldQuant) |
| source_chapters | ["Ch7 Turnover","Ch8 Alpha Correlation","Ch9 Backtest - Signal or Overfitting","Ch10 Controlling Biases","Ch11 The Triple-Axis Plan","Ch12 Techniques for Improving Robustness","Ch13 Alpha and Risk Factors","Ch14 Risk and Drawdowns"] |
| category | quant |
Alpha Evaluation Guardrails — 因子评估护栏
判断一个 alpha 是真实的还是过拟合的、能否上实盘、何时该退役。
触发条件
- 回测完成,需要判断因子是否可上线
- 用户问"这个因子靠谱吗"
- 多个因子冲突时做选择
- 实盘表现偏离回测时诊断原因
核心理念
回测好看 ≠ 实盘能赚。 大多数回测漂亮的 alpha 都死在了某个护栏问题上。护栏不是让你的因子看起来更好——而是让你看清楚它到底行不行。
护栏一:换手率 (Turnover) — Ch7
为什么重要
换手率直接决定交易成本。A股单边成本 ~0.15%,月换手 100% 意味着年化成本 ~3.6%——足以吃掉一个 moderate alpha 的全部超额收益。
计算
单边换手率 = 1/2 × Σ|w_t - w_{t-1}| (w = 持仓权重)
阈值
| 调仓频率 | 警戒线 | 红线 |
|---|
| 日频 | > 50% | > 80% |
| 周频 | > 30% | > 50% |
| 月频 | > 15% | > 25% |
高换手的应对
- 加调仓缓冲期(信号变化超过阈值才调)
- 衰减加权(最近信号权重更高,但不是二值切换)
- 成本惩罚(回测中直接扣 0.2-0.3% 单边成本看是否还有收益)
护栏二:Alpha 相关性 — Ch8
核心检查
新 alpha 必须低相关于已有因子库。否则满秩瓶颈(见 arXiv:2606.14386),新因子不提供增量信息。
操作步骤
- 计算新 alpha 与现有因子库的相关性矩阵
- 标记所有 pairwise correlation > 0.5 的组合
- 对高相关组合做 VIF (方差膨胀因子) 检测
- VIF > 5 → 存在多重共线性,需剔除或合并
正交化方法
新alpha_clean = 新alpha - 回归(新alpha ~ 已有因子)
取残差作为正交化后的 alpha。如果正交化后 IC 归零 → 这个 alpha 没有增量价值。
护栏三:过拟合检测 — Ch9
过拟合的七个信号
| 信号 | 检查方法 |
|---|
| 参数敏感 | 微调参数 ±20%,IC 变化 > 50% → 脆弱的过拟合 |
| 时间衰减 | 近1年 IC 明显低于前几年 → 信号已失效或一开始就过拟合 |
| 样本外崩溃 | 训练期收益极高,测试期归零 → 经典过拟合 |
| 极端值依赖 | 去掉前5和后5个极值股票,IC 大幅下降 → 信号靠噪声 |
| 分市场不一致 | 只在创业板有效,主板无效 → 小众过拟合 |
| 行业集中 | 80%的 alpha 来自一两个行业 → 行业暴露,非纯 alpha |
| 缺乏经济逻辑 | 参数只有统计意义没有经济解释 → 数据挖掘噪声 |
过拟合量化检验
Hansen's P-hacking 检测:
有效因子比例 = 显著因子数 / 总测试因子数
期望显著比例 = p值阈值 (如 5%)
如果有效因子比例 >> 期望显著比例 → 存在数据挖掘偏差
样本外保留法:
- 用 60% 数据做开发,20% 做验证,20% 做最终测试
- 最终测试只跑一次,绝对不能调参
护栏四:偏差控制 — Ch10
四种常见偏差
| 偏差类型 | 表现 | 修正方法 |
|---|
| 存活偏差 | 只用存活的股票回测 | 用 point-in-time 数据,包含退市股 |
| 前视偏差 | 用了当时不可知的信息 | 严格对齐数据发布时间 |
| 选择偏差 | 只在特定股票池有效 | 在全市场股票池验证 |
| 样本偏差 | 回测期恰好是牛市 | 分子周期测试,至少包含一轮熊市 |
偏差控制检查清单
护栏五:鲁棒性技术 — Ch12
提升鲁棒性的六种方法
1. 多周期验证
同一个 alpha 在日/周/月频都跑一遍。如果只有某个频率有效 → 脆弱信号。
2. 对称性检验
信号做多端和做空端分开评估。如果空头端 IC 为负但多头端 IC 为正 → 信号不对称,实盘只做多头。
3. 行业中性化
alpha_neutral = alpha - mean(alpha_by_industry)
行业中性化后 IC 还能保留多少?如果归零 → 只是行业选择,不是选股能力。
4. 规模中性化
同上,按市值分组去均值。排除纯粹的大盘/小盘暴露。
5. 随机打乱检验
将信号值随机打乱 1000 次,看实际 IC 在随机分布中的位置。如果 p < 0.05 才能相信信号是真实的。
6. 时间序列稳定性
滚动 36 个月窗口计算 IC,IC 标准差相对均值越小越好(IC_IR 的核心含义)。
护栏六:Alpha 与风险因子 — Ch13
Alpha 因子 ≠ 风险因子
| Alpha 因子 | 风险因子 |
|---|
| 目的 | 产生超额收益 | 解释收益来源 |
| 来源 | 错误定价 | 系统性风险补偿 |
| 持续性 | 可能衰减 | 相对稳定 |
| 交易方向 | 做多 alpha 高 + 做空 alpha 低 | 通常做多(风险溢价) |
常见混淆场景
- 你以为是 alpha 的价值因子 → 可能只是承担了信用风险
- 你以为是 alpha 的低波动因子 → 可能只是杠杆约束下的定价偏差
- 你以为是 alpha 的动量因子 → 可能是追涨杀跌的行为偏差
测试方法: 将 alpha 对已知风险因子回归(Fama-French 三因子/五因子),看 alpha 残差是否仍显著。
护栏七:回撤管理 — Ch14
什么时候该停止一个 alpha
| 信号 | 动作 |
|---|
| 滚动12个月IC < 0 | 暂停,观察 |
| 连续3个月IC < 0 | 退役 |
| max drawdown > 历史max的1.5倍 | 减半仓位 |
| 与市场beta的相关性突增 | 检查是否因子被"beta化" |
| 同一alpha在全市场同时失效 | 可能是结构性问题(如去散户化) |
回撤诊断流程
回撤发生
→ 检查是系统性回撤(所有alpha都跌)还是特异性回撤(只有这一个)
→ 系统性:检查大盘/流动性/政策变化
→ 特异性:检查IC衰减、相关性变化、换手率变化
→ 如果找不到结构性原因 → 降低仓位继续观察
→ 如果找到结构性原因且不可逆 → 退役
因子入库最终检查清单
一个 alpha 要上线实盘,必须全部通过:
常见陷阱
- 回测期选择偏差 — 只在 2015 牛市中有效的因子不可能持久
- 多重假设检验 — 测试了 100 个 alpha,5% 的显著性水平下至少 5 个纯靠运气通过
- 忽略中间层的 alpha 衰减 — 一个 alpha 可能在部署后迅速衰减(因为其他玩家也发现了)
- 忽略因子的同质性 — 10 个看起来不同的 alpha 可能都是同一风险源的不同表达