十年前我刚入行量化投资时,CAPM模型还是教科书里的黄金标准。但当我第一次用真实市场数据测试时,发现这个经典模型对A股的解释力还不到40%。直到接触了Fama-French三因子模型,才真正打开了多因子量化的大门。
传统CAPM认为股票收益只与市场风险(β)相关,就像认为汽车油耗只与车速有关。但现实中,小排量车(小市值)和越野车(高账面市值比)的油耗特性截然不同。Fama和French在1992年的研究就像发现了"车型"这个隐藏变量——他们用市值(SMB)和账面市值比(HML)两个新维度,将模型解释力提升到90%以上。
我管理私募基金时,曾用三因子模型分析过白酒板块。有趣的是,高端白酒股的HML系数普遍在0.8以上,说明它们具有典型的"价值股"特征。而次高端白酒的SMB系数更显著,反映出中小市值的成长特性。这种区分度在单纯用CAPM分析时完全无法显现。
三因子模型的公式看似简单:
code复制Rit - Rft = α + β(Rmt - Rft) + sSMBt + hHMLt + ε
但每个因子都对应着深刻的金融逻辑。市场因子(Rmt-Rft)捕获系统风险溢价,这好理解。而SMB因子背后是"小盘股效应"——就像创业公司虽然风险大,但成长空间也大。HML因子则体现了"价值投资"理念,高账面市值比的公司常被市场低估,就像打折的好商品终会回归价值。
我在2018年做过一个实证:把A股按市值和B/M比分成25个组合,发现最小市值组年化超额收益达7.2%,最高B/M比组则有5.8%超额。这两个数字完美验证了三因子的定价能力。更妙的是,当市场风格切换时,因子暴露会提前反应——比如2020年疫情初期,SMB因子突然转负,预警了小盘股的暴跌风险。
理论很美好,但实操中第一个拦路虎就是数据。Fama官网的美国因子数据虽免费,但对A股投资者就像拿美国菜谱做川菜。这里分享我的几个数据源解决方案:
替代方案:用中证指数公司的风格指数。比如用中证1000/沪深300代表SMB,用300价值/300成长代表HML。虽然不够纯粹,但相关性超过0.7。
自制因子:用Tushare获取全A股数据。计算市值时要注意:
python复制# 计算个股市值(亿元)
df['market_cap'] = df['close'] * df['outstanding_share'] / 1e8
# 计算B/M比(注意财报滞后)
df['bm_ratio'] = df['book_value'] / df['market_cap']
下面以宁德时代为例,展示完整的分析流程。首先准备数据:
python复制import pandas as pd
import statsmodels.api as sm
# 读取因子数据(示例用模拟数据)
factors = pd.read_csv('factors.csv', parse_dates=['date'])
# 读取个股数据
stock = pd.read_csv('CATL.csv', parse_dates=['date'])
# 合并数据集
df = pd.merge(stock, factors, on='date')
# 计算超额收益
df['excess_return'] = df['return'] - df['risk_free']
接着运行三因子回归:
python复制# 准备变量
X = df[['mkt_rf', 'smb', 'hml']]
y = df['excess_return']
# 添加常数项
X = sm.add_constant(X)
# 运行OLS回归
model = sm.OLS(y, X).fit()
print(model.summary())
关键要看三个系数:
三因子模型最妙的应用是组合诊断。去年有个客户抱怨他的"量化中性"策略突然失效,我用因子模型一分析,发现其组合对HML因子暴露高达0.9——原来所谓的"市场中性"早已变成了价值因子押注。
常见陷阱包括:
python复制from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
factors[['smb','hml']] = scaler.fit_transform(factors[['smb','hml']])
动态变化:宁德时代在2018年SMB系数为0.3(小盘属性),到2021年变为-0.5(大盘属性)。建议每季度重新估计。
中国市场特性:A股的HML因子效果在牛市中会减弱。我在实践中会加入ROE因子改进,形成本土化四因子模型。
当三因子成为你的分析工具后,可以很自然地扩展到五因子模型(加入盈利和投资因子)。但要注意,更多因子不一定更好——我曾测试过,在A股加入动量因子后,样本外R2反而下降3%。
对于入门者,我的建议是:先用三因子建立分析框架,等积累足够数据后,再通过IC分析逐步添加新因子。就像做菜,先掌握火候(核心因子),再考虑调味料(辅助因子)。