第 4 章 · 04 Alphalens 因子评估 IC 本节摘要:本节讲怎么系统评估一个因子到底有没有预测力。原项目 介绍 Quantopian 开源的 Alphalens 库——它能从「信号与远期收益」两个输入,产出一张完整的 tearsheet,涵盖 IC(信息系数)、分组收益、换手率、按行业分解等核心指标。本节讲清 Alphalens 的输入格式、IC 的定义(为什么用 Spearman 而非 Pearson)、分组收益的解读、以及换手率对交易成本的指示意义。读完本节,你能用 Alphalens 评估任何一个候选因子,并从 tearsheet 读出它「能不能用、能维持多久、换手多高」。 内容来源:原项目 ,汉化并套用体系化模板。
本节摘要:本节讲怎么系统评估一个因子到底有没有预测力。原项目
04_alpha_factor_research/06_performance_eval_alphalens.ipynb介绍 Quantopian 开源的 Alphalens 库——它能从「信号与远期收益」两个输入,产出一张完整的 tearsheet,涵盖 IC(信息系数)、分组收益、换手率、按行业分解等核心指标。本节讲清 Alphalens 的输入格式、IC 的定义(为什么用 Spearman 而非 Pearson)、分组收益的解读、以及换手率对交易成本的指示意义。读完本节,你能用 Alphalens 评估任何一个候选因子,并从 tearsheet 读出它「能不能用、能维持多久、换手多高」。
内容来源:原项目
04_alpha_factor_research/06_performance_eval_alphalens.ipynb,汉化并套用体系化模板。
⚠️ 风险提示:IC 高不代表实盘可盈利,还要扣交易成本、考虑容量;样本内 IC 可能是过拟合产物,务必用样本外或滚动窗口验证。
阅读完本节,你应当能够:
get_clean_factor_and_forward_returns 与 tearsheet。构造完一个因子(比如均值回归因子),你要回答几个问题:
手工算这些指标繁琐易错。Alphalens 把这套评估流程标准化,一行调用产出完整 tearsheet。
💡 核心心法:Alphalens 的评估发生在回测之前——它不模拟交易,只算「因子值与未来收益的统计关系」。先用 Alphalens 筛掉没信号的因子,再上 Zipline 做完整回测,这是省算力的标准流程。
Alphalens 要求两类输入,通过 get_clean_factor_and_forward_returns 整合:
from alphalens.utils import get_clean_factor_and_forward_returns from alphalens.performance import * alphalens_data = get_clean_factor_and_forward_returns( factor=factor_series, # 多级索引(date, asset)的因子值 prices=price_dataframe, # 行=date 列=asset 的价格 quantiles=4, # 分组数(常用 4 或 5) periods=(1, 5, 10, 21) # 远期收益的持有期 )
整合后的 DataFrame 包含:
| 列 | 含义 |
|---|---|
1D/5D/10D/21D |
对应持有期的远期收益 |
factor |
因子原始值 |
factor_quantile |
该日该资产所属的分位组 |
⚠️ 警告:远期收益天然涉及「未来」,在 Alphalens 里这没问题(它是评估而不是回测),但绝不能把这种含未来的 DataFrame 直接喂给训练模型——那是数据泄露。
notebook 解释了为什么用 Spearman 秩相关而不是 Pearson:
「最好使用非参数的 Spearman 秩相关系数,它衡量两个变量之间能用单调函数描述的关系;而 Pearson 衡量的是线性关系。」
金融数据里,因子与收益的关系常常是单调但非线性(比如高分组收益高,但不是线性增长)。Pearson 会低估这种关系,Spearman 更稳健。
ic = factor_information_coefficient(alphalens_data) plot_ic_ts(ic) # 时间序列图,带 1 个月滚动平均
IC 的解读阈值:
| IC 均值 | 含义 |
|---|---|
| < 0.02 | 弱信号 |
| 0.02~0.05 | 可用 |
| 0.05~0.1 | 不错的因子(若覆盖足够广) |
| > 0.1 | 很强,但要警惕过拟合 |
notebook 提到「IC 0.05 甚至 0.1,如果有足够机会应用,就能显著超额收益」——这与主动管理基本定律(IR = IC × √Breadth)呼应。
第一步是看「每个分位组的平均远期收益」:
mean_return_by_quantile(alphalens_data) plot_quantile_returns_bar(alphalens_data)
理想形态:底部分位显著为负,顶部分位显著为正,中间单调过渡。
notebook 还展示「累计 5D 收益曲线」——把每个分位组在样本期的累计收益画出来,理想情况下顶部分位 > 底部分位,且差距持续扩大。但 notebook 也指出,日度收益的分布很宽,分位之间的均值差虽然存在,但分布重叠大——任何一天的差异可能有限。
💡 核心心法:分组单调性是因子有效性的「必要条件」而非充分条件。如果分组收益不单调(Q3 反而高于 Q4),因子可能有非线性或噪声,直接当线性信号用会失效。
notebook 专门有 Turnover Tear Sheet,衡量「当前在某分位组的资产,有多少上一期不在该组」:
factor_turnover(alphalens_data)
换手率高 = 组成变化快 = 调仓频繁 = 交易成本高。
| 换手水平 | 含义 |
|---|---|
| 低(<30%) | 因子稳定,交易成本低 |
| 中(30%~70%) | 中频,需关注成本 |
| 高(>70%) | 高频,交易成本可能吞噬全部 alpha |
⚠️ 警告:很多高 IC 因子同时是高换手因子,扣完整交易成本后变成负 alpha。Alphalens 让你在回测前就看到这一点,省下大量回测时间。
Alphalens 提供 create_summary_tear_sheet(alphalens_data) 与 create_full_tear_sheet(alphalens_data),一站式产出 IC、分组、换手、行业分解等全部图表。这是评估因子的标准入口。
Alphalens 的输入(信号 + 远期收益)正好是 Zipline 单因子回测的产出。下一节会看到:
get_clean_factor_and_forward_returns 整合。下一节,我们看 单因子与多因子回测——把因子从「评估」推进到「模拟交易」,用 Zipline 跑单因子,用 Quantopian 研究环境组合多因子。