3. 单因子模型:CAPM模型回顾、单因子回归、Beta的计算与解释

好,咱们今天聊聊单因子模型。说白了,这是整个量化风险分析的起点。你想想看,市场上几千只股票,涨跌原因千奇百怪,但有没有一个最核心的驱动力?

我个人习惯把单因子模型看作是「用一把尺子量所有股票」。这把尺子就是市场本身。CAPM(资本资产定价模型)就是这把尺子的理论基石。

3.1 CAPM模型回顾:那个经典的公式

CAPM 长这样:

E(Ri) = Rf + βi * (E(Rm) - Rf)

解释一下:

  • E(Ri):股票 i 的预期收益率
  • Rf:无风险利率(比如国债收益率)
  • βi:股票 i 的贝塔系数
  • E(Rm) - Rf:市场风险溢价

这个公式想表达什么?股票的预期收益,只跟它承担的市场风险有关。其他乱七八糟的风险,理论上可以通过分散化消除掉。

核心观点:CAPM 告诉我们,你赚的每一分钱,本质上都是在为「市场波动」买单。如果你承担了比市场更大的波动(β > 1),你就应该获得更高的预期回报。

我在项目中遇到过不少新手,上来就问「这个股票α很高,是不是很牛?」。嗯,这里要注意:α 是超额收益,但 CAPM 假设市场是有效的,长期来看 α 应该趋近于零。如果你发现某只股票 α 长期显著为正,要么是你模型用错了,要么是市场存在套利机会——但后者越来越难找了。

3.2 单因子回归:把理论变成实操

理论讲完了,怎么算 Beta?靠回归。

我们把 CAPM 改写成回归方程:

Ri - Rf = α + β * (Rm - Rf) + ε

这里:

  • Ri - Rf:股票的超额收益(因变量)
  • Rm - Rf:市场的超额收益(自变量)
  • β:回归系数,就是我们想要的 Beta
  • α:截距项,代表超额收益
  • ε:残差,模型没解释的部分

说白了,就是用历史数据跑一条直线,看看股票跟着市场涨跌的「幅度」有多大。

实操建议:我个人习惯用过去 3 年的日收益率数据做回归。太短了噪音大,太长了公司基本面可能都变了。当然,如果你做高频策略,用月频数据也行——但记得调整自由度。

下面给一段 Python 代码,用 statsmodels 跑单因子回归:

import pandas as pd
import statsmodels.api as sm

# 假设 df 包含三列:'stock_ret', 'market_ret', 'rf'
df['stock_excess'] = df['stock_ret'] - df['rf']
df['market_excess'] = df['market_ret'] - df['rf']

# 添加截距项
X = sm.add_constant(df['market_excess'])
y = df['stock_excess']

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

# 提取 Beta
beta = model.params['market_excess']
alpha = model.params['const']

跑完回归,你会看到类似这样的输出:

变量 系数 标准误 t值 P值
const (α) 0.0002 0.0001 1.85 0.064
market_excess (β) 1.15 0.03 38.33 0.000

看到没?β = 1.15,说明这只股票比市场波动大 15%。P 值接近 0,说明这个 Beta 是统计显著的。

3.3 Beta 的计算与解释:别只看数字

Beta 的计算公式其实很简单:

β = Cov(Ri, Rm) / Var(Rm)

就是股票收益与市场收益的协方差,除以市场收益的方差。但解释起来,门道就多了。

Beta 的常见取值范围:

  • β = 1:跟市场同涨同跌
  • β > 1:进攻型股票(比如科技股),市场涨 1%,它可能涨 1.5%
  • 0 < β < 1:防御型股票(比如公用事业),市场跌 1%,它可能只跌 0.5%
  • β = 0:跟市场无关(比如现金)
  • β < 0:反向指标(比如黄金在某些时期)

避坑指南:我曾经犯过一个错误——直接用日频数据算 Beta,然后拿去做周频的风险归因。结果发现风险预算怎么都对不上。后来才意识到:Beta 的估计频率必须与你的持仓周期匹配。做日频交易就用日 Beta,做月频调仓就用月 Beta。混着用,结果就是一团浆糊。

另外,Beta 还有一个重要性质:组合的 Beta 等于个股 Beta 的加权平均。权重就是各股票的市值占比。这个性质在做风险归因时特别有用——你可以把组合的总风险拆解到每只股票上。

3.4 单因子模型的知识体系

下面这张图,是我自己画的一个结构图,帮你理清本章的逻辑:

单因子模型知识体系 CAPM 理论框架 E(Ri) = Rf + β × (E(Rm) - Rf) 单因子回归:从理论到实操 Ri - Rf = α + β × (Rm - Rf) + ε OLS 回归 → 估计 β 和 α Beta 的计算与解释 计算公式 β = Cov / Var 数值含义 β>1 进攻型, β<1 防御型 组合性质 组合β = 加权平均

这张图把本章的三个核心模块串起来了:CAPM 理论 → 回归方法 → Beta 解释。你顺着箭头看,就能理解整个单因子模型的逻辑链条。

3.5 几个容易踩的坑

最后,分享几个我实际工作中踩过的坑:

  1. 幸存者偏差:做回归时,别只选现在还活着的股票。那些退市的、被并购的,历史数据也得包含进去。否则你的 Beta 估计会偏乐观。
  2. 频率不匹配:前面说过了,日频 Beta 和月频 Beta 不是一回事。做风险归因时,务必统一频率。
  3. 结构性变化:一只股票 5 年前的 Beta 是 0.8,现在可能变成 1.5。公司业务变了,Beta 也会变。我一般只用最近 2-3 年的数据。
  4. 不要迷信 R²:单因子模型的 R² 通常不高(0.2-0.4 很正常)。这不代表模型没用,只是说明市场因子只能解释一部分收益。剩下的,交给多因子模型去处理。

一个小技巧:如果你用 Python 做滚动 Beta 估计,可以用 df.rolling(window=252).cov() 配合 df.rolling(window=252).var() 来计算。这样每天都能得到一个 Beta,方便你观察 Beta 的稳定性。

好了,单因子模型就聊到这儿。说白了,它就是一把最基础的尺子。虽然简单,但很多多因子模型的核心思想,都是从这儿衍生出来的。你把这个吃透了,后面学 Fama-French 三因子、五因子,就会轻松很多。


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