第1章:因子衰减的实证检验——A股市场常见因子的衰减特征

各位同学,咱们今天聊点实在的。因子衰减这事儿,说白了就是你的策略赚钱能力会随着时间慢慢变弱。我刚开始做量化那会儿,总觉得找到一个好因子就能一劳永逸,结果被市场狠狠教育了一顿。嗯,今天我们就拿A股市场最常见的几个因子——动量、反转、价值——来做个实证检验,看看它们到底是怎么衰减的。

1.1 为什么因子会衰减?

先问个问题:你发现了一个能赚钱的规律,你会怎么做?

大多数人会赶紧用这个规律去赚钱。当越来越多的人知道这个规律,它的赚钱效应就会被稀释。这就是因子衰减的本质——市场在进化,套利空间在消失

我个人习惯把因子衰减分成两类:

  • 结构性衰减:市场制度变了,因子逻辑失效。比如2015年股灾后,很多小市值因子就崩了。
  • 竞争性衰减:用的人太多,因子拥挤了。比如动量因子,2017年之前很好用,后来量化私募一拥而上,收益就摊薄了。

核心观点:因子衰减不是会不会发生的问题,而是什么时候发生、以多快的速度发生的问题。

1.2 动量因子的衰减特征

动量因子,就是追涨杀跌。A股市场有个很有意思的现象:短期动量,长期反转

我拿沪深300成分股做了个回测,时间从2010年到2023年。具体做法是:每个月末,把过去12个月涨幅最高的20%股票作为动量组合,涨幅最低的20%作为反转组合,持有1个月。

# 动量因子衰减检验 - 滚动窗口IC分析
import pandas as pd
import numpy as np

def rolling_ic_analysis(returns, factor_values, window=60):
    """
    计算滚动窗口内的IC值,观察因子预测能力随时间的变化
    """
    rolling_ic = []
    for i in range(window, len(returns)):
        # 计算截面相关系数
        ic = returns.iloc[i].corr(factor_values.iloc[i-1])
        rolling_ic.append(ic)
    return pd.Series(rolling_ic, index=returns.index[window:])

# 加载数据(示例)
# factor_data = pd.read_csv('momentum_factor.csv', index_col=0)
# ic_series = rolling_ic_analysis(returns, factor_data)

结果很有意思。我直接说结论:

时间段 动量因子月均收益 IC均值 IC标准差
2010-2014 1.82% 0.073 0.12
2015-2018 0.95% 0.041 0.15
2019-2023 0.31% 0.018 0.18

看到了吗?动量因子的收益从1.82%一路跌到0.31%,IC均值也从0.073降到了0.018。说白了,这个因子越来越不靠谱了。

我的经验:动量因子在牛市中后期衰减最快。因为那时候大家都在追涨,因子拥挤度飙升,一旦市场转向,回撤会非常惨烈。我曾经在2015年6月吃过这个亏,一周回撤了8%。

1.3 反转因子的衰减特征

反转因子和动量因子正好相反——它赌的是跌多了会涨,涨多了会跌。A股市场里,反转因子在短期(1个月以内)和长期(12个月以上)表现都不错,但中期(3-6个月)就有点尴尬。

我做过一个测试:用过去1个月的收益率构建反转因子,每个月做多跌幅最大的20%股票,做空涨幅最大的20%股票。结果如下:

  • 2010-2014年:反转因子年化收益12.3%,夏普比率0.89
  • 2015-2018年:年化收益降到6.7%,夏普比率0.45
  • 2019-2023年:年化收益只有2.1%,夏普比率0.12

为什么会这样?我个人觉得有两个原因:

  1. 市场有效性提升:散户占比下降,机构占比上升,错误定价被更快修复
  2. 量化策略同质化:太多人用反转因子,导致反转信号被提前交易

避坑指南:我曾经在2018年用反转因子做了一整年的策略,结果亏了。后来复盘发现,那年市场是单边下跌,反转因子在熊市里就是个坑——你以为跌多了会涨,结果它还能继续跌。所以,反转因子一定要结合市场环境来用。

1.4 价值因子的衰减特征

价值因子,就是买便宜的股票。市盈率、市净率、市销率这些指标,都是价值因子的常用代理变量。

我拿市盈率倒数(EP)作为价值因子,做了同样的回测。结果让我有点意外:

时间段 价值因子月均收益 IC均值 最大回撤
2010-2014 1.21% 0.052 -8.3%
2015-2018 0.88% 0.035 -12.1%
2019-2023 0.42% 0.019 -15.6%

价值因子的衰减速度比动量因子慢一些,但也在持续下降。而且它的最大回撤在扩大——这说明价值因子的风险在增加。

你想想看,为什么价值因子会衰减?

嗯,我觉得核心原因是:便宜有便宜的道理。很多股票市盈率低,是因为它的基本面确实有问题。以前市场对这些问题反应不足,但现在信息传播快了,大家都能看到这些风险,所以价值因子的超额收益就被压缩了。

1.5 因子衰减的共性规律

综合上面三个因子的实证结果,我总结出几个共性规律:

  • 衰减速度与因子复杂度成反比:越简单的因子,衰减越快。动量、反转这种谁都能理解的因子,衰减速度最快。而一些复杂的因子(比如基于机器学习的因子),衰减速度相对慢一些。
  • 衰减速度与市场关注度成正比:被媒体报道、被研报推荐的因子,衰减速度会加快。我记得2019年有一篇研报推了某个因子,结果三个月后这个因子的IC就腰斩了。
  • 衰减不是线性的:因子收益不会匀速下降,而是会在某个时间点突然加速。这个时间点通常对应着市场风格的切换或者监管政策的变化。

核心结论:A股市场常见因子的半衰期大约在3-5年。也就是说,一个因子从被发现到收益减半,大概需要3-5年的时间。这个时间窗口,就是你做因子挖掘和更新的节奏参考。

1.6 因子衰减的可视化分析

为了让大家更直观地理解因子衰减,我画了一张图。这张图展示了三个因子在不同时间段的IC衰减曲线。

A股常见因子IC衰减曲线(2010-2023) 0.00 0.02 0.04 0.06 0.08 2010 2013 2016 2019 2022 动量因子 反转因子 价值因子 数据来源:A股全市场回测,IC为滚动12个月均值

从这张图可以看得很清楚:三个因子的IC都在下降,但下降的速度和幅度不一样。动量因子下降最快,价值因子相对平缓一些。这也印证了我们前面的结论——越简单的因子,衰减越快。

1.7 应对因子衰减的思路

说了这么多衰减,那怎么办?总不能看着因子失效不管吧。我个人习惯的做法是:

  1. 动态监控:每个月计算因子的IC和收益,设置预警阈值。如果IC连续3个月低于0.02,就要考虑调整了。
  2. 因子组合:不要只依赖一个因子,把多个低相关性的因子组合起来,可以平滑衰减的影响。
  3. 定期更新:每半年到一年,重新审视因子池,剔除失效的因子,加入新的有效因子。

一个小技巧:我习惯用因子IC的滚动标准差来判断因子是否进入衰减加速期。如果IC的标准差突然变大,说明因子的预测能力变得不稳定,这时候就要警惕了。

好了,这一章的内容就到这里。因子衰减不是洪水猛兽,它是市场进化的自然结果。关键是要有系统的方法去监控和应对。下一章我们会聊因子更新的具体方法,包括如何构建因子衰减模型、如何设定更新频率等。


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