拥挤度的数学定义:截面拥挤度、时序拥挤度、多因子拥挤度

聊到拥挤度,很多人第一反应就是「大家都在买同一个东西」。没错,直觉是对的。但做量化不能只靠感觉,得有个数学上的抓手。我这些年踩过的坑,十有八九都跟拥挤度没算清楚有关。

今天咱们就把拥挤度的数学定义掰开揉碎了讲。说白了,就三个维度:截面拥挤度时序拥挤度多因子拥挤度。一个一个来。

1. 截面拥挤度:同一时刻,谁在扎堆?

截面拥挤度,衡量的是在某个时间点上,某只股票被多少资金或策略共同持有。我习惯把它叫做「横向拥挤度」。

数学上,最常用的定义是:

CrossSectional_Crowding_i(t) = (持有该股票的策略数量) / (总策略数量)

但这里有个坑——光数策略数量不够。你想想看,如果100个策略都买了茅台,但每个只买了1手,这算拥挤吗?不算。真正的拥挤要看资金集中度

所以我个人更推荐用这个公式:

CS_Crowding_i(t) = (策略i在t时刻的持仓市值) / (所有策略在t时刻的总市值)

嗯,这里要注意:分母是所有策略的总市值,不是全市场市值。我们只关心「策略内部」的拥挤。

核心要点:截面拥挤度越高,意味着一旦有人抢跑,踩踏效应越严重。我在2015年股灾时就吃过这个亏——当时很多量化策略都重仓小盘股,结果一跌,谁也跑不掉。

2. 时序拥挤度:同一策略,拥挤在变化

时序拥挤度,看的是某个策略或因子,在一段时间内的拥挤程度变化趋势。说白了,就是「现在比过去更挤了吗?」

我常用的计算方法是:

TimeSeries_Crowding(t) = (当前时刻的拥挤度 - 过去N日均值) / 过去N日标准差

这个公式其实就是个Z-score。当Z-score大于2时,我一般会开始警惕。大于3?那基本就是「别碰」的信号了。

举个例子:

# 伪代码示意
def时序拥挤度(current_crowding, history_crowding):
    mean = np.mean(history_crowding)
    std = np.std(history_crowding)
    z_score = (current_crowding - mean) / std
    return z_score

我曾经在2021年用这个指标成功躲过了一波量化私募的集体回撤。当时时序拥挤度连续5天超过2.5,我果断减仓了。结果一周后,那批策略集体崩了。

小技巧:时序拥挤度最好用滚动窗口计算,窗口大小我一般选60个交易日。太短容易误判,太长反应太慢。

3. 多因子拥挤度:因子之间的「共振」

这个维度最容易被忽略。多因子拥挤度,衡量的是多个因子在同一时间点上的拥挤程度是否同步

你想想看,如果价值因子拥挤、动量因子也拥挤、质量因子也拥挤,那说明什么?说明整个市场都在用同一套逻辑做交易。这时候,任何风吹草动都会引发系统性风险。

数学定义上,我习惯用因子相关性矩阵的特征值来度量:

MultiFactor_Crowding = λ_max / sum(λ_i)

其中λ_max是因子相关性矩阵的最大特征值,sum(λ_i)是所有特征值之和。这个比值越接近1,说明因子之间的相关性越强,拥挤度越高。

拥挤度类型 核心指标 阈值参考 我的经验
截面拥挤度 持仓市值占比 > 20% 警惕 超过30%基本就是雷区
时序拥挤度 Z-score > 2 警惕 连续3天>2.5,果断减仓
多因子拥挤度 特征值比值 > 0.7 警惕 超过0.8,系统性风险极高

警告:多因子拥挤度一旦超过0.8,不要犹豫,直接降低整体仓位。我见过太多人在这时候还想着「再赚一波」,结果被一波带走。

4. 三种拥挤度的联动关系

这三种拥挤度不是孤立的。它们之间会互相强化。比如:

  • 截面拥挤度高 → 时序拥挤度上升 → 多因子拥挤度攀升
  • 多因子拥挤度高 → 因子失效加速 → 截面拥挤度进一步集中

这就是个恶性循环。我把它叫做「拥挤度螺旋」。

下面这张图,是我自己总结的拥挤度识别框架:

拥挤度识别框架 截面拥挤度 同一时刻 策略持仓集中度 阈值:>20% 时序拥挤度 时间维度 Z-score变化趋势 阈值:Z>2 多因子拥挤度 因子间共振 特征值比值 阈值:>0.7 拥挤度螺旋:互相强化 ⚠ 触发阈值 → 降低仓位 / 分散策略

你看,这三个维度就像三根柱子。任何一根倒了,整个策略体系都会出问题。我建议你每周至少跑一次这三个指标,形成习惯。

实操建议:刚开始做的时候,别贪多。先盯住截面拥挤度这一个指标,跑顺了再加时序拥挤度。多因子拥挤度可以等你有一定经验了再上。一步一步来,别想一口吃成胖子。

好了,关于拥挤度的数学定义,咱们就聊到这儿。记住一句话:拥挤度不是用来预测收益的,是用来识别风险的。这个认知,比任何公式都重要。

专注资料整理