← 返回模块
4.4.1.3beta 可读 · 未来付费校验通过内容版本 2026-05-28

CAPM 与均衡定价含义

4.4.1 · 均值方差与投资组合理论 · 量化全流程

某上海私募的多空策略台,周一早会上分析师汇报:某只白酒龙头跑赢沪深300 5.2 个百分点,「显著的 alpha」。基金经理把数据敲到 Bloomberg,跑了一遍 CAPM 回归,Jensen alpha 的 t 值 1.3——「不,这只是 beta 的 1.4 倍,加上沪深300 这一年涨了 4%,你看到的 5.2% 全在 beta 解释范围内,没有 alpha 可言」。这套对话能在十秒内结束,正是因为 CAPM 给所有人一个共同的语言:​​任何资产的预期超额收益,在均衡下只是市场 beta 的线性函数​​。

L1 给了单期 MV 问题;L2 给了切线组合和一基金分离定理——所有投资者都持有同一个风险方向。这堂课把这两件事推到均衡:​​把切线组合换成市场组合,SML 就掉出来​​。然后用一个面板回归示范怎么把这件事检验到一只具体的 A 股上,最后摆出 Roll 1977 的批判和 Fama-French 1992 的实证拒绝——它们把这堂课直接桥接到 4.3.1 的多因子模型。

术语对齐表

本课新增的核心术语,与 data/glossaries/quant-glossary.yaml 标准译名一致:​​贝塔​​(beta,资产对市场组合的回归斜率)、​​因子模型​​(factor model,资产收益按公共因子暴露加特异噪声分解)、​​普通最小二乘​​(ordinary least squares, OLS,本课用以估计 Jensen alpha 与 beta)、​​均值方差优化​​(mean-variance optimization, MVO)、​​组合优化​​(portfolio optimization)、​​夏普比率​​(Sharpe ratio)、​​协方差矩阵​​(covariance matrix)。后续散文按这些译名书写。

聚合论证:从一基金分离到市场组合

L2 的一基金分离结论:每个投资者 kk 都持有 wk=ckwtan+(1ck)cashw_k = c_k w_{\text{tan}} + (1 - c_k) \cdot \text{cash},其中 ck=(1/γk)(1Σ1(μrf1))c_k = (1/\gamma_k) (\mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1}))。把所有投资者的风险资产持有按财富 WkW_k 加权求和:kWkckwtan\sum_k W_k c_k w_{\text{tan}}。在零净供给(zero-net-supply)均衡下,这个聚合必须等于​​市值加权的市场组合​ wMw_M(把所有风险资产按市值排,归一化到和为 1)。

关键:wtanw_{\text{tan}} 是所有投资者共享的同一个方向,所以 wM=wtanw_M = w_{\text{tan}}——市场组合就是切线组合。

三条承重假设。下面是 ​Inline-code listing​ 中按固定顺序的三条:

homogeneous_expectations:        every investor agrees on mu and Sigma
frictionless_markets:            no transaction costs, no taxes, no short-sale restrictions
unrestricted_rf_borrowing_lending: every investor can lever up or hold cash at the same rate r_f

规则:all three are violated in practice — CAPM is a normative benchmark, not a literal empirical claim。CN 语境下三条都更弱:同质预期是空想(零售投资者占成交量约 75%,与机构看法不一);摩擦明显——印花税 0.05% 卖方单边、10%/20% 涨跌停、融券对零售基本封闭;借贷利率也分散——零售融资利率与机构 SHIBOR 拉开数百 bp。所以 CAPM 在国内是一个​​基准​​——拿来跟实际收益对照,看 alpha 是否显著——而不是字面上的实证模型。

推导证券市场线

wM=wtan=(Σ1(μrf1))/(1Σ1(μrf1))w_M = w_{\text{tan}} = (\Sigma^{-1} (\mu - r_f \mathbf{1})) / (\mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1})) 两边乘以 (1Σ1(μrf1))Σ(\mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1})) \Sigma(一个正标量乘矩阵),得到 ΣwM\Sigma w_M(μrf1)(\mu - r_f \mathbf{1}) 成比例。把比例常数命名为 γM=1Σ1(μrf1)\gamma_M = \mathbf{1}' \Sigma^{-1} (\mu - r_f \mathbf{1})(均衡下的市场聚合风险厌恶),整理得

μrf1=γMΣwM.\mu - r_f \mathbf{1} = \gamma_M \Sigma w_M.

下面是 ​Inline-code listing​ 中按固定顺序的六步把 SML 拆出来:

aggregation:           tangency w_tan = w_M (market portfolio) under one-fund separation + market clearing
first_order_condition: mu - r_f * ones = gamma_M * Sigma * w_M
inner_product_e_i:     mu_i - r_f = gamma_M * Cov(r_i, r_M)
inner_product_w_M:     mu_M - r_f = gamma_M * Var(r_M)
divide:                (mu_i - r_f) / (mu_M - r_f) = Cov(r_i, r_M) / Var(r_M) = beta_i
SML:                   E[r_i] - r_f = beta_i * (E[r_M] - r_f)

取与单位向量 eie_i(资产 ii)的内积:μirf=γM(ΣwM)i=γMCov(ri,rM)\mu_i - r_f = \gamma_M (\Sigma w_M)_i = \gamma_M \mathrm{Cov}(r_i, r_M)。取与 wMw_M 自身的内积:μMrf=γMwMΣwM=γMVar(rM)\mu_M - r_f = \gamma_M w_M' \Sigma w_M = \gamma_M \mathrm{Var}(r_M)。两式相除:

μirfμMrf=Cov(ri,rM)Var(rM)=βi.\frac{\mu_i - r_f}{\mu_M - r_f} = \frac{\mathrm{Cov}(r_i, r_M)}{\mathrm{Var}(r_M)} = \beta_i.

整理得到证券市场线:

E[ri]rf=βi(E[rM]rf).E[r_i] - r_f = \beta_i (E[r_M] - r_f).

规则:every asset's expected excess return is a linear function of its market beta only; idiosyncratic risk earns zero premium

实务读法:截距是零(均衡下没有资产特异 alpha);斜率是 E[rM]rfE[r_M] - r_f——市场风险溢价(equity risk premium),一单位市场风险的价格。任何偏离 SML 的资产都意味着 abnormal return:​​在线上方​​为正 alpha(被低估,便宜);​​在线下方​​为负 alpha(被高估,昂贵)。

总风险分解:系统性 vs 非系统性

按 CAPM 的回归形式 ri,t=rf,t+βi(rM,trf,t)+ϵi,tr_{i,t} = r_{f,t} + \beta_i (r_{M,t} - r_{f,t}) + \epsilon_{i,t},​​普通最小二乘​​(OLS)的正交条件保证 Cov(rM,ϵi)=0\mathrm{Cov}(r_M, \epsilon_i) = 0。取方差,系统性与非系统性份额清晰分离。下面是 ​Inline-code listing​ 中按固定顺序的六条风险分解:

regression_form:    r_i_t = r_f_t + beta_i * (r_M_t - r_f_t) + epsilon_i_t with Cov(r_M, epsilon_i) = 0
variance_decomp:    Var(r_i) = beta_i^2 * Var(r_M) + Var(epsilon_i)
systematic_share:   beta_i^2 * Var(r_M)
idiosyncratic_share: Var(epsilon_i)
R_squared:          R^2 = beta_i^2 * Var(r_M) / Var(r_i)
pricing_rule:       only the systematic share is priced under CAPM; idiosyncratic risk earns zero premium but contributes to total variance

规则:diversification is a free lunch — holding the market replaces unrewarded idiosyncratic variance with paid systematic variance

CAPM 只给系统性份额 βi2Var(rM)\beta_i^2 \mathrm{Var}(r_M) 定价——预期收益就是 βi(E[rM]rf)\beta_i (E[r_M] - r_f),与 Var(ϵi)\mathrm{Var}(\epsilon_i) 无关。但非系统性方差 Var(ϵi)\mathrm{Var}(\epsilon_i) 仍然进入​​总​​组合方差,所以一个不分散的组合赚 SML 期望收益、却背更多无报酬的方差,夏普低于市场 SM=(E[rM]rf)/σMS_M = (E[r_M] - r_f) / \sigma_M。直观:持 5 只股票而不是 500 只,就是用同样的预期收益换 Var(ϵi)/5\mathrm{Var}(\epsilon_i)/5 的无报酬方差;​​分散在 CAPM 下是免费午餐​​(free lunch)。

R2=βi2Var(rM)/Var(ri)R^2 = \beta_i^2 \mathrm{Var}(r_M) / \mathrm{Var}(r_i) 是资产 ii 的方差被市场解释的份额。CN 大盘 A 股典型 R2[0.4,0.7]R^2 \in [0.4, 0.7],因为 A 股牛熊切换时整个市场的同向共振非常强(2015 年的熔断窗口、2020 年的疫情冲击都是教科书例子);US 大盘 R2[0.2,0.5]R^2 \in [0.2, 0.5],行业 / 因子结构更丰富。这一差异对分散收益有直接影响——CN 投资者从行业分散得到的边际收益更小,从加久期 / 跨境 / 跨资产得到的边际收益更大。

规范 CAPM 时间序列检验:Inline-code listing 中的七步

regression:    r_i_t - r_f_t = alpha_i + beta_i * (r_M_t - r_f_t) + epsilon_i_t
OLS_fit:       OLS_fit = OLS(r_i - r_f, sm.add_constant(r_M - r_f)).fit(cov_type='HAC', cov_kwds={'maxlags': 6})
alpha:         alpha = OLS_fit.params[0]    # Jensen's alpha, 月度超额收益单位;乘 12 年化
t_stat_alpha:  t_stat_alpha = OLS_fit.tvalues[0]    # Newey-West HAC at lag 6
beta:          beta = OLS_fit.params[1]    # 市场 beta,OLS 斜率
R_squared:     R_squared = OLS_fit.rsquared    # 方差中系统性份额
pass_iff:      |t_stat_alpha| <= 2    # CAPM not rejected for this asset

规则:CAPM has no asset-specific alpha at equilibrium — alpha is the excess return not explained by the market beta

实现(下面的 Fenced 代码块给出规范签名,用 statsmodels OLS + Newey-West HAC):

import pandas as pd
import statsmodels.api as sm

def capm_test(r_i: pd.Series, r_M: pd.Series, r_f: pd.Series, hac_lag: int = 6) -> dict:
    # 把三个 Series 按日期索引对齐
    df = pd.concat([r_i, r_M, r_f], axis=1).dropna()
    df.columns = ["r_i", "r_M", "r_f"]
    # 算超额收益
    r_i_excess = df["r_i"] - df["r_f"]
    r_M_excess = df["r_M"] - df["r_f"]
    # 在常数 + 市场超额收益上 OLS;HAC SE 取 maxlags=6
    X = sm.add_constant(r_M_excess)
    fit = sm.OLS(r_i_excess, X).fit(cov_type="HAC", cov_kwds={"maxlags": hac_lag})
    return {
        "alpha": float(fit.params.iloc[0]),
        "alpha_annualised": float(fit.params.iloc[0] * 12),
        "alpha_t_stat": float(fit.tvalues.iloc[0]),
        "alpha_p_value": float(fit.pvalues.iloc[0]),
        "beta": float(fit.params.iloc[1]),
        "beta_t_stat": float(fit.tvalues.iloc[1]),
        "r_squared": float(fit.rsquared),
        "n_obs": int(fit.nobs),
    }

CAPM 时间序列检验的工作流可以总结成以下编号步骤:

  1. rir_irMr_Mrfr_f 三个 pandas Series 按日期对齐,得到等长样本。
  2. 计算超额收益 r_i_excess = r_i - r_fr_M_excess = r_M - r_f
  3. statsmodels.api.OLSr_i_excess 回归到 sm.add_constant(r_M_excess) 上,启用 cov_type='HAC'cov_kwds={'maxlags': 6} 的 Newey-West HAC 标准误。
  4. 读取截距(Jensen's alpha,月度);乘 12 得到年化。
  5. 读取 alpha 的 t 值与 p 值;|t| > 2 视为对该资产的 CAPM 拒绝。
  6. 读取斜率系数(市场 beta)及其 t 值;读取 R2R^2 作为系统性份额。
  7. 计算总方差分解 Var(ri)=β2Var(rM)+Var(ϵi)\mathrm{Var}(r_i) = \beta^2 \mathrm{Var}(r_M) + \mathrm{Var}(\epsilon_i),核对 R2=β2Var(rM)/Var(ri)R^2 = \beta^2 \mathrm{Var}(r_M) / \mathrm{Var}(r_i) 与 OLS 报告一致。

实务上每只单股都会在有限样本上给出非零 alpha——CAPM 的真实威力在 ​横截面排序后的多空组合​​(long-short portfolios sorted on a candidate anomaly characteristic)上才显现。这一方法论是 4.3.1 L1 的入口。

工作示例:10 只 A 股龙头

10 只沪深300 行业龙头:贵州茅台(600519,白酒)、平安银行(000001,银行)、宁德时代(300750,新能源电池)、比亚迪(002594,新能源车)、招商银行(600036,银行)、中国平安(601318,保险)、美的集团(000333,家电)、恒瑞医药(600276,医药)、伊利股份(600887,食品饮料)、隆基绿能(601012,光伏)。市场代理:沪深300 指数(可用 510300 ETF 复制)。无风险代理:1 年国债 yield 除以 12 得月度。

实务提醒:沪深300 是 CN 规范的市场代理,但只覆盖大盘——中证500 / 中证1000 在外;Roll 批判敏感的做法是改用​​中证全指​​(CSI All Share Index)作为更广义的全 A 股代理,虽然这仍只是「公开上市股权」子集,不是 Roll 心目中包含房地产、人力资本、私募股权的真正市场组合。

Formula Explorer

beta * (E_r_M - r_f)

Roll 批判与到多因子模型的桥

Roll(1977,JFE,《A critique of the asset pricing theory's tests》)指出 CAPM ​本质上不可检验​​:它的推导要求 wMw_M 是​​真正​​的市场组合——所有财富(股权、债券、房地产、私募股权、人力资本、外国资产,甚至耐用消费品)。实证上能拿到的代理(国内常见的沪深300、中证全指等)最好情况也只是「公开上市 A 股股权」子集。如果​​代理本身​​不在有效前沿上,任何检验都会拒绝 CAPM,​​即使​ CAPM 对真正的市场组合成立。Stambaugh(1982)的扩展确认 CAPM 拒绝对代理选择高度敏感。

实证文献中触发多因子扩展的拒绝:​​规模效应​​(size effect,Banz 1981——小盘股回报超 CAPM 预测);​​价值效应​​(value effect,Stattman 1980、Rosenberg-Reid-Lanstein 1985、Fama-French 1992——高 B/M 股票回报超 CAPM 预测);​​动量效应​​(momentum,Jegadeesh-Titman 1993);​​盈利能力 / 投资效应​​(Novy-Marx 2013、Cooper-Gulen-Schill 2008)。Fama-French 3 因子(1993)、Carhart 4 因子(1997)、Fama-French 5 因子(2015)、Hou-Xue-Zhang q 因子(2015)就是为捕捉这些异象提出的扩展。

桥:4.3.1 L1 走 CAPM → FF3 → Carhart → FF5 → q 因子的全程。本课提供 CAPM 的均衡推导,并停在「触发多因子文献的拒绝」这一节点。

练习

Exercise

给定 10 只大盘股 2018-01 至 2023-12 月度收益(cn:600519 / 000001 / 300750 / 002594 / 600036 / 601318 / 000333 / 600276 / 600887 / 601012)、市场代理月度收益(cn:510300 沪深300 ETF)、月度无风险利率 r_f(cn:1 年国债 yield / 12)。

(i) 对每只股票 iicapm_test(r_i, r_M, r_f, hac_lag=6);收集 DataFrame capm_results,列为 (ticker, alpha, alpha_annualised, alpha_t_stat, beta, beta_t_stat, r_squared)。

(ii) 画证券市场线:x 轴 beta,y 轴 mean(r_i - r_f)(每只股票的实证超额收益);叠加理论 SML mu_excess_SML(beta) = beta * mean(r_M - r_f) 作为过原点、斜率为 mean(r_M - r_f) 的虚线。

(iii) 找出经济上 alpha 较大(|alpha_annualised| > 0.02,即年化 2%)且统计上显著(|alpha_t_stat| > 2)的股票——这些是对该资产的 CAPM 拒绝。

(iv) 计算每只股票的方差分解:var_systematic = beta**2 * var(r_M)var_idiosyncratic = var(r_i) - var_systematicr_squared_check = var_systematic / var(r_i);验证 r_squared_check 与 (i) 中 OLS 的 r_squared 数值一致。

(v) 用一句话评论 10 只股票的平均 r_squared:CN 中你应当看到 mean(r_squared) in [0.4, 0.7](高跨股共振);US 对照样本会看到 mean(r_squared) in [0.2, 0.5](更丰富的行业 / 因子结构);解释这对分散收益的实务含义。

提示
r_ir_Mr_f 三个 pandas Series 在共同的日期索引上对齐(pd.concat(..., axis=1).dropna())再喂给 capm_test,否则 OLS 会因为 NaN 或日期错位失败。
提示
(v) 的实务含义:CN 高 R^2 意味着行业内分散对降低组合方差贡献有限——加海外 / 加债券 / 加久期资产带来的边际分散收益相对更大。

CAPM 在国内实务里的三个使用面

CAPM 的均衡推导是干净的,但 PM 桌上的实际用法只有三个:

​第一​​,​​作为 alpha 检验的零模型​​。任何「我有信号」的声明,默认要先把市场 beta 这一层减掉——如果减完之后 alpha 的 t 值不显著,你这条信号还没站住。开头白酒例子就是这件事:5.2% 的超额收益经过 ​普通最小二乘​ + Newey-West HAC 拒绝不了零(t = 1.3),所以这条 alpha 不能成立。这种「先用 CAPM 做风险归因再谈 alpha」的做法,是任何严肃 ​组合优化​​均值方差优化​ 工作流的入口。

​第二​​,​​作为风险归因的最简单 因子模型​​。CAPM 是单因子模型 ri=αi+βirM+ϵir_i = \alpha_i + \beta_i r_M + \epsilon_i;Fama-French 3 因子和 5 因子是它的扩展。在国内,公募 / 私募的月度归因报告几乎一定包含「市场 beta」「市值 beta」「价值 beta」「动量 beta」四到五条,本质上是 CAPM 的多因子升级版——把 ​协方差矩阵​ 拆成 Σ=BΣFB+D\Sigma = B \Sigma_F B' + D 是 4.4.2 的事,但语言起点都在 L3 这条 βi=Cov(ri,rM)/Var(rM)\beta_i = \mathrm{Cov}(r_i, r_M) / \mathrm{Var}(r_M)

​第三​​,​​作为均衡先验​​——L4 的 Black-Litterman 模型把 CAPM 反推成一个隐含预期收益向量 π=γΣwmkt\pi = \gamma \Sigma w_{\text{mkt}},把它当贝叶斯先验,然后把投资者的观点(view)做后验更新。这条「均衡先验」用法是连接 L3 和 L4 的桥;在没有强观点时,Black-Litterman 的解就退化为市场组合本身,​​夏普比率​ 等于市场夏普——再一次回到 L2 的切线 = L3 的市场组合这条等式。

通向 L4 与 4.3.1

CAPM 给了均衡下的「理想 alpha = 0」基线;Fama-French 1992 等实证拒绝则提示真实世界里有规模、价值等被多 ​因子模型​ 捕捉的系统性回报模式——这条路上去是 4.3.1。但即使 CAPM 推导是干净的,L1–L3 都默认 μ\muΣ\Sigma ​已知​​——L4 揭开盖子:实证估计的 μ\mu 误差大、Σ\SigmaNN 接近 TT 时病态、无约束 ​均值方差优化​ 把噪声放大成天文般的极端权重;Ledoit-Wolf 收缩、Black-Litterman、resampled efficient frontier 就是修复这件事的工具箱。下一课走这条修复线。