4、因子拥挤度分析:拥挤度的定义、拥挤度指标构建、拥挤度与衰减的关系

因子拥挤度,这个词听起来有点玄乎。说白了,就是看有多少资金在同一个因子上「扎堆」。

我做量化这些年,见过太多因子从「金矿」变成「坟场」的案例。一开始收益漂亮得不行,过几个月直接崩盘。为什么?因为太拥挤了。

你想想看,一个因子如果只有你一个人用,那叫alpha。如果全市场都在用,那就变成了beta,甚至变成负alpha。

4.1 拥挤度的定义

我个人习惯把拥挤度定义为:因子暴露的集中程度与交易行为的趋同程度

更直白一点:
- 如果100个策略都在买同样的股票,那就是拥挤。
- 如果这些策略的持仓高度重叠,那就是极度拥挤。
- 如果连隔壁做量化的老王都开始用这个因子了,嗯,赶紧跑。

拥挤度的本质,其实是「策略同质化」的度量。当太多人用同样的逻辑做交易,边际收益必然下降,边际风险必然上升。

核心观点: 拥挤度不是因子本身的问题,而是因子使用者的问题。一个因子本身没有错,错在用的人太多。

4.2 拥挤度指标构建

构建拥挤度指标,我一般从三个维度入手。这三个维度缺一不可,单看哪一个都容易误判。

4.2.1 持仓重叠度

这个最简单。计算所有使用该因子的策略,其持仓股票的交集比例。

# 伪代码示例:计算持仓重叠度
def compute_overlap(portfolios):
    """
    portfolios: 字典,key为策略ID,value为持仓股票列表
    返回:平均两两重叠比例
    """
    n = len(portfolios)
    total_overlap = 0
    count = 0
    
    for i in range(n):
        for j in range(i+1, n):
            set_i = set(portfolios[i])
            set_j = set(portfolios[j])
            overlap = len(set_i & set_j) / len(set_i | set_j)
            total_overlap += overlap
            count += 1
    
    return total_overlap / count if count > 0 else 0

我在项目中遇到过,当这个指标超过0.3时,因子衰减速度会明显加快。超过0.5?那基本就是踩踏的前兆。

4.2.2 因子暴露集中度

这个指标看的是:市场上所有资金在因子上的暴露是否集中在少数股票上。

我常用的方法是计算因子暴露的赫芬达尔指数(HHI):

# 因子暴露集中度计算
def factor_hhi(factor_exposures):
    """
    factor_exposures: 每只股票上的因子暴露值
    返回:HHI指数,越高说明越集中
    """
    total = sum(factor_exposures)
    weights = [e / total for e in factor_exposures]
    hhi = sum(w ** 2 for w in weights)
    return hhi

HHI接近1,说明所有资金都压在少数几只股票上。这种结构极其脆弱,一旦有人抢跑,就是连锁反应。

4.2.3 交易拥挤度

这个指标看的是:因子的换手率与市场平均换手率的比值。

指标名称 计算公式 拥挤判断阈值
持仓重叠度 平均两两Jaccard相似度 > 0.3 警惕,> 0.5 危险
因子暴露HHI ∑(权重²) > 0.2 警惕,> 0.4 危险
交易拥挤度 因子换手率 / 市场平均换手率 > 2.0 警惕,> 3.0 危险
我的经验: 这三个指标最好综合看。单一指标高不一定有问题,但三个同时高,那基本可以确定因子已经「过热」了。

4.3 拥挤度与衰减的关系

拥挤度和衰减的关系,我总结为三个字:正相关

但这里有个细节——不是线性正相关,而是非线性加速

什么意思?
- 拥挤度从0.1到0.2,衰减速度可能只增加10%。
- 拥挤度从0.4到0.5,衰减速度可能直接翻倍。

为什么会这样?因为拥挤度越高,策略之间的「博弈」越激烈。大家都在抢跑,都在预判别人的预判。最终结果就是:因子收益被快速吃掉。

我曾经做过一个回测实验:
- 低拥挤度时期(持仓重叠度 < 0.2),因子半衰期约6个月。
- 高拥挤度时期(持仓重叠度 > 0.4),因子半衰期直接降到1.5个月。

差了整整4倍。

避坑指南: 我曾经犯过一个错误——看到一个因子历史表现很好,直接重仓上。结果没注意到当时拥挤度已经很高了。三个月后因子失效,回撤了15%。从那以后,我每次上因子前,必先看拥挤度。

4.4 知识体系图:拥挤度分析框架

下面这张图,是我自己整理的分析框架。每次做因子评估时,我都会过一遍这个流程。

因子拥挤度分析框架 因子拥挤度 持仓重叠度 因子暴露集中度 交易拥挤度 Jaccard相似度 Top10重叠率 HHI指数 基尼系数 换手率比值 成交量占比 输出:因子衰减速度预测 三个维度综合评分,加权得到拥挤度指数 拥挤度指数越高,因子衰减速度越快

4.5 实战中的几点体会

最后,分享几个我在实战中总结的经验:

  1. 拥挤度是动态的。 今天不拥挤,不代表明天不拥挤。我建议每周至少更新一次拥挤度指标。
  2. 拥挤度有滞后性。 等你发现拥挤的时候,往往已经晚了。所以要用「趋势」而非「绝对值」来判断。
  3. 拥挤度不是万能的。 有些因子天生就适合拥挤——比如流动性因子。但大部分alpha因子,拥挤就是毒药。
  4. 别忘了看对手盘。 拥挤度只告诉你「有多少人在做」,但没告诉你「这些人是谁」。如果对手盘都是散户,那拥挤度高点也没事。如果对手盘都是量化大厂,嗯,你懂的。
一句话总结: 拥挤度是因子衰减的加速器。监控它,敬畏它,但别被它吓住——拥挤度高的因子,如果策略有差异化,依然能赚钱。

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