3、因子衰减的量化度量:IC衰减曲线、因子收益衰减半衰期、Rank IC衰减速度

聊到因子衰减,很多人第一反应是「看IC是不是变低了」。嗯,这没错,但太粗糙了。

我个人的习惯是,把衰减这件事拆成三个维度来看:IC衰减曲线因子收益衰减半衰期Rank IC衰减速度。这三个指标,说白了就是告诉你——你的因子还能活多久,以及它死得有多快。

3.1 IC衰减曲线:因子的「心电图」

IC衰减曲线,是我每次做因子归因分析时必看的第一张图。它记录的是因子在不同持有期下的预测能力变化。

举个例子。你算了一个因子,用它来预测未来1天的收益,IC是0.05。那未来5天呢?10天呢?20天呢?把这些IC值连成一条线,就是IC衰减曲线。

核心逻辑: 如果曲线下降得很快,说明因子是「短线选手」;如果曲线平缓,说明因子有「长跑基因」。

我在项目中遇到过一只高频因子,IC在第1天高达0.08,但到了第3天就跌到0.01以下。这种因子你只能做T+0,持仓过夜就是送钱。反过来,有些基本面因子,IC在第1天只有0.02,但到了第20天还能维持在0.015以上——这种因子适合做中长线。

实操建议: 我一般会画两条线——一条是原始IC,一条是滚动窗口的平滑IC。如果平滑线出现「断崖式」下跌,那就要警惕了,因子可能已经失效。

3.2 因子收益衰减半衰期:给因子「算寿命」

这个概念是从物理学借来的。半衰期,指的是因子收益衰减到初始值一半所需要的时间。

怎么算?很简单。你先把因子在不同持有期下的累计收益算出来,然后找到那个「收益减半」的时间点。

# 伪代码示例:计算因子收益衰减半衰期
def calc_half_life(cumulative_returns):
    # cumulative_returns: 不同持有期的累计收益数组
    half_value = cumulative_returns[0] / 2
    for i, ret in enumerate(cumulative_returns):
        if ret <= half_value:
            return i  # 半衰期(以持有期为单位)
    return len(cumulative_returns)

你想想看,如果一个因子的半衰期是3天,那意味着3天后它的预测能力就只剩一半了。半衰期越短,因子衰减越快,你需要更频繁地调仓。

注意: 半衰期不是固定不变的。市场环境变了,因子的半衰期也会变。我建议每季度重新计算一次,动态调整你的调仓频率。

我曾经跟踪过一个动量因子,半衰期从最初的10天,慢慢缩短到5天,最后只剩2天。嗯,这就是典型的「因子被市场充分挖掘」的信号。后来我果断把它从策略里移除了。

3.3 Rank IC衰减速度:排名的「记忆长度」

Rank IC和普通IC的区别在于,它关注的是排序能力,而不是数值本身。说白了,就是你的因子能不能把股票排对队。

Rank IC衰减速度,衡量的是这种排序能力随时间消失的快慢。计算方法和普通IC类似,只不过把原始值换成了排名。

持有期(天) 普通IC Rank IC Rank IC衰减率
1 0.050 0.048 -
5 0.035 0.033 31.3%
10 0.020 0.019 60.4%
20 0.008 0.007 85.4%

从上表可以看出,这个因子的Rank IC在第20天时已经衰减了85%以上。这意味着,如果你持仓超过20天,因子的排序能力基本就没了。

一个小技巧: 我习惯把Rank IC衰减速度画成「半对数图」——纵轴取对数,横轴是时间。如果曲线近似一条直线,说明衰减是指数级的,这种因子往往死得很快。

3.4 三者的关系与实战应用

这三个指标不是孤立的。我一般会放在一起看:

  • IC衰减曲线告诉你「衰减的形状」——是线性、指数还是阶梯式?
  • 半衰期告诉你「衰减的速度」——几天减半?
  • Rank IC衰减速度告诉你「排序能力的持久性」——排名还能撑多久?

举个例子。如果IC衰减曲线是缓慢下降的,半衰期很长,但Rank IC衰减速度很快——这说明什么?说明因子虽然整体预测能力还行,但排序能力已经乱了。这种情况下,你可能需要做分层处理,或者改用非线性模型。

我的经验法则: 当半衰期小于调仓周期时,因子已经不适合当前策略了。要么换因子,要么缩短调仓周期。

下面这张图,是我自己常用的因子衰减分析框架。它把三个指标串在了一起,方便快速定位问题。

因子衰减量化度量框架 IC衰减曲线 预测能力随持有期变化 收益衰减半衰期 收益减半所需时间 Rank IC衰减速度 排序能力消失速率 综合分析 形状 + 速度 + 持久性 → 判断因子生命周期 半衰期 < 调仓周期 → 因子失效预警 决策输出:调仓频率调整 / 因子替换 / 权重优化 建议每季度更新一次指标,动态监控因子健康度

最后说一句。这三个指标不是算一次就完事的。市场在变,因子也在变。我自己的做法是,每个月跑一次全量分析,把衰减曲线、半衰期、Rank IC衰减速度都更新一遍。一旦发现某个指标出现异常,就立刻启动预警流程。

避坑指南: 我曾经犯过一个错——只看IC衰减曲线,忽略了半衰期。结果一个因子表面上IC还行,但半衰期已经缩到1天了。等我发现时,策略已经亏了不少。所以,三个指标一定要一起看,缺一不可。

公众号:蓝海资料掘金营,微信deep3321