单因子模型基础:从CAPM到实战

聊因子投资,绕不开CAPM。这玩意儿是金融工程的基石,也是我入行时啃的第一块硬骨头。

说实话,刚接触CAPM那会儿,我觉得它太简单了。一个beta值就想解释所有收益?开什么玩笑。但后来在实盘里摔过几次跟头,我才明白——简单的东西往往最深刻。

CAPM模型回顾:那个被骂惨了的起点

CAPM全称是资本资产定价模型,1960年代由Sharpe他们搞出来的。公式长这样:

E(Ri) = Rf + βi × [E(Rm) - Rf]

翻译成人话:一只股票的预期收益 = 无风险利率 + 它的beta × 市场风险溢价

beta是啥?说白了就是股票对市场的敏感度。beta=1,市场涨1%它涨1%;beta=1.5,市场涨1%它涨1.5%。

我在2015年股灾前做过一个回测,发现那些高beta的股票在牛市里确实猛,但熊市里跌得也惨。嗯,这其实就暴露了CAPM的第一个问题——它只考虑市场这一个因子。

核心要点:CAPM告诉我们,只有系统性风险(市场风险)才被定价。非系统性风险可以通过分散化消除,所以市场不会给你额外补偿。

单因子回归分析:动手算beta

理论讲完了,来点实际的。怎么算beta?用线性回归。

我习惯用滚动窗口算beta,窗口长度取252个交易日(一年)。为什么?太短了噪声大,太长了反应迟钝。

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

def calculate_beta(stock_returns, market_returns, window=252):
    """
    滚动计算beta值
    stock_returns: 个股日收益率序列
    market_returns: 市场日收益率序列
    window: 滚动窗口长度
    """
    betas = pd.Series(index=stock_returns.index, dtype=float)
    
    for i in range(window, len(stock_returns)):
        y = stock_returns.iloc[i-window:i]
        x = market_returns.iloc[i-window:i]
        x = sm.add_constant(x)
        
        model = sm.OLS(y, x).fit()
        betas.iloc[i] = model.params.iloc[1]  # 斜率就是beta
    
    return betas

这段代码我用了好几年。有个坑要注意:一定要加截距项。不加的话,回归会强制过原点,算出来的beta会偏。

避坑指南:我曾经犯过一个低级错误——用日收益率算beta,但忘了做对数收益率转换。结果beta值全偏了,回测曲线倒是漂亮,实盘一跑就露馅。记住:收益率用对数收益率,别用简单收益率。

因子收益与因子暴露:两个容易搞混的概念

很多新手分不清因子收益和因子暴露。我当年也迷糊过一阵子。

因子暴露:就是你在这个因子上的"敞口"。比如beta=1.2,这就是你对市场因子的暴露。

因子收益:是这个因子本身赚了多少钱。比如这个月市场涨了3%,那市场因子的收益就是3%。

你想想看,一只股票的收益 = 因子暴露 × 因子收益 + 残差。就这么简单。

概念 含义 例子
因子暴露 你对因子的敏感度 beta=1.2,市场涨1%你涨1.2%
因子收益 因子本身的收益率 市场因子本月收益+3%
残差 因子解释不了的部分 个股特有的alpha或噪声

实战技巧:我习惯把因子暴露叫做"因子载荷",听起来更专业。但在跟基金经理汇报时,我会说"敞口"——他们听得懂。

单因子模型的局限:为什么我们需要多因子

CAPM被骂了几十年,不是没道理的。我拿A股数据跑过,单靠市场因子,R²通常只有20%-30%。也就是说,70%以上的收益波动,CAPM解释不了。

举个具体的例子:2017年A股的白马股行情,茅台涨了100%多,但同期市场只涨了6%。按CAPM算,茅台的alpha高得离谱。但这是真的alpha吗?不是。这是"价值因子"和"质量因子"在起作用。

所以后来才有了Fama-French三因子模型,再后来发展到五因子、甚至更多。说白了,就是给CAPM打补丁。

我的观点:CAPM不是没用,而是不够用。它就像一把螺丝刀——拧螺丝挺好,但你要拆发动机,光靠它就不行了。单因子模型的价值在于:它教会了我们"因子"这个思维方式。有了这个基础,后面学多因子体系就顺了。

本章知识体系

下面这张图是我自己画的,把单因子模型的核心逻辑串起来了:

单因子模型核心逻辑 CAPM模型 E(Ri) = Rf + β×[E(Rm)-Rf] 单因子回归 OLS估计beta值 收益分解 暴露 × 收益 因子暴露 (β) 对市场风险的敏感度 因子收益 (Rm-Rf) 市场风险溢价 残差 (ε) 个股特有收益 单因子模型:用市场因子解释个股收益,R²通常只有20-30% 局限:无法解释价值、动量等异象 → 需要多因子体系

这张图把单因子模型的三个核心环节串起来了:从CAPM理论出发,用回归分析算beta,最后把收益拆成因子部分和残差部分。我每次给新人培训都先画这张图,效果不错。

一个小建议:刚开始做因子研究时,别急着上多因子。先把单因子模型跑熟,理解清楚"暴露"和"收益"的关系。我见过太多人一上来就搞十几个因子,结果哪个都没搞明白。

好了,单因子模型就聊到这儿。记住:CAPM是起点,不是终点。它教会我们的"因子思维",才是真正值钱的东西。


公众号:蓝海资料掘金营,微信deep3321