因子衰减的度量方法:IC衰减、Rank IC衰减、多空收益衰减
聊完了因子为什么会衰减,咱们得面对一个更实际的问题——怎么量化这个衰减?
说白了,你光知道因子会衰减还不够,你得知道它衰减得有多快、什么时候该换仓。我早年做CTA策略时,就吃过这个亏。当时一个动量因子表现特别好,我舍不得换,结果后面三个月回撤了20%。嗯,从那以后,我养成了一个习惯:每次上线策略前,先把衰减曲线画出来。
IC衰减:最直接的度量方式
IC(信息系数)大家应该不陌生,就是因子值和下一期收益的相关系数。那IC衰减怎么算?很简单——看IC随时间的变化趋势。
具体做法是这样的:
- 计算因子在t时刻的值与t+1期收益的IC
- 再算t时刻因子与t+2期收益的IC
- 一直算到t+k期
把这些IC值连成一条线,就是IC衰减曲线。如果曲线下降得很快,说明因子失效得也快。
- IC半衰期:IC衰减到初始值一半所需的时间
- IC衰减率:每期IC下降的百分比
- IC显著性窗口:IC显著不为0的期数
举个例子,我做过一个A股的低波因子研究。它的IC半衰期大概是3个月。也就是说,3个月后这个因子的预测能力就只剩一半了。你想想看,如果你还拿着半年前的因子信号做交易,那效果能好吗?
Rank IC衰减:更稳健的选择
Rank IC和普通IC的区别,说白了就是一个用排名,一个用原始值。我个人习惯用Rank IC,为什么?因为它在极端值面前更稳。
我记得有一次做因子测试,数据里有个股票因为停牌复牌,收益率出现了异常值。普通IC直接崩了,从0.08掉到-0.03。但Rank IC只从0.06降到了0.04。这就是排名的好处——它不受极端值干扰。
Rank IC衰减的计算方法和普通IC一样,只是把原始值换成排名:
# 计算Rank IC衰减
def rank_ic_decay(factor, forward_returns, max_lag=10):
rank_ic_list = []
for lag in range(1, max_lag + 1):
# 对因子和未来收益分别排名
factor_rank = factor.rank()
return_rank = forward_returns.shift(-lag).rank()
# 计算排名相关系数
rank_ic = factor_rank.corr(return_rank)
rank_ic_list.append(rank_ic)
return rank_ic_list
这段代码我用了好几年,基本没出过问题。你注意看,我用了.rank()把原始值转成排名,然后再算相关系数。这样即使数据里有异常值,也不会影响整体结果。
当因子分布偏态严重时(比如市值因子),Rank IC比普通IC更可靠。我曾经对比过100多个因子,Rank IC的衰减曲线普遍比普通IC平滑30%以上。
多空收益衰减:最直观的验证
IC和Rank IC说到底还是统计指标,不够直观。多空收益衰减就不一样了——它直接告诉你,做多因子得分最高的股票、做空得分最低的股票,这个组合的收益怎么随时间变化。
计算步骤其实不复杂:
- 按因子值把股票分成10组(或5组)
- 做多第1组(因子值最高),做空第10组(因子值最低)
- 计算这个多空组合在t+1、t+2...t+k期的累计收益
如果多空收益在持有期逐渐下降,甚至变成负的,那就说明因子在衰减。
| 持有期 | 多空收益 | 衰减状态 |
|---|---|---|
| 1个月 | 2.5% | 有效 |
| 2个月 | 1.8% | 开始衰减 |
| 3个月 | 0.9% | 明显衰减 |
| 4个月 | 0.2% | 接近失效 |
| 5个月 | -0.3% | 完全失效 |
你看这个表格,多空收益从2.5%一路降到-0.3%。到第5个月的时候,这个因子不仅没赚钱,反而亏钱了。这就是为什么我强调要动态调仓——你不能指望一个因子永远有效。
我曾经犯过一个错误:只看多空收益的绝对值,忽略了它的衰减速度。结果一个因子虽然收益不错,但衰减特别快,调仓频率跟不上,实际收益大打折扣。后来我学乖了,每次都会同时看多空收益的累计值和边际变化率。
三种方法的对比与选择
这三种方法各有优劣,我一般会结合着用:
- IC衰减:适合快速筛选因子,计算简单,但对异常值敏感
- Rank IC衰减:适合稳健性要求高的场景,不受极端值影响
- 多空收益衰减:最直观,适合向非技术背景的同事解释
我个人习惯是先用Rank IC做初步筛选,再用多空收益做最终验证。这样既能保证稳健性,又能直观展示结果。
为什么会这样?因为Rank IC能帮你过滤掉那些"假有效"的因子——有些因子可能只是运气好,碰到了几个极端值。而多空收益能让你看到真实的交易效果,毕竟我们做量化不是为了算相关系数,是为了赚钱。
嗯,这里要注意一点:这三种方法给出的衰减结论可能不一致。比如IC衰减很快,但多空收益衰减很慢。这时候怎么办?我的建议是相信多空收益。因为IC衡量的是线性相关性,而多空收益衡量的是实际分组效果。有时候因子和收益的关系不是线性的,IC会低估因子的持续性。
最后说一句,因子衰减的度量不是一次性工作。我建议你每季度重新计算一次衰减曲线,看看因子的"健康状况"。如果发现衰减速度在加快,那就得考虑换因子或者调整权重了。
记住,没有永远有效的因子,只有不断更新的策略。
公众号:蓝海资料掘金营,微信deep3321