4. 风险因子模型:Fama-French 三因子模型、五因子模型、因子暴露与因子收益

风险因子模型是量化投资中解释资产收益、进行风险归因的核心工具。Fama-French 系列模型通过构建系统性风险因子,将投资组合的超额收益分解为因子暴露与因子收益的乘积,为组合管理者提供了标准化的风险分析框架。

4.1 Fama-French 三因子模型 (FF3)

1993 年,Eugene Fama 和 Kenneth French 在 CAPM 单因子模型基础上,提出了经典的三因子模型。该模型认为,投资组合的超额收益可由以下三个因子解释:

因子名称 符号 构建方式 经济含义
市场风险溢价 Rm - Rf 市场组合收益率 - 无风险利率 承担系统性市场风险的补偿
规模因子 SMB (Small Minus Big) 小市值股票组合收益 - 大市值股票组合收益 小盘股相对于大盘股的风险溢价
价值因子 HML (High Minus Low) 高账面市值比组合收益 - 低账面市值比组合收益 价值股相对于成长股的风险溢价

三因子模型的数学表达式为:

R_i - R_f = α_i + β_i·(R_m - R_f) + s_i·SMB + h_i·HML + ε_i

其中,β_i、s_i、h_i 分别为组合对市场、规模、价值因子的暴露度(因子载荷),α_i 为经风险调整后的超额收益(Alpha)。

实战要点:在 A 股市场,SMB 因子通常具有显著的正溢价,小盘股长期跑赢大盘股;HML 因子的有效性在近年有所减弱,需结合估值周期动态调整。

4.2 Fama-French 五因子模型 (FF5)

2015 年,Fama 和 French 在三因子基础上增加了两个与盈利能力及投资风格相关的因子,形成了五因子模型,进一步提升了收益解释能力。

因子名称 符号 构建方式 经济含义
市场风险溢价 Rm - Rf 市场组合收益率 - 无风险利率 系统性市场风险补偿
规模因子 SMB 小市值 - 大市值 规模风险溢价
价值因子 HML 高账面市值比 - 低账面市值比 价值风险溢价
盈利因子 RMW (Robust Minus Weak) 高盈利组合收益 - 低盈利组合收益 高盈利能力公司的风险溢价
投资因子 CMA (Conservative Minus Aggressive) 低投资组合收益 - 高投资组合收益 保守投资风格的风险溢价

五因子模型表达式:

R_i - R_f = α_i + β_i·(R_m - R_f) + s_i·SMB + h_i·HML + r_i·RMW + c_i·CMA + ε_i
模型选择建议:三因子模型适用于快速归因与基准比较;五因子模型适用于精细化风险拆解与业绩归因。在因子拥挤度较高的市场环境中,RMW 和 CMA 因子能提供额外的区分度。

4.3 因子暴露与因子收益

因子模型的核心在于将组合收益分解为两个关键组成部分:

  • 因子暴露(Factor Exposure / Factor Loading):组合对某个因子的敏感度,通常通过时间序列回归(如 OLS)得到。暴露度越高,组合收益受该因子波动的影响越大。
  • 因子收益(Factor Return):因子本身在特定时期内的收益率,由多空组合的收益差计算得出,反映该风险因子的市场定价。

组合的预期收益可表示为:

E[R_i] - R_f = Σ (因子暴露 × 因子预期收益)

风险归因则进一步将组合的波动率(风险)分解到各因子上:

组合风险 = Σ (因子暴露 × 因子协方差矩阵 × 因子暴露) + 特质风险
常见误区:因子暴露是历史回归结果,不代表未来因子收益方向。因子收益可能随时间发生结构性变化(如价值因子在利率上升期的表现),需结合宏观环境动态评估。

4.4 因子模型在组合风险归因中的应用流程

在实际量化工作中,使用因子模型进行风险归因通常遵循以下步骤:

  1. 因子构建:根据模型定义,计算各因子的日度/月度收益率序列(如 SMB、HML、RMW、CMA)。
  2. 暴露度估计:使用滚动窗口回归(如 36 个月),估计组合或个股对各因子的暴露系数。
  3. 收益分解:将组合实际收益拆解为因子贡献部分与 Alpha 部分。
  4. 风险分解:基于因子协方差矩阵,计算各因子对组合总风险的贡献比例。
  5. 归因报告:输出因子暴露热力图、风险贡献饼图、Alpha 序列等可视化结果。
Fama-French 因子模型风险归因流程 ① 因子构建 ② 暴露度估计 ③ 收益分解 ④ 风险分解 ⑤ 归因报告 组合收益 & 因子数据 关键输出 • 因子暴露矩阵:组合对各因子的敏感度(β, s, h, r, c) • 因子贡献收益:各因子对组合收益的贡献金额与百分比 • 风险归因:各因子对组合波动率的贡献比例(边际风险贡献)

4.5 因子暴露与因子收益的实战计算示例

以下 Python 代码演示了如何使用 OLS 回归估计组合对三因子的暴露度,并计算因子贡献收益:

import pandas as pd
import numpy as np
import statsmodels.api as sm

# 假设已准备好数据:组合超额收益、市场超额收益、SMB、HML
# df 包含列:'port_excess', 'mkt_excess', 'SMB', 'HML'

X = df[['mkt_excess', 'SMB', 'HML']]
X = sm.add_constant(X)  # 添加截距项用于估计 Alpha
y = df['port_excess']

model = sm.OLS(y, X).fit()

# 提取因子暴露(系数)
alpha = model.params['const']
beta_mkt = model.params['mkt_excess']
beta_smb = model.params['SMB']
beta_hml = model.params['HML']

# 计算因子贡献收益
factor_contribution = {
    '市场因子贡献': beta_mkt * df['mkt_excess'].mean(),
    '规模因子贡献': beta_smb * df['SMB'].mean(),
    '价值因子贡献': beta_hml * df['HML'].mean(),
    'Alpha': alpha
}

print("因子暴露系数:")
print(f"Alpha: {alpha:.4f}, Beta_mkt: {beta_mkt:.4f}, Beta_smb: {beta_smb:.4f}, Beta_hml: {beta_hml:.4f}")
print("\n因子平均贡献收益:")
for k, v in factor_contribution.items():
    print(f"{k}: {v:.4f}")
工程化建议:在实际生产环境中,建议使用滚动窗口回归(如 252 个交易日)动态更新因子暴露,并采用 Newey-West 调整标准误以处理异方差与自相关。因子收益数据可从学术数据库(如 Kenneth French 数据图书馆)或自建多空组合计算。

4.6 三因子 vs 五因子:适用场景对比

对比维度 三因子模型 (FF3) 五因子模型 (FF5)
因子数量 3 个(市场、规模、价值) 5 个(市场、规模、价值、盈利、投资)
收益解释力 (R²) 中等(约 70-85%) 较高(约 80-95%)
模型简洁性 高,易于实现与沟通 中等,因子间可能存在共线性
适用场景 快速归因、基准比较、小规模组合 精细化归因、机构级风控、多空策略
数据要求 较低,仅需市值与账面市值比 较高,需盈利能力与投资数据

选择哪种模型取决于组合的复杂程度与归因精度需求。对于大多数 AB 测试场景,三因子模型已能提供足够的风险调整精度;当需要深入拆解风格漂移或行业偏离时,五因子模型更具优势。