halo 的技术博客

返回

你闷头做了一个选股策略,回测年化 alpha 8%、t 值 3.5,正准备写公众号宣布发现新大陆——结果一个同行拿 Carhart 四因子往你收益上一套,alpha 当场归零。那 8% 不是你的本事,是「小盘 + 价值 + 动量」三种风格溢价的拼装费。

结论先放这:在资产定价里,「alpha = 跑赢市场」是个需要被严格定义的概念。最朴素的定义只扣掉市场 beta(CAPM),但 CAPM 漏了规模、价值、动量三个长期存在的风险溢价。Carhart (1997) 在 Fama-French 三因子基础上加第四个因子——动量 (Momentum, Mom = 赢家组合 − 输家组合),把「追涨杀跌」那部分收益也定价掉。一个策略经四因子回归后还剩显著正 alpha,才算真正越过了已知的系统性风险来源。

在我们的合成面板(25 个规模×B/M 组合 + 1 个 WML 动量组合,真实 α=0,收益完全由四因子解释)上:只用 CAPM(市场一个因子)回归,25 组合留下 −2.16% ~ +9.03% 的结构化 α(平均绝对值 3.84%)——小盘价值股 α 为正、大盘成长股为负,暴露得清清楚楚;换成 Carhart 四因子,这套 α 几乎被吃光(平均绝对值塌到 0.65%)。最扎眼的是 WML 动量组合:CAPM α 高达 +9.02%/年,四因子下直接塌到 +0.96%/年。这就是 Carhart 模型存在的全部意义——动量是一个 CAPM 怎么都解释不了、却真实存在的风险来源。

Carhart 四因子:四个可交易的风险溢价来源(月均)


1. 模型长什么样:在 FF3 上加一个 Mom#

Carhart 四因子模型就是 Fama-French 三因子 + 动量:

r_i − r_f = α_i + β_MKT·(Mkt−r_f) + β_SMB·SMB
            + β_HML·HML + β_MOM·Mom + ε_i
plaintext

四个因子的含义:

  • Mkt − r_f:市场超额收益(来自 CAPM)。
  • SMB (Small Minus Big):小盘股减大盘股,规模溢价。
  • HML (High Minus Low):高 B/M(价值)减低 B/M(成长),价值溢价。
  • MOM (Mom):过去一段时间赢家组合减输家组合,动量溢价。

关键认知:这四个因子本身都是”可交易的多空组合”,不是抽象概念。你不需要相信某个理论,只要能按规则构造 SMB/HML/Mom 的空头对冲组合,就能算出它们的收益序列。Carhart 的贡献,本质是把「动量这个被 CAPM 和三因子都漏掉的现象」正式做成第四个可交易因子。


2. 从零实现:合成因子与组合#

我们用纯 numpy 造一套自洽面板——关键是让每个组合的真实收益完全由四因子线性生成(真实 α=0),这样回归后残留下来的 α 纯粹来自”模型漏了因子”。

注意 b_smb 随规模单调、b_hml 随 B/M 单调——这是 Fama-French 的核心设定,让 25 个组合天然带不同的规模/价值暴露。而 b_mom 随 B/M 略增,是真实数据里”价值股往往也带点动量”的缩影。


3. 时间序列回归:从收益里抠出 alpha#

资产定价的标准做法是时间序列回归:把每个组合(或策略)的收益对四因子收益回归,截距 α 就是”扣掉所有因子暴露后还剩多少超额收益”。

def ts_regress(y, X):
    n = len(y)
    Xd = np.column_stack([np.ones(n), X])
    coef, *_ = np.linalg.lstsq(Xd, y, rcond=None)
    return coef[0] * 12.0, coef[1:]   # 返回 年化 alpha 与各因子 beta
python

对 25 个组合,分别跑”CAPM(只放 Mkt)“和”Carhart(四因子)“两版,把 α 排成热力图:

25 个规模×B/M 组合:CAPM 留大 α,四因子几乎清零

左图(CAPM)呈现教科书式的结构:小盘价值股 α 显著为正(最高 +9.03%)、大盘成长股为负(最低 −2.16%)。这不是随机噪声,而是规模溢价 + 价值溢价在 CAPM 框架下的”套娃”——CAPM 没有 SMB/HML 这两个因子,只能把它们的收益算进 α。右图(四因子)把这张结构化图案几乎抹平,α 落在 −1.25% ~ +1.07% 区间内,基本是抽样误差水平。

把截面平均 |α| 和 WML 动量组合拎出来对比:

CAPM 漏掉规模/价值/动量,四因子几乎吃光 α

对象CAPM α(年)Carhart α(年)
25 组合平均 |α|3.84%0.65%
WML 动量组合+9.02%+0.96%

WML 这一行最说明问题:动量组合几乎不暴露市场(β_Mkt≈0)、纯粹靠”买赢家卖输家”赚钱,CAPM 完全无解,只能把 9% 全记成 α;而一旦 Mom 因子登场,这部分收益被 Momentum 因子”认领”,α 缩到不足 1%。


4. 怎么读这张表:α 归零到底是好是坏#

站在不同立场,结论相反:

  • 如果你是策略开发者:α 被四因子吃光 = 你的策略没有增量信息,只是风格的杠杆。该沮丧。
  • 如果你是因子研究者:α 被吃光 = 模型更完整了,已知风险来源又多覆盖了一块。该高兴。

这正是对冲基金日常在干的事:用四因子(现在常用五因子甚至更多)做”绩效归因”。一个量化基金给你看年化 15%,你先问”你的 alpha 经 Carhart 后剩多少”——如果剩 12%,那是真本事;如果剩 1%,那 14% 是风格 beta,买对应的 ETF 就能复制,凭什么收 2/20 管理费?

GRS 检验的直觉:把所有组合一起检验”联合 α=0”用 Gibbons-Ross-Shanken 检验。四因子下 GRS 统计量应大幅塌缩——意味着”这些组合的收益差异,能被四个因子完全解释”。本文合成数据的 α 已经肉眼可见地归零,工业上则是用 GRS 的 p 值给这个结论一个统计判据。


5. 诚实拆穿:五类真实陷阱#

① 复制危机 (replication crisis)——Carhart 的 Mom 在 2010 年后半死。 动量因子的溢价在 Carhart 原文(1963-1993)很稳,但 2010 年后欧美动量多次”崩盘”(尤其在 COVID 2020 年 3 月,赢家瞬间变输家)。学术上 Clifford Asness 等人指出动量长期存在但有剧烈的”动量崩溃”期。所以”四因子吃掉我的 α”在样本内成立,样本外 Mom 自己都不稳——因子溢价会变,模型不会替你预测 regime

② FF5 把 HML 拆了——四因子还不够。 Fama-French 2015 在四因子基础上又加 RMW(盈利)、CMA(投资),变成五因子,并发现 HML 在五因子里基本冗余:价值溢价很多被”投资/盈利”维度吸收。所以今天严谨的归因常用 FF5 而非 Carhart 四因子。Carhart 的历史地位在于”第一个把动量制度化”,但作为当前最佳实践它已不是终点。

③ Rm-Rf 不是唯一的市场定义。 我们这里用四因子对组合收益回归,但”市场因子”用的是市值加权市场超额收益。不同文献用不同市场代理(含/不含股息、价值加权/等权),β 和 α 会随之变。α 的绝对值对”市场因子怎么造”敏感,汇报时务必说清口径。

④ 交易成本让因子 alpha 虚高。 SMB/HML/Mom 都是月度再平衡的多空组合。Mom 因子的换手极高(每月卖掉输家买赢家),真实扣掉交易成本后 Mom 溢价会缩水一截。本文合成数据没算成本,所以呈现的是”毛溢价”。实战里任何因子 alpha 都要过一遍换手成本这一关,否则又是 paper alpha。

⑤ 因子动物园 (factor zoo)——别挑个能吃掉你的因子自称解释。 2020 年的一篇著名论文 “A Mountain of Factors” 统计出学术里已发表 600+ 个”显著”因子。如果你有 600 个候选因子,总能挑出一个把你的 α 解释掉——也可能挑出一个”证明你的 α 还在”。正确做法是用先验上站得住的少数因子(市场/规模/价值/动量/盈利/投资)做归因,而不是数据驱动地挑因子。否则你只是在玩多重检验的游戏。


6. 落到量化:你的日常工作流该怎么做#

无论你是做因子、做 CTA 还是做选股,Carhart 四因子(及延伸的 FF5)应该成为你的标准体检项

  1. 策略回测出来,先跑四因子/五因子时间序列回归,看 α 剩多少、各 β 是多少。α 仍显著正 → 值得继续;α 归零且 β 清晰 → 你做的是风格暴露,别当 alpha 卖。
  2. 横截面因子检验,跑 Fama-MacBeth 或 NEwey-West,看因子收益率在控制其他因子后是否还显著(这是上一轮我们聊的截面回归;和这里的时间序列回归是同一套逻辑的两面)。
  3. 归因≠预测:四因子告诉你”过去收益来自哪”,不告诉你”未来还是否成立”。Mom 崩溃、HML 疲软都是活例子。

真实落地时,直接用 pandas-datareaderffn 拉 Ken French 官网的官方 SMB/HML/Mom 因子序列(月度),或用 linearmodelsGRS 做联合检验;本文纯 numpy 合成只为把”因子怎么构造、α 怎么被吃掉”的每一步摊开。记住:一个经四因子后仍显著为正的 alpha,才是你真正该兴奋的东西。

Carhart 四因子模型实战拆解:为什么你的 alpha 可能是因子的伪装
https://blog.halo26812.eu.org/blog/carhart-four-factor
Author halo
Published at 2026年7月22日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨