4. Fama-French三因子模型:规模因子(SMB)与价值因子(HML)的构建逻辑、6个投资组合的划分方法、三因子回归实战
聊到多因子模型,Fama-French三因子模型绝对是个绕不开的里程碑。说实话,CAPM虽然漂亮,但在实际应用中,我见过太多它解释不了的收益异象。比如小盘股长期跑赢大盘股,低市净率股票比高市净率的更香——这些CAPM都说不通。
1993年,Fama和French干了一件漂亮事。他们发现,除了市场风险,还有两个因子能显著解释股票收益:一个是规模因子(SMB),一个是价值因子(HML)。嗯,这就是我们今天要啃的硬骨头。
4.1 规模因子(SMB)的构建逻辑
SMB,全称是Small Minus Big。说白了,就是做多小盘股、做空大盘股,看这个组合能带来多少超额收益。
构建步骤其实不复杂,我拆开来讲:
- 按市值排序:每年6月底,把所有股票按市值从大到小排。取中位数,大的叫Big(B),小的叫Small(S)。
- 分组交叉:这个后面会细讲,先记住SMB是多空组合就行。
- 计算收益差:SMB = 小盘股组合收益 - 大盘股组合收益。
核心直觉:小公司风险更高,流动性更差,投资者要求更高的预期收益作为补偿。SMB因子就是捕捉这种“规模溢价”。
我在项目中遇到过一个问题:市值数据要不要用最新值?我个人习惯是用上一年12月底的市值,然后保持到次年6月再更新。为什么?因为6月底是Fama-French的经典做法,能避免前视偏差。
4.2 价值因子(HML)的构建逻辑
HML,High Minus Low。做多高账面市值比(价值股),做空低账面市值比(成长股)。
这里有个关键点:账面市值比(B/M)怎么算?
- 账面价值:公司财报里的股东权益
- 市值:股票价格 × 总股本
- B/M = 账面价值 / 市值
你想想看,B/M高的公司,通常是被市场低估的“便宜货”。HML因子就是赌这些便宜货未来会均值回归。
避坑指南:我曾经用季度数据更新B/M,结果发现回测效果很差。后来才意识到,Fama-French用的是上一年度的账面价值,配合当前市值。这样能保证信息在发布时点之后才被使用。切记,不要用未来数据!
4.3 6个投资组合的划分方法
这是三因子模型最精妙的地方。Fama和French把股票分成6个组合,怎么分的?
两个维度:
- 规模:大(B)、小(S)——按市值中位数切
- 价值:高(H)、中(M)、低(L)——按B/M的30%、70%分位点切
交叉一下,就是2×3=6个组合:
| 规模 \ 价值 | 低B/M(L) | 中B/M(M) | 高B/M(H) |
|---|---|---|---|
| 小盘(S) | S/L | S/M | S/H |
| 大盘(B) | B/L | B/M | B/H |
然后,SMB和HML就从这6个组合里算出来:
- SMB = (S/L + S/M + S/H)/3 - (B/L + B/M + B/H)/3
- HML = (S/H + B/H)/2 - (S/L + B/L)/2
为什么要这么麻烦?直接按市值分组不行吗?
嗯,这里要注意:Fama-French想控制其他变量的影响。比如算SMB时,他们用三个价值组的平均,就是为了剔除价值因子的干扰。说白了,就是让SMB纯粹反映规模效应。
重要提醒:分组时一定要用独立排序还是条件排序?Fama-French用的是条件排序——先按规模分两组,再在每个规模组内按B/M分三组。这样能保证每个组合里都有足够多的股票。
4.4 三因子回归实战
好了,因子构建完了,怎么用?跑回归。
模型公式很简单:
R_i - R_f = α + β_mkt × (R_m - R_f) + β_smb × SMB + β_hml × HML + ε
其中:
- R_i:个股或组合的收益率
- R_f:无风险利率(通常用1个月国债利率)
- R_m:市场组合收益率
- SMB、HML:我们刚构建的因子
- β_mkt、β_smb、β_hml:因子载荷
- α:超额收益(如果显著为正,说明模型解释不了)
下面我给一段Python代码示例,用的是statsmodels库:
import pandas as pd
import statsmodels.api as sm
# 假设df包含:excess_ret, mkt_excess, smb, hml
X = df[['mkt_excess', 'smb', 'hml']]
X = sm.add_constant(X)
y = df['excess_ret']
model = sm.OLS(y, X).fit()
print(model.summary())
跑完回归,你会看到三样东西:
- R²:模型整体解释力。我见过R²从0.7到0.95不等,取决于你选的股票。
- 系数显著性:看p值。如果某个因子的p值大于0.05,说明它对这只股票没啥解释力。
- α:如果α显著为正,恭喜你,找到了模型无法解释的超额收益——这可能就是你的Alpha策略。
实战经验:我曾经用三因子模型分析一只小盘价值股,发现它的SMB载荷高达1.2,HML载荷0.8。这说明这只股票对规模因子和价值因子都非常敏感。后来我把它加入了一个多因子组合,效果确实不错。
4.5 知识体系总览
为了让你更直观地理解本章的核心逻辑,我画了一张流程图:
这张图把整个流程串起来了。从数据准备,到分组,再到因子构建,最后跑回归。你跟着这个流程走一遍,基本就掌握了三因子模型的核心。
最后说一句:三因子模型虽然经典,但它不是万能的。我在实际工作中发现,它对某些行业(比如科技股)的解释力就不太够。这时候,你可能需要引入更多因子——比如动量因子、盈利因子。不过那是后面章节的事了。
公众号:蓝海资料掘金营,微信deep3321