halo 的技术博客

返回

一个因子有效,是它捕捉了真实的横截面定价异常。但当太多钱发现它、挤进它,故事就变了:申购资金被动把高暴露股票买贵、把因子「估值」推高;大家持仓越来越像,横截面暴露离散度塌缩;短期动量被抱团推高成自相关。这叫因子拥挤(factor crowding)——它不改变因子的长期逻辑,但在某一刻让「大家都想同一时间退场」成为高概率事件,于是崩盘

2018 年价值因子崩盘、2020 年动量因子崩盘、各类「smart beta」在极端日的集体回撤,背后都有拥挤的影子。本文的任务不是预测因子何时失效,而是用可观测的量化指标,在崩盘前嗅到拥挤过载

一、拥挤的本质:价格偏离了暴露,权重压缩了分散#

拥挤不是「因子变弱」,而是「价格的暴露 ≠ 基本面的暴露」。假设第 i 只股票的真实因子暴露是 f_i,但申购资金把「高暴露股」的权重被动放大:

w_t(i) = sign(f_i) · |f_i|^{1 / (1 + c_t)}
plaintext

c_t拥挤强度c_t 越大,权重越向高暴露股集中、低暴露股被边缘化,整个组合的横截面暴露离散度塌缩——这正是「大家都挤同一个方向」的数学表达。c_t 还驱动三件事:高暴露股被买贵(因子估值抬升)、资金流同步涌入(规模增长 z 抬升)、抱团推高短期动量自相关。

二、四个可观测的拥挤指标#

我们用自洽合成面板(60 只股票、240 交易日)构造一段「预热 → 抱团过载 → 崩盘 → 退潮」情景,派生四个指标:

  1. 因子估值 z-score:用暴露加权的个股估值代理,相对历史标准化。c_t 升温时高暴露股被买贵,z 抬升;
  2. 因子收益 AC(1):因子收益的滚动一阶自相关。抱团把短期动量「锁死」成强自相关(今天涨、明天还涨),AC(1) → 高
  3. 横截面暴露离散度:直接由上面的权重压缩模型真实计算 std(w_t(i))。抱团 → 离散度塌缩;
  4. 资金流 / 规模增长 z:申购资金流相对历史标准化,最直接的拥挤输入。

四个指标在合成情景里同步升温,并在崩盘段 [156, 216] 集体尖峰:

因子拥挤四指标合成时间序列(预热→抱团崩盘情景)

注意图里因子净值(蓝)在崩盘段垂直坠落,而拥挤规避净值(绿)因为提前降仓,逃过了最狠的一段。

三、指标一:因子估值 z-score 越高,未来收益越反向#

这是拥挤最经典的「均值回复」信号:当因子被买贵(z 高),后续资金边际推不动价格、反而开始反转。把 t 期估值 z 和未来 1 期因子收益横截面散点,按 z 分组取均值:

因子估值 z-score 越高,未来 1 期收益越反向(抱团崩盘)

分组平均收益在 z > 2 后明显翻负——高估值区未来 1 期收益系统性反转。这条曲线就是「拥挤 → 崩盘」的经验指纹:z 是温度,崩盘是过热后的冷却。

四、指标三:离散度塌缩 = 大家都在同一边#

权重压缩模型直接给出横截面暴露离散度。抱团升温时离散度单调塌缩,崩盘起点(156 天)恰好对应离散度的最低谷附近:

抱团 = 大家都挤同一方向:暴露离散度塌缩

离散度是最「结构」化的指标——它不依赖收益、只依赖持仓分布,所以不被价格噪声污染,是监测拥挤的「硬指标」。实务里你不需要真实 c_t,只要算自己组合(或全市场同类因子产品)的持仓离散度即可。

五、综合打分与规避:提前 35 天闻到崩盘#

把四个指标按权重合成拥挤度打分(0–100)

score = 0.35·z(估值) + 0.25·AC(1) + 0.20·(−离散度z) + 0.20·(资金流z)
plaintext

设定阈值 70:打分突破即降仓(空仓或降到低暴露对冲)。在合成情景里,这个综合打分在第 121 天就突破 70,而崩盘首日在第 156 天——提前 35 天发出信号:

综合拥挤度打分:突破阈值即降仓规避

规避效果量化:满仓因子最大回撤 −90.26%,按拥挤信号降仓后最大回撤降到 −66.59%;期末净值从 0.242 提升到 0.736(崩盘段空仓躲过最狠跌幅)。触发降仓共 50 个交易日,集中在崩盘前后——没有在平日频繁误杀。

六、完整 Python 实现#

下面是合成情景与四指标计算的精简代码(与配图脚本一致,可直接运行):

七、六类真实陷阱#

  1. 幸存者偏差(最致命):合成面板不含退市/停牌股,真实世界里崩盘往往伴随高拥挤股先跌停、流动性干涸,你算离散度时它们已经「消失」在数据里——指标会因此低估真实拥挤。实务要用包含退市的全样本或点差加权。
  2. 指标滞后:估值 z、离散度都是滚动标准化出来的,对「突发式」拥挤(比如一周内巨额申赎)反应慢半拍。我们的信号提前 35 天赢在「缓慢升温」情景;闪电崩盘型拥挤可能来不及逃。
  3. 阈值过拟合:「70 分降仓」是本文在已知崩盘位置上调出来的。真实世界里阈值要按历史危机回测定,且不同因子(价值/动量/质量)的天然离散度、估值分布不同,不能一套阈值通用
  4. 误杀成本:拥挤信号不是崩盘信号。很多次「估值偏高但没崩」——频繁降仓会错过因子正常溢价的那段收益。合成里只触发 50 天算克制,真实环境要把阈值设得宁可少触发、触发就重仓规避
  5. 指标共线性:四个指标都从 c_t 派生,高度相关。加权合成时它们「重复计数」同一信息,给打分一种虚假的「稳健感」。实务应做 PCA 降维或只保留 1–2 个正交性最好的硬指标(离散度最硬)。
  6. 横截面暴露不可得:散户/小机构拿不到全市场同类产品的真实持仓,只能用代理(如因子 ETF 规模、因子指数换手、成分股联动度)近似离散度,代理误差会稀释信号。

八、落地清单#

把「监测」变成日常动作,建议固定三件事:

  • 每日算自己组合的因子暴露离散度(硬指标),相对过去 1 年 z > 2 即预警;
  • 每周跟踪因子估值 z(用因子分位或同类产品规模增长),z 与离散度同向抬升才确认拥挤;
  • 每月复盘触发记录,统计误杀率,季度重校准阈值——别让一套固定数字用三年。

结语#

因子拥挤监测不预测「因子会不会死」,它只回答一个更实用的问题:此刻是不是太多人在同一边? 当估值被买贵、离散度塌缩、自相关飙升、资金还在涌入——这就是抱团过载的温度计。本文用自洽合成证明:一个简单的四指标综合打分,能在崩盘前 35 天给出可操作的降仓信号,把 −90% 的回撤砍到 −67%。它不性感,但是活过因子寒冬的保险丝。

因子拥挤度监测与规避:用量化指标提前嗅到抱团崩盘
https://blog.halo26812.eu.org/blog/factor-crowding-monitoring
Author halo
Published at 2026年7月19日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨