第 7 章

因子投资实践

前六章回答"因子是什么、怎么检验",这一章回答"怎么把它变成一个可交易的组合"。业界的流水线分三段:收益模型预测谁会涨、风险模型估计组合会晃多厉害、组合优化在两者之间做权衡。在此之外,本章还讲清四件实务中绕不开的事:普通投资者的捷径 Smart Beta、诱人却极难的因子择时、看穿一只基金的风格分析与风险归因。

7.1收益率模型:从预测变量到 α

术语先行:"阿尔法因子"到底指什么

业界的量化研究员日常说"我挖了一个阿尔法因子",指的通常是一个能预测股票收益率的变量——比如账面市值比 BM、特质性波动率 IVOL。但对照本手册的统一视角 $\E[R_i^e]=\alpha_i+\boldsymbol{\beta}_i^{\top}\boldsymbol{\lambda}$(式 1.3),这个叫法有两处不严谨。

收益预测变量 return predictor

任何一个能把"未来会涨的股票"和"未来会跌的股票"区分开的指标,不管它在学术上算因子还是算异象。

第一处不严谨:在学术语境里,"因子"和"α"指的都是投资组合(价值因子组合、特质性波动率异象组合),而不是构建它们的变量 BM 和 IVOL。业界口中的"阿尔法因子"却是指变量本身,两套话语体系互相错位。

第二处不严谨:预测变量既可能对应式 (1.3) 里的 $\boldsymbol{\beta}^{\top}\boldsymbol{\lambda}$ 部分(BM——它构建的价值因子是定价因子),也可能对应 $\alpha$ 部分(IVOL——特质性波动率异象无法被定价模型解释)。"阿尔法因子"这个词强调 α,却把 BM 这类同样好用的因子变量排除在字面之外,与业界的实际做法不符——业界并不在乎变量的学术身份,只在乎它能不能选出赚钱的股票。

为避免混乱,本章统一用预测变量称呼收益模型的研究对象。与之相对,那些能解释收益波动、却选不出超额收益的变量(如行业、市值),业界称为"风险因子"变量——收益模型通常会先把预测变量对它们做正交化(回归取残差),得到行业与市值中性的预测变量。

误区

"阿尔法因子"与"风险因子"不是两类本质不同的东西,只是同一个变量在两个用途上的分工:能带来超额收益的进收益模型,只解释波动不带来收益的进风险模型、或作为中性化的对象。同一个变量(比如市值)完全可能同时出现在两边——这正是 7.3 节"模型错位"问题的伏笔。

挑选预测变量:六个标准

预测变量不是越多越好。一个新变量能否进入收益模型,业界有一套大致公认的检验清单:

标准问的问题常用检验
逻辑性有没有风险补偿或错误定价层面的解释?没有故事的显著性默认按数据窥探处理对照 6.5 节的成因框架
持续性历史数据是否稳定支持预测力?IC 测试、组合排序、发表前后对比
信息增量与已有变量相比有没有新信息?变量相关性、条件双重排序、Fama–MacBeth 回归控制已有变量
稳健性换参数、换算法、换子样本后结论还在吗?参数扰动、不同构造方法、分区间检验
可投资性纸面收益能否落地?信息半衰期、换手率与交易成本、流动性与容量
普适性在其他市场、其他资产上还成立吗?跨国、跨资产检验(价值与动量是典范,Asness et al. 2013)
旁注

可投资性里最容易被忽视的是信息衰减(information horizon):变量的预测力随时间流逝而减弱,Grinold 和 Kahn 用"半衰期"(滞后 IC 降到原始 IC 一半所需的时间)度量它。高频量价类变量半衰期短,逼着你高换手才能吃到信号,交易成本随之吞掉收益;财务基本面类变量半衰期长、容量大。快信号未必是好信号。

IC:预测能力的标尺

信息系数 information coefficient, IC

这期的指标排名和下期的涨幅排名有多同步:完全同步是 1,完全反着来是 −1,日频下能稳定做到 0.02 就已经是好变量。

IC 是主动管理领域使用频率最高的评价指标。它逐期计算:取 $t$ 期所有股票的预测变量值,和 $t+1$ 期这些股票的实际收益率,在截面上算一个相关系数。每期得到一个数,最终看这串数的均值、波动和显著性。

式 (7.1) · 信息系数的定义
$$ \mathrm{IC}_t \;=\; \mathrm{corr}\big( z_{i,t},\; R_{i,t+1} \big) $$
$z_{i,t}$$t$ 期股票 $i$ 的预测变量取值(通常已标准化为 Z-Score,故用 $z$ 记)
$R_{i,t+1}$股票 $i$ 在下一期($t+1$ 期)的实际收益率
$\mathrm{corr}(\cdot)$对当期截面上全部股票计算的 Pearson 相关系数;若换成 Spearman 秩相关系数,得到的就是 Rank IC(秩信息系数),对变量分布不均匀、有极端值时更稳健
IC 度量的是"今天的排序里含有多少明天涨跌的信息"。金融数据信噪比极低,所以别期待 0.5 这种数字:日频 IC 稳定在 2% 就是优秀变量——微弱但确定的优势,靠大量下注复利放大。

单期 IC 噪声很大,评价一个变量要看 IC 序列的整体统计特征:

指标定义含义
IC 均值$\overline{\mathrm{IC}} = \frac{1}{T}\sum_t \mathrm{IC}_t$平均预测力的方向与大小
IC 标准差$\mathrm{std}(\mathrm{IC})$预测力的稳定程度
ICIR$\overline{\mathrm{IC}}\,/\,\mathrm{std}(\mathrm{IC})$单位波动的预测力,越大越"稳"
IC 的 t 值$t_{\mathrm{IC}} = \dfrac{\overline{\mathrm{IC}}}{\mathrm{std}(\mathrm{IC})/\sqrt{T}} = \mathrm{ICIR}\cdot\sqrt{T}$检验"平均 IC 是否显著异于零",防止把噪声当信号
$|\mathrm{IC}|>2\%$ 占比超过经验门槛的期数占比预测力出现的频率

主动管理基本定律:深度与广度

IC 只是"单次预测的准确度"。它如何转化为策略层面的业绩?Grinold(1989)给出了主动管理领域最著名的近似关系。

Grinold 主动管理基本定律 fundamental law of active management
$$ \mathrm{IR} \;\approx\; \mathrm{IC} \cdot \sqrt{\mathrm{BR}} $$
$\mathrm{IR}$信息比率(information ratio):策略相对基准的年化主动收益除以年化跟踪误差,衡量"每承担一单位主动风险赚到多少主动收益"。长期做到 0.5 已属优秀
$\mathrm{IC}$信息系数:每一次独立预测的平均准确度,代表策略的深度(skill)
$\mathrm{BR}$广度(breadth):每年相互独立的下注次数。覆盖的股票越多、调仓越频繁(且各次预测确实独立),BR 越大
这就是大数定律的投资版:把一个 51% 胜率的硬币抛得足够多次,总收益的确定性随 $\sqrt{n}$ 提升。同样的 IR 可以用"深"(少量高精度预测,如深度基本面研究)或者"广"(海量低精度预测,如量化多头)两条路达到。量化投资的商业模式,本质上就是用极大的 BR 弥补微小的 IC。

拖动下面两个滑杆感受二者的替代关系:IC 从 0.03 提到 0.06 与 BR 从 100 提到 400,对 IR 的贡献一样大。但要小心 BR 的"独立"二字——对 3000 只股票用同一个财务指标打分,有效独立下注数远小于 3000,因为同一期的判断高度相关。

图 7-1 | 主动管理基本定律:IR ≈ IC·√BR。曲线为当前 IC 下 IR 随广度 BR 的变化,竖线标出当前 BR 对应的 IR。(示意计算,非实盘数据)
误区

基本定律是上限的近似,不是保证。它假设各次预测独立、信号能被无摩擦地转化为持仓。现实中约束(不能卖空、行业中性)和交易成本都会造成"转化损失",Clarke 等人为此补了一个转移系数(transfer coefficient)$\mathrm{TC}\le 1$:$\mathrm{IR}\approx \mathrm{TC}\cdot\mathrm{IC}\cdot\sqrt{\mathrm{BR}}$。同样的信号,约束越重,落到净值上的越少。

从打分到收益率预测

有了一篮子预测变量,怎么合成对每只股票的收益预测?业界的主流流程是"标准化 → 加权打分 → 截面回归"。第一步,把量纲各异的变量统一成截面 Z-Score:

式 (7.3) · 预测变量的截面标准化
$$ z_{i,k} \;=\; \frac{x_{i,k} - \mu_k}{\sigma_k} $$
$x_{i,k}$股票 $i$ 在变量 $k$ 上的原始取值(已做去极值处理)
$\mu_k,\ \sigma_k$该变量在当期截面(股票池内全部股票)上的均值与标准差——注意是截面统计量,不是时序统计量
$z_{i,k}$标准化得分:截面均值为 0、标准差为 1,"高出平均几个标准差"
BM 是 0.8 还是对数市值是 25,彼此没法相加;换算成"在同龄人里排第几个标准差"之后,任何变量都在同一把尺子上了。
旁注

标准化之前要先处理截面上的异常值,常用三种办法:缩尾(winsorization,把两端各 p% 的极端值截到分位点)、三倍标准差法(距均值超 3σ 视为异常,但均值和 σ 本身会被极端值污染)、MAD 法(用中位数和绝对中位差 $\mathrm{MAD}=\mathrm{median}(|x_i - x_m|)$ 替代均值和标准差,正态下 $1\sigma\approx 1.4826\,\mathrm{MAD}$,对极端值最稳健)。业界实务中 MAD 法使用最广。

第二步,把 $K$ 个变量的得分按权重合成综合得分:

式 (7.4) · 多变量打分合成
$$ z_i \;=\; \sum_{k=1}^{K} w_k\, z_{i,k} $$
$z_{i,k}$股票 $i$ 在变量 $k$ 上的 Z-Score
$w_k$变量 $k$ 的权重,理论上应与其预测能力成正比
$z_i$综合得分。合成后截面均值仍为 0,但标准差一般小于 1(各变量不完全相关),需再做一次标准化
这是收益模型的"配方表"。实践中通常先在维度内合成(估值维度、盈利维度、质量维度各出一个分数),再跨维度合成——Asness 等人构建质量因子(盈利、成长、安全三个维度分层打分)用的就是这种层级法,能避免某个维度因为细分变量多而被变相加权。

权重 $w_k$ 怎么定?常见方案从简到繁:

加权方式公式思想与代价
等权$w_k = 1/K$不做任何预测的稳健基线,实证上出人意料地难被打败
IC 加权$w_k \propto \overline{\mathrm{IC}}_k$(滚动窗口)奖励近期预测力强的变量,本质是对变量做动量择时,牺牲稳健换弹性
ICIR 加权$w_k \propto \overline{\mathrm{IC}}_k / \mathrm{std}(\mathrm{IC}_k)$同时惩罚不稳定的变量,比纯 IC 加权更保守

无论选哪种,有两个稳健化技巧几乎总是值得做:一是收缩(shrinkage),把估计出的权重向等权拉回一部分,$w_k \leftarrow (1-\delta)\,\hat w_k + \delta/K$,承认"历史 IC 估不准"这个事实;二是用 EWMA(指数加权移动平均)代替简单平均计算 $\overline{\mathrm{IC}}_k$,让近期观测权重更高、又不至于被最近一两期噪声牵着走。偏离等权本质上已是在做因子择时(7.5 节),下手要轻。

第三步,把综合得分转化为收益率预测。做一个逐期的一元截面回归:

式 (7.5) · 综合得分的截面回归
$$ R_{i,t} \;=\; c_t + b_t\, z_{i,t-1} + \varepsilon_{i,t}, \qquad i = 1,\dots,N $$
$R_{i,t}$股票 $i$ 在 $t$ 期的收益率(被解释变量)
$z_{i,t-1}$$t$ 期期初(即 $t-1$ 期末)已知的综合 Z-Score
$b_t$$t$ 期"每单位得分换来的收益",即得分的当期回报率
$c_t$截距:当期截面平均收益
$\varepsilon_{i,t}$残差:得分解释不了的个股波动
预测下一期时,取最近 $T$ 期(如 12、24、36 个月)估计出的 $\hat b_t,\hat c_t$ 的平均值当作 $t+1$ 期的参数,代入最新得分即可:$\hat R_{i,t+1} = \bar{c} + \bar{b}\, z_{i,t}$。也可以直接用最近 $T$ 期数据做面板回归得到系数。这套流程正是 Fama–MacBeth 回归(2.2 节)在业界的日常化。

把式 (7.5) 两边同时减去基准收益率,可以推出主动管理中著名的α 预测经验法则

式 (7.17) · Grinold 的 α 三要素法则
$$ \hat{\alpha}_{i,t} \;=\; \mathrm{IC} \times \sigma_{\alpha,t} \times z_{i,t} $$
$\hat{\alpha}_{i,t}$对股票 $i$ 超额收益(相对基准)的预测
$\mathrm{IC}$得分与超额收益的截面相关系数——信号的质量
$\sigma_{\alpha,t}$超额收益的截面波动率——市场给出的机会大小:股票间分化越大,同样的信号越值钱
$z_{i,t}$股票 $i$ 的标准化得分——它在信号里的位置
预期超额收益 = 信号质量 × 机会大小 × 信号强度。推导只用了"$z$ 是标准差为 1 的 Z-Score"和相关系数的定义,却把收益预测的三个来源拆得干干净净:模型好(IC)、行情散(σ)、票选对(z),缺一不可。
要点
  • 业界"阿尔法因子" = 收益预测变量,既包括异象变量也包括因子变量;本章统一称预测变量。
  • 选变量六关:逻辑、持续、增量、稳健、可投资、普适;没有逻辑的显著性按运气处理。
  • IC 是逐期截面相关系数;评价看 $\overline{\mathrm{IC}}$、ICIR 与 $t_{\mathrm{IC}}=\mathrm{ICIR}\sqrt{T}$。
  • 基本定律 $\mathrm{IR}\approx\mathrm{IC}\sqrt{\mathrm{BR}}$:业绩 = 深度 × 广度的平方根,量化的路线是以广补深。
  • 打分合成:截面标准化 → (层级)加权 → 截面回归;权重从等权出发,动加权时记得收缩。

7.2风险模型:以 Barra 为例

多因子模型的另一半用途是估计风险。第 1 章的式 (1.6) 已经给出核心思想——用因子结构给协方差矩阵降维:

式 (7.18) · 协方差矩阵的因子结构(复述式 1.6)
$$ \boldsymbol{\Sigma} \;=\; \boldsymbol{X}\, \boldsymbol{\Sigma}_f\, \boldsymbol{X}^{\top} + \boldsymbol{\Sigma}_{u} $$
$\boldsymbol{\Sigma}$$N$ 只股票收益率的协方差矩阵——组合风险控制的最终目标
$\boldsymbol{X}$$N\times K$ 因子暴露矩阵(原书沿用 $\boldsymbol{\beta}$ 记号;本节用 $\boldsymbol{X}$ 是为了强调它在 Barra 框架下是已知的公司特征,不是待估的回归系数)
$\boldsymbol{\Sigma}_f$$K$ 个因子收益率的协方差矩阵,$K \ll N$
$\boldsymbol{\Sigma}_u$特质性收益率的协方差矩阵;假设特质收益相互独立,它是对角阵
把估计 $N^2/2$ 个参数的问题压缩成估计 $K^2/2 + N$ 个。要让这个等式可用,需要三样原料:暴露 $\boldsymbol{X}$、因子协方差 $\boldsymbol{\Sigma}_f$、特质方差 $\boldsymbol{\Sigma}_u$——本节讲 Barra 如何生产它们。

专门为这个目的构建的多因子模型被称为风险模型,其中最著名的是 Barra(现属 MSCI)在各国市场落地的系列模型。下面以其中国 A 股模型 CNE5 为例。

截面模型:r = Xf + u

式 (7.19) · Barra 截面多因子模型
$$ R^e_{i,t} \;=\; f_{C,t} + \sum_{p=1}^{P} X_{i,I_p}\, f_{I_p,t} + \sum_{q=1}^{Q} X_{i,S_q}\, f_{S_q,t} + u_{i,t} $$
$R^e_{i,t}$股票 $i$ 在 $t$ 期相对无风险利率的超额收益(已知数据)
$f_{C,t}$国家因子(country factor)在 $t$ 期的收益率;所有股票对它的暴露都是 1,它在截面回归里扮演截距的角色
$X_{i,I_p}$股票 $i$ 对行业因子 $I_p$ 的暴露:属于该行业取 1,否则取 0(假设每只股票只属于一个行业),$t$ 期期初已知
$X_{i,S_q}$股票 $i$ 对风格因子 $S_q$(规模、价值、动量、波动……)的暴露:直接取标准化后的公司特征值,$t$ 期期初已知
$f_{I_p,t},\ f_{S_q,t}$行业与风格因子在 $t$ 期的收益率——这是回归要估计的未知量
$u_{i,t}$特质性收益率:因子解释不掉的个股部分
每个 $t$ 期做一次截面回归:拿全市场几千只股票"这期涨了多少"对"期初长什么样"回归,回归系数就是这一期每种特征的市场价格。逐期重复,就得到因子收益率的时间序列。这本质上就是 Fama–MacBeth 回归的第二步。

这里有一个非常值得停下来体会的对偶关系。学术界的时序回归模型(如 Fama–French)与 Barra 模型用的是同一个线性框架,但已知与未知恰好互换:

学术时序回归模型Barra 截面回归模型
因子收益率已知:先用排序法构建因子组合,其收益率可直接观测待估:逐期截面回归的回归系数
因子暴露 β / X待估:个股收益对因子收益做时序回归的系数已知:直接取标准化的公司特征(BM 高暴露就高),逐期更新
回归方向沿时间轴(一只股票一条回归)沿截面(一期一条回归)
暴露的时效需要几年窗口估计,反应慢特征变了暴露立刻变,反应快——这正是风险模型需要的
误区

初学者最容易在这里翻车:同样写作"多因子模型",学术模型里 β 是回归输出,Barra 模型里暴露是回归输入。用公司特征当暴露隐含了一个假设——特征本身正比于股票对该风险的真实敏感度。这个假设未必严格成立,但它换来了暴露的即时性:公司股价跌了市值暴露马上变小,不必等 60 个月的回归窗口慢慢察觉。风险管理要的就是"快"。

风格暴露的标准化有一个特别的设计:去均值时用市值加权均值,即处理后满足

式 (7.21) · 风格暴露的市值加权中性化
$$ \sum_{i=1}^{N} s_i\, X_{i,S_q} \;=\; 0, \qquad \forall\, q $$
$s_i$股票 $i$ 的市值权重
$X_{i,S_q}$去均值后的风格暴露;随后再除以截面标准差完成标准化
这条约束是在宣告"市值加权的市场组合对任何风格都是中性的"。配合行业收益率约束(下文式 7.20),可以证明国家因子组合近似等于市值加权市场组合、国家因子收益率近似等于市场超额收益——所谓国家因子,就是给市场因子换了个名字放进截面回归当截距。

模型求解:WLS 与共线性约束

把式 (7.19) 写成矩阵形式 $\boldsymbol{r}^e = \boldsymbol{X}\boldsymbol{f} + \boldsymbol{u}$(省略时间下标)。求解时有两个技术问题。

问题一:异方差。小盘股的特质波动远大于大盘股,普通 OLS 会让小盘股的噪声主导回归。Barra 用加权最小二乘(weighted least squares,WLS),假设特质方差与市值平方根成反比,于是回归权重取市值平方根:

式 (7.25) · WLS 回归权重
$$ \min_{\boldsymbol{f}}\ (\boldsymbol{r}^e - \boldsymbol{X}\boldsymbol{f})^{\top} \boldsymbol{W}\, (\boldsymbol{r}^e - \boldsymbol{X}\boldsymbol{f}), \qquad \boldsymbol{W} = \mathrm{diag}(w_1,\dots,w_N),\quad w_i = \frac{\sqrt{s_i}}{\sum_{j}\sqrt{s_j}} $$
$\boldsymbol{W}$对角回归权重矩阵:噪声小(市值大)的观测话语权大
$w_i$股票 $i$ 的回归权重,与 $\sqrt{s_i}$ 成正比。统计上,WLS 的最优权重应与特质方差成反比,$\mathrm{var}(u_i)\propto 1/\sqrt{s_i}$ 的假设正好推出 $w_i \propto \sqrt{s_i}$
让每个观测按"可信度"发言:大盘股信息含量高、噪声小,多听一点;小盘股反之。用 $\sqrt{s_i}$ 而非 $s_i$,是在"全信大盘股"与"一视同仁"之间的折中,也避免了权重被少数巨头垄断。

问题二:共线性。国家因子暴露(全 1 向量)恰好等于所有行业哑变量之和,$\boldsymbol{X}$ 不满秩,回归无唯一解。Barra 的处理是对行业因子收益率施加一个约束:

式 (7.20) · 行业因子收益率的市值加权约束
$$ \sum_{p=1}^{P} s_{I_p}\, f_{I_p,t} \;=\; 0, \qquad s_{I_p} = \sum_{i \in I_p} s_i $$
$s_{I_p}$行业 $I_p$ 内全部股票的市值权重之和(行业的市值占比)
$f_{I_p,t}$行业因子 $I_p$ 在 $t$ 期的收益率
强制"全市场行业收益的市值加权平均为零",等于规定:市场整体的涨跌全部记在国家因子头上,行业因子只记录相对市场的超额部分。约束一方面消除了共线性,另一方面赋予行业因子清晰的业务含义。

纯因子投资组合

截面回归还有一份意外的赠品。先看无约束情形(暂不含国家因子,$\boldsymbol{X}$ 满秩)的 WLS 解:

纯因子组合权重矩阵 pure factor portfolios
$$ \hat{\boldsymbol{f}} \;=\; \boldsymbol{\Omega}\, \boldsymbol{r}^e, \qquad \boldsymbol{\Omega} \;=\; (\boldsymbol{X}^{\top}\boldsymbol{W}\boldsymbol{X})^{-1}\boldsymbol{X}^{\top}\boldsymbol{W} $$
$\boldsymbol{\Omega}$$K\times N$ 矩阵:第 $k$ 行是一个投资组合的股票权重,该组合的收益恰好等于因子 $k$ 的收益率估计值
$\hat{\boldsymbol{f}}$$K$ 维因子收益率估计:每个分量都是某个股票组合的加权收益
$\boldsymbol{W}$式 (7.25) 的回归权重矩阵。带国家因子与约束式 (7.20) 时,解变为 $\boldsymbol{\Omega}=\boldsymbol{C}(\boldsymbol{C}^{\top}\boldsymbol{X}^{\top}\boldsymbol{W}\boldsymbol{X}\boldsymbol{C})^{-1}\boldsymbol{C}^{\top}\boldsymbol{X}^{\top}\boldsymbol{W}$(式 7.27),其中 $\boldsymbol{C}$ 是把约束编码进来的 $K\times(K-1)$ 约束矩阵,性质类似
回归系数是观测值的线性组合,所以"估计因子收益率"与"构建一个组合去实现这个收益率"是同一件事。关键性质一行就能验证:$\boldsymbol{\Omega}\boldsymbol{X} = (\boldsymbol{X}^{\top}\boldsymbol{W}\boldsymbol{X})^{-1}\boldsymbol{X}^{\top}\boldsymbol{W}\boldsymbol{X} = \boldsymbol{I}$。也就是说第 $k$ 行组合对因子 $k$ 的暴露恰为 1、对其余全部 $K-1$ 个因子的暴露恰为 0——每个因子被"提纯"了。

"纯"字的经济含义值得展开。排序法构建的价值因子组合(做多高 BM、做空低 BM)不可避免地捎带上规模、行业等暴露——你以为在赌价值,其实同时在赌小盘。纯因子组合把这些搭便车的暴露全部对冲掉:赚到的每一分钱都只来自目标因子。逐类看它们长什么样:

纯因子组合结构业务含义
国家因子近似市值加权市场组合,纯多头;对所有行业有正暴露、对所有风格零暴露市场本身
行业因子 $I_p$资金中性:100% 做多该行业股票、100% 做空国家因子组合;风格暴露全为零该行业相对市场的超额收益
风格因子 $S_q$资金中性(权重和为 0):对自己暴露 1,对其他所有行业与风格暴露 0该风格"每单位暴露"的纯收益,是理论上最干净的因子收益率度量
旁注

纯因子组合的权重由回归数学决定,通常包含大量小额多空头寸,完全不考虑换手与流动性,因此不具可投资性。它的角色不是拿来交易,而是作为"计量仪器":给出无污染的因子收益率序列,供协方差估计(下一小节)和风险归因(7.7 节)使用。7.4 节的因子指数金字塔里它站在塔尖。

协方差矩阵的估计与四类修正

逐期回归给出因子收益率序列 $\{\hat{\boldsymbol{f}}_t\}$ 和特质收益率序列 $\{\hat{u}_{i,t}\}$,用滚动窗口的样本协方差就能拼出式 (7.18) 的全部原料。但大量实证显示,裸的样本估计在样本外系统性地不准。评估"准不准"的标尺是偏差统计量:

式 (7.34)–(7.35) · 偏差统计量:风险预测的测谎仪
$$ b_{i,t} \;=\; \frac{R_{i,t}}{\sigma_{i,t}}, \qquad B_i \;=\; \sqrt{\frac{1}{T-1}\sum_{t=1}^{T} \big(b_{i,t} - \bar{b}_i\big)^2} $$
$\sigma_{i,t}$模型在 $t$ 期期初给出的资产 $i$ 波动率预测(事前值)
$b_{i,t}$实现收益除以预测波动:若预测准确,这个标准化收益的标准差应为 1
$B_i$偏差统计量:$b_{i,t}$ 的样本标准差。$B_i > 1$ 说明模型低估了风险,$B_i < 1$ 说明高估;收益近似正态、$T$ 足够大时,95% 置信区间约为 $1 \pm \sqrt{2/T}$,落在区间外即判定预测有偏
把每期的实际涨跌用"你说好的波动"去除:如果模型诚实,除完之后应该是标准差为 1 的序列。Barra 的每一项修正,目标都是把某类组合的 $B$ 压回 1 附近。

四类修正各治一种病,先列总表再逐个说:

修正作用对象解决什么偏差
Newey–West 调整$\boldsymbol{\Sigma}_f$ 与特质方差收益率序列自相关导致的(低频)协方差估计偏差
特征因子调整$\boldsymbol{\Sigma}_f$低方差特征组合的风险被系统性低估——恰是优化器最爱押注的方向
波动率体制调整(VRA)整体波动水平波动率水平时变,滚动窗口反应滞后造成的整体高估/低估
特质风险:结构化模型 + 贝叶斯收缩$\boldsymbol{\Sigma}_u$个股样本波动的极端值在样本外不可持续、数据不足的股票估不出来

(1)Newey–West 调整。用日频数据估月频协方差时,若收益率存在自相关(流动性差的股票尤甚),简单缩放会算错真实的长周期方差。Newey–West 方法在样本协方差上叠加若干阶滞后自协方差(权重随滞后阶数递减),得到对自相关稳健的估计。它解决的是"时间加总"层面的偏差。

(2)特征因子调整(eigenfactor risk adjustment)。对样本因子协方差矩阵做特征分解 $\hat{\boldsymbol{\Sigma}}_f = \boldsymbol{U}\boldsymbol{D}\boldsymbol{U}^{\top}$(式 7.37):$\boldsymbol{U}$ 的每一列定义一个特征因子组合(把 $K$ 个因子当资产、按特征向量加权),$\boldsymbol{D}$ 对角线是它们的方差,且这些组合两两不相关。实证发现一个规律性偏差:方差越小的特征组合,偏差统计量越显著地大于 1——样本里"看起来最安全"的方向,恰恰是风险被低估最多的方向。这不是巧合而是数学必然:样本协方差的小特征值天然向下偏、大特征值天然向上偏(估计噪声的方向性效应)。这个偏差极其危险,因为组合优化器专门寻找低方差方向加杠杆。Barra 的解法是自助法(bootstrap):把 $\hat{\boldsymbol{\Sigma}}_f$ 当"真值"反复模拟生成同长度样本,测量"模拟样本估计 vs 已知真值"在每个特征方向上的系统性偏差,再用测得的偏差系数 $\nu(k)$(经验上还要按 $\nu_s(k)=a(\nu(k)-1)+1$、$a\in[1,2]$ 放大,补偿真实数据的厚尾与非平稳)把 $\boldsymbol{D}$ 的对角元素放大回去,最后用 $\boldsymbol{U}$ 反变换得到修正后的 $\tilde{\boldsymbol{\Sigma}}_f$(式 7.44)。

(3)波动率体制调整(volatility regime adjustment,VRA)。滚动窗口估计天然滞后:市场从平静切换到危机时,模型还在用平静期的数据说话,整体低估风险;危机结束后又长期高估。VRA 用截面版偏差统计量监控"当下全市场的实现波动 / 模型预测波动",把近期(指数加权)的系统性偏差提炼成一个乘性校正系数,直接缩放整套因子波动率。它修的不是结构,而是水平。

(4)特质风险的两步修正。特质方差要逐股估计,最容易出问题。其一,部分股票停牌多、上市短,时序数据根本不够——结构化模型(structural model)用"暴露 → 特质波动"的截面关系(拿数据充足的股票拟合特质波动对因子暴露的回归),给数据不足的股票一个模型化估计。其二,即使数据够,样本特质波动的极端值在样本外强烈均值回复:分档检验显示,样本波动最低档的股票 $B$ 显著大于 1(低估)、最高档显著小于 1(高估)。贝叶斯收缩把个股估计往同市值组的先验拉:

式 (7.48)–(7.49) · 特质波动率的贝叶斯收缩
$$ \hat{\sigma}^{\mathrm{sh}}_{i} \;=\; \eta_i\, \bar{\sigma}_{g(i)} + (1-\eta_i)\, \hat{\sigma}_i, \qquad \eta_i \;=\; \frac{q\,\big|\hat{\sigma}_i - \bar{\sigma}_{g(i)}\big|}{\Delta_{g(i)} + q\,\big|\hat{\sigma}_i - \bar{\sigma}_{g(i)}\big|} $$
$\hat{\sigma}_i$股票 $i$ 的样本特质波动率
$\bar{\sigma}_{g(i)}$先验:$i$ 所在市值档 $g$ 内全部股票特质波动率的市值加权平均
$\eta_i$收缩强度(0 到 1):个股估计偏离先验越远,越不信它,越往先验拉
$\Delta_{g(i)}$档内所有股票"样本值偏离先验"的标准差——平均偏离水平的度量
$q$经验系数,以最小化收缩后的偏差统计量为目标校准
和 Ledoit–Wolf 收缩、Black–Litterman 是同一族思想:样本告诉你的极端值,多半有一半是运气,向"同类的平均"回拉能换来样本外的准确。偏离越离谱,拉得越狠。
要点
  • Barra 模型 $\boldsymbol{r}^e=\boldsymbol{X}\boldsymbol{f}+\boldsymbol{u}$:暴露 = 已知公司特征,因子收益 = 逐期截面 WLS 回归系数——与学术时序模型正好对偶。
  • 国家因子是截距、近似市场组合;行业与国家共线,靠约束 $\sum_p s_{I_p} f_{I_p}=0$ 定解。
  • $\boldsymbol{\Omega}=(\boldsymbol{X}^{\top}\boldsymbol{W}\boldsymbol{X})^{-1}\boldsymbol{X}^{\top}\boldsymbol{W}$ 的每一行是纯因子组合:目标因子暴露 1、其余为 0,是无污染的因子收益率计量仪器。
  • 样本协方差在样本外系统性失准,用偏差统计量诊断;四类修正各治一病:自相关(NW)、低方差方向低估(特征因子)、水平滞后(VRA)、个股极端值(结构化 + 收缩)。

7.3投资组合优化

收益模型给出 $\boldsymbol{\mu}$(预期超额收益向量),风险模型给出 $\boldsymbol{\Sigma}$,第三步是把它们捏成一个持仓。

均值—方差优化

式 (7.57)–(7.58) · 均值—方差目标函数与解析解
$$ \max_{\boldsymbol{w}}\ U(\boldsymbol{w}) \;=\; \boldsymbol{w}^{\top}\boldsymbol{\mu} - \frac{\gamma}{2}\, \boldsymbol{w}^{\top}\boldsymbol{\Sigma}\,\boldsymbol{w}, \qquad \boldsymbol{w}^{*} \;=\; \frac{1}{\gamma}\,\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu} $$
$\boldsymbol{w}$$N$ 维持仓权重向量(决策变量)
$\boldsymbol{w}^{\top}\boldsymbol{\mu}$组合的预期收益——想最大化的部分
$\boldsymbol{w}^{\top}\boldsymbol{\Sigma}\boldsymbol{w}$组合的方差——被惩罚的部分
$\gamma$风险厌恶系数(文献中也记作 $\lambda$ 或 $\zeta$):每单位方差值多少收益。$\gamma$ 越大越保守
$\boldsymbol{w}^{*}$无约束最优解。加上权重和为 1 的约束后仅差一个缩放系数,可写作 $\boldsymbol{w}^{*}\propto\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$(式 7.59)
这是 Markowitz(1952)框架的效用形式。解读 $\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$:如果资产互不相关,$w_i^{*}\propto\mu_i/\sigma_i^2$——收益高多买、波动大少买;相关性存在时,$\boldsymbol{\Sigma}^{-1}$ 还会自动利用资产间的对冲关系。数学上无懈可击,实践里问题全出在输入:最优权重对 $\boldsymbol{\mu}$ 的估计误差极端敏感(练习 7.4 会让你亲眼看到),所以业界戏称 MVO 是"误差最大化器"。

收益模型与风险模型的错位

接下来是本章最容易被忽视、也最有实战价值的一个专题。现实中的标准配置是:收益模型自研(独门预测变量),风险模型外购(如 Barra)。两个模型的因子体系必然不一致——这就是错位(misalignment)。错位不是美学问题,它会让优化器给出系统性扭曲的持仓。

把收益预测向量按风险模型的因子空间做正交分解:

式 (7.54)–(7.55) · 错位的数学:优化器眼里的"免费收益"
$$ \boldsymbol{\mu} \;=\; \boldsymbol{\mu}_{\parallel} + \boldsymbol{\mu}_{\perp}, \qquad \boldsymbol{w}^{*} \;=\; \frac{1}{\gamma}\Big( \boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}_{\parallel} \;+\; \frac{1}{\sigma_u^{2}}\,\boldsymbol{\mu}_{\perp} \Big) $$
$\boldsymbol{\mu}_{\parallel}$$\boldsymbol{\mu}$ 在风险因子暴露矩阵 $\boldsymbol{X}_R$ 列空间上的投影:$\boldsymbol{\mu}_{\parallel}=\boldsymbol{X}_R(\boldsymbol{X}_R^{\top}\boldsymbol{X}_R)^{-1}\boldsymbol{X}_R^{\top}\boldsymbol{\mu}$——风险模型"认识"的那部分预测
$\boldsymbol{\mu}_{\perp}$残差部分,与所有风险因子正交($\boldsymbol{X}_R^{\top}\boldsymbol{\mu}_{\perp}=\boldsymbol{0}$)——风险模型不认识的那部分预测
$\sigma_u^{2}$特质方差(推导中为简洁假设各股相同,$\boldsymbol{\Sigma}_u=\sigma_u^2\boldsymbol{I}$)。因为 $\boldsymbol{\Sigma}\boldsymbol{\mu}_{\perp}=(\boldsymbol{X}_R\boldsymbol{\Sigma}_R\boldsymbol{X}_R^{\top}+\sigma_u^2\boldsymbol{I})\boldsymbol{\mu}_{\perp}=\sigma_u^2\boldsymbol{\mu}_{\perp}$,$\boldsymbol{\mu}_{\perp}$ 是 $\boldsymbol{\Sigma}$ 的特征向量,特征值只有小小的 $\sigma_u^2$
看两部分受到的惩罚:$\boldsymbol{\mu}_{\parallel}$ 方向要同时缴"因子风险税 + 特质风险税",$\boldsymbol{\mu}_{\perp}$ 方向只缴特质风险税——在风险模型眼里它几乎是免费的午餐。于是优化器把仓位疯狂堆向 $\boldsymbol{\mu}_{\perp}$。可"盈亏同源",模型看不见的风险不等于不存在:真实组合在一个未被定价的方向上背了大量隐形暴露,事后波动远超事前预测。

下图用一个可复算的小型模拟展示这个机制:50 只股票、1 个风险因子,收益预测里"对齐"与"未对齐"两部分信号强度相同,但优化出的组合几乎把全部仓位押在未对齐方向上:

图 7-2 | 错位的后果与惩罚的效果(模拟数据,示意)。三组柱对应对未对齐方向 μ⊥ 施加不同强度的额外惩罚 θ:不处理时组合暴露被 μ⊥ 完全支配;θ 加大到与因子风险同量级时,两个方向的暴露才回到与信号强度相称的水平。

缓解错位有两条思路。思路一:改风险模型——把与收益模型相似的风险因子剔除、用收益模型的暴露替换对应列、或干脆把收益因子并入风险模型重建。直接但受限:商用模型改不动,且"哪两个因子算相似"本身就模糊。思路二:改优化目标——既然问题是 $\boldsymbol{\mu}_{\perp}$ 未被惩罚,那就显式补一刀(Bender et al. 2009):

式 (7.56) · 对未对齐部分的显式惩罚(alpha alignment)
$$ \max_{\boldsymbol{w}}\ \boldsymbol{w}^{\top}\boldsymbol{\mu} - \frac{\gamma}{2}\,\boldsymbol{w}^{\top}\boldsymbol{\Sigma}\,\boldsymbol{w} - \frac{\theta}{2}\,\big(\boldsymbol{w}^{\top}\hat{\boldsymbol{\mu}}_{\perp}\big)^{2} $$
$\hat{\boldsymbol{\mu}}_{\perp}$$\boldsymbol{\mu}_{\perp}$ 方向的单位向量;新惩罚项等价于把 $\theta\,\hat{\boldsymbol{\mu}}_{\perp}\hat{\boldsymbol{\mu}}_{\perp}^{\top}$ 加进协方差矩阵——相当于承认"这个方向也是一个有风险的隐因子"
$\theta$惩罚强度:若 $\boldsymbol{\mu}_{\perp}$ 纯属噪声(收益与风险模型几乎同构时可能如此),$\theta$ 应取到足够大直接掐灭该方向;若它承载了真实的独门信号,$\theta$ 应与该方向的真实风险成比例——别把自己的 α 也惩罚没了
给风险模型的盲区打补丁:看不见的暴露不是没有风险,只是没被计价。国内券商研究中"自研收益模型 + 商用风险模型"直接进优化器而不做任何对齐处理的做法仍很普遍,这个专题值得引起重视。

目标函数的谱系

因为 $\boldsymbol{\mu}$ 太难估,一系列"只用 $\boldsymbol{\Sigma}$"的目标函数应运而生。它们并非互相独立的流派,而是同一个 MVO 在不同参数假设下的特例——满足等价条件时,它们与 MVO 给出完全相同的权重:

目标函数输入最优解与 MVO 等价的条件
均值—方差(MVO)$\boldsymbol{\mu},\ \boldsymbol{\Sigma}$$\boldsymbol{w}\propto\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$
最小方差$\boldsymbol{\Sigma}$$\boldsymbol{w}\propto\boldsymbol{\Sigma}^{-1}\boldsymbol{1}$(式 7.61)所有资产 $\mu_i$ 相等
最大多样化$\boldsymbol{\Sigma}$$\boldsymbol{w}\propto\boldsymbol{\Sigma}^{-1}\boldsymbol{\sigma}$(式 7.63)所有资产夏普比率 $\mu_i/\sigma_i$ 相等
风险平价$\boldsymbol{\Sigma}$各资产风险贡献相等 $w_i(\boldsymbol{\Sigma}\boldsymbol{w})_i$ 全同(式 7.64);两两相关系数相等时 $w_i\propto 1/\sigma_i$$\mu_i/\sigma_i$ 相等 + 两两相关系数相等
等权$w_i = 1/N$$\mu_i/\sigma_i$ 相等 + 相关系数相等 + $\sigma_i$ 相等

三点解读。其一,从下往上,等价条件逐条放松,对参数信息的利用逐渐增多——原书的数值实验显示,条件满足时各方法权重完全一致,条件逐一失效后,等权、风险平价、最大多样化依次在与 MVO 的比较中败下阵来:有靠谱的参数信息就该用,等权是估不准时的无奈之举而非美德。其二,风险平价(Qian 2005 提出,因桥水全天候策略闻名)的"资产两两相关系数相等"假设对个股不现实,对大类资产则勉强可接受,所以它主要活跃在资产配置层面。其三,主动管理常用的最大化信息比率(主动收益 / 跟踪误差)并不是新东西:把权重换成相对基准的主动权重、协方差换成主动收益的协方差,它就是主动空间里的 MVO。

约束条件

实际优化从来不是无约束的。常见约束一览($\boldsymbol{w}^B$ 为基准权重,$\Delta w_i = w_i - w_i^{\mathrm{old}}$ 为调仓变动):

约束数学形式动机
卖空约束$\boldsymbol{w}\ge\boldsymbol{0}$(式 7.67)多数产品不能融券卖空
满仓/杠杆约束$\boldsymbol{w}^{\top}\boldsymbol{1}=1$(式 7.68)资金利用率与杠杆上限
个股上下限$\boldsymbol{L}\le\boldsymbol{w}\le\boldsymbol{U}$(式 7.69)防止持仓过度集中,个股黑天鹅可控
行业权重/中性$\boldsymbol{H}\boldsymbol{w}=\boldsymbol{h}$(式 7.71,$\boldsymbol{H}$ 为行业哑变量矩阵,$\boldsymbol{h}$ 为基准行业权重)行业是主要风险来源,相对收益策略常要求行业配比跟住基准
换手约束$\sum_i \lvert\Delta w_i\rvert \le \Phi$(式 7.73)直接钳制交易成本,大资金尤其重要
因子暴露/风格中性$L_k \le \sum_i w_i X_{ik} \le U_k$(式 7.76);用主动权重 $w_i-w_i^B$ 且上下限取 0 即为风格中性(式 7.77)控制组合在风险因子(如市值、国家/行业)上的暴露
跟踪误差约束$\big[(\boldsymbol{w}-\boldsymbol{w}^B)^{\top}\boldsymbol{\Sigma}(\boldsymbol{w}-\boldsymbol{w}^B)\big]^{1/2}\le\sigma_{TE}$(式 7.78)指数增强产品的生命线:偏离基准的波动不得超标
旁注

加上这些线性与二次约束后一般不再有解析解,需要数值求解器(凸优化情形下如 CVXPY / ECOS / MOSEK)。约束还有一个隐藏福利:它们像给优化器戴上笼头,机械地限制了它对估计误差的放大——这是 Jagannathan 和 Ma"约束即收缩"的著名观察。约束设得过紧则可能无解,实践中按优先级放松。此外,持仓数量约束(限制非零权重个数)会引入整数变量,把问题从凸优化变成混合整数规划,代价陡增。

交易成本

换手约束是粗调,精细的做法是把成本直接写进目标函数。成本分显性(佣金、买卖价差)与隐性(市场冲击——你的买单本身会推高价格)两类,对应两种最常用的模型:

式 (7.79)–(7.81) · 线性 + 二次交易成本模型
$$ \mathrm{TC}(\boldsymbol{w}) \;=\; \underbrace{\sum_{i=1}^{N} c_i\,\lvert \Delta w_i \rvert}_{\text{线性:佣金与价差}} \;+\; \underbrace{\sum_{i=1}^{N} k_i\, (\Delta w_i)^{2}}_{\text{二次:市场冲击}}, \qquad \max_{\boldsymbol{w}}\ U(\boldsymbol{w}) - \gamma_{TC}\,\mathrm{TC}(\boldsymbol{w}) $$
$\Delta w_i$股票 $i$ 本次调仓的权重变动
$c_i$线性成本率:每单位成交额的固定比例损耗(佣金、印花税、半个价差)
$k_i$冲击系数:与股票流动性负相关——越难交易的票,多买一点价格就被推得越高
$\gamma_{TC}$成本惩罚系数,权衡"换到更好持仓"与"换仓本身的损耗"
线性项让小额交易也有成本(鼓励"懒惰",小改动干脆不做),二次项让大额交易的边际成本递增(大单必须拆着做、慢慢做)。两项都是凸函数,加进目标函数后问题仍是凸优化。成本建模的质量直接决定回测与实盘的差距。
要点
  • MVO:$U=\boldsymbol{w}^{\top}\boldsymbol{\mu}-\frac{\gamma}{2}\boldsymbol{w}^{\top}\boldsymbol{\Sigma}\boldsymbol{w}$,解 $\boldsymbol{w}^*=\frac{1}{\gamma}\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$;对 $\boldsymbol{\mu}$ 的误差极端敏感。
  • 错位问题:$\boldsymbol{\mu}_{\perp}$ 与风险因子正交、只受特质风险惩罚,优化器会把它当免费收益疯狂放大;对策是对齐因子体系或显式惩罚 $(\boldsymbol{w}^{\top}\hat{\boldsymbol{\mu}}_{\perp})^2$。
  • 最小方差、最大多样化、风险平价、等权都是 MVO 在特定参数假设下的特例;有信息就用信息。
  • 约束既表达风控偏好,也顺带抑制估计误差;交易成本用线性 + 二次凸模型进目标函数。

7.4Smart Beta:因子投资的捷径

定义与光谱

Smart Beta smart beta / factor index

把"买有溢价的因子"做成明码标价的指数基金:规则公开、费率便宜,普通人不用会优化器也能吃到因子收益。

拆词:Smart = 挑选有风险溢价的因子,Beta = 通过暴露其上获取收益。综合各大机构的定义,Smart Beta 的四要素是:(1)偏离传统市值加权;(2)规则清晰透明、可复制;(3)主动暴露于一个或多个因子;(4)以增强收益或降低风险为目标。它站在被动与主动投资之间:形式上是指数化投资(透明、低成本、低换手),实质上做了主动的因子选择。学术界几十年的因子研究是它的弹药库——主动管理人用优化器精细地利用 BM 的预测力,Smart Beta 用排序法粗糙但透明地利用同一个 BM,本质并无不同。

因子指数怎么编:暴露与可投资性的权衡

编制因子指数时,因子暴露与可投资性(容量、换手、流动性)天生互斥,不同产品是在这条光谱上选点。按暴露从高到低排成金字塔:

层级因子暴露可投资性说明
纯因子指数最高(目标 1、其他 0)几乎为零7.2 节的纯因子组合,计量工具,不为交易而生
多空因子指数排序法多空对冲组合(如 FF 的 SMB/HML),资金中性,卖空在 A 股难落地
高暴露因子指数中高纯多头;筛选法(按暴露选子集再加权)或优化法(暴露目标 + 可投资性约束)
高容量因子指数中低不筛股票,全池持有,权重由暴露与市值共同决定
市场指数零(基准)最高市值加权,纯被动

落到具体权重上,主流加权方式对比如下:

加权方式做法因子暴露容量/换手典型偏向
等权成分股权重全同低(间接)容量小、需定期再平衡小市值、(隐性)反转
排序/得分加权按因子得分(或秩)比例加权高、直接换手取决于得分稳定性目标因子
市值调整加权权重 $\propto$ 市值 × 得分容量大目标因子 + 大盘(MSCI 质量指数即此法)
最小方差/优化加权解一个带约束的优化问题可精确控制规则较不透明、换手偏高低波动
波动率倒数加权权重 $\propto 1/\sigma_i$较稳低波动
基本面加权按营收、分红等基本面体量加权容量大价值
例子

MSCI 质量指数的四步流程是教科书式样本:(1)确定股票池(美国三大交易所上市股票);(2)算因子得分——对 ROE、负债率 D/E、盈利波动三个变量缩尾后做截面 Z-Score(后两者与预期收益负相关,得分乘 −1),平均得到质量得分;(3)按得分降序选前 $N$ 只;(4)权重取"市值 × 得分"(市值调整法),在因子暴露与流动性之间折中。任何人照编制方案都能复现——这就是"透明"的含义。

为什么投资 Smart Beta

  • 增加收益:从单一的市场溢价扩展到价值、质量、动量等多个溢价来源。原书用自建的 BetaPlus 指数系列(A 股市值前 1000 只,2000—2019 年)做实证:六个单因子指数的年化收益与夏普比率全部高于基准指数;把 60/40 股债组合中的宽基替换为六因子等权后,年化收益与夏普比率均明显提升。
  • 降低风险:多因子分散风险来源;把仓位向质量、低波动等防御性因子倾斜可显著压缩回撤。
  • 节约费用:管理费通常约 0.15%~0.5%,对比主动基金动辄 1% 以上;低换手进一步省下交易损耗。研究显示主动基金换手率与超额收益呈倒 U 形——换手高过某个点就是在给券商打工。
  • 透明、免委托代理:规则写在编制方案里,不受基金经理离职、风格漂移、行为偏差的影响(第 1 章讲过:主动收益约八成本就是因子暴露,别用 α 的价格买 β)。
旁注

市场规模速览(免去冗长的产品列表):截至 2019 年末美国 Smart Beta ETF 超过 900 只、合计约 1 万亿美元量级,价值、成长、股利、低波动类最受欢迎;国内起步于 2006 年的上证红利 ETF,截至 2020 年一季度约 30 只、合计不足 200 亿元,红利与质量类占六成——同名产品在选股池、加权方式、费率上差异巨大,挑选时先读编制方案再看费率,最后才看历史收益。

如何投资:单因子择时还是多因子配置

持有单一因子指数要忍受漫长的相对低迷期(美股价值因子 2017 年之后连年跑输就是活例;AQR 的 Asness 为此专门著文论证"逻辑未变、不应放弃")。因子间相关性低、周期错位——质量与低波动偏防御、价值与动量偏进攻——所以多数投资者的答案是多因子配置。配置有两种路线:

混合 vs 整合 mix / top-down vs integrate / bottom-up

混合 = 各买一只单因子基金拼在一起(按学科单科状元各招一个);整合 = 用综合得分一次性选股(只招总分状元)。

混合法(top-down):每个因子独立选股、独立成组合,投资者持有多只单因子产品。优点是暴露纯粹、可灵活调各因子权重;缺点是不同因子选的股票互相稀释(你的价值组合里的高 BM 股票可能正好是动量组合要做空的),总持仓庞杂、组合层面暴露效率低。整合法(bottom-up):先把每只股票在多个因子上的得分合成,再按综合分选股,一只基金搞定。优点是暴露效率高、资金门槛低;缺点是无法拆开调整。实证上互有胜负:Bender 和 Wang(2016)发现整合法收益与信息比率更优;Chow 等人(2018)指出整合法持股集中、换手更高,可投资性打折;Ghayur 等人(2018)的调和结论是——目标暴露低时混合占优,目标暴露高时整合占优。原书用 BetaPlus 数据的对比也是整合法年化收益略胜、回撤略深。

至于因子间的配置权重:等权、波动率倒数、风险平价、最大分散度、因子动量加权等方法在原书实证中差异很小——被配置的因子指数本身风险收益特征相近,而复杂方法要估的参数带来的误差吃掉了理论优势。这与 DeMiguel 等人(2009)"最优化难胜等权"的著名结论一致。偏离等权的动态配置,已经属于下一节的因子择时。

误区

Smart Beta 的"透明"是双刃剑:规则公开意味着谁都能抢跑与拥挤。因子拥挤度高时,未来回撤与波动系统性放大(6.6 节的 MSCI 拥挤度模型;Factor Research 的估值、波动、相关性、动量、离散度综合指标)。另外别忘了 Smart Beta 仍是指数产品:评价它除了收益与回撤,还要看相对目标因子的暴露纯度和跟踪质量——买了个名叫"价值"实际暴露稀薄的产品,费率再低也是浪费。

要点
  • Smart Beta = 透明规则 + 主动因子暴露 + 被动执行,站在主动与被动之间。
  • 编指数是在因子暴露与可投资性之间选点:纯因子 → 多空 → 高暴露 → 高容量 → 市场指数。
  • 投它的理由:多元溢价、防御选项、低费率、免委托代理;选它的方法:先方案与费率,后历史收益。
  • 多因子配置:低暴露需求用混合(灵活),高暴露需求用整合(高效);因子间权重等权已很难被打败。

7.5因子择时

因子收益率在时序上起伏很大,如果能"好使时超配、失灵时低配",收益会脱胎换骨——这就是因子择时(factor timing)的诱惑。做法上都是寻找"因子的因子":影响因子未来收益的变量。综合学术界与业界的研究,信号大致五类,前三类来自因子自身,后两类来自外部环境:

信号逻辑代表研究
因子估值差因子也有贵贱,贵了均值回复Asness et al.(2000, 2017)
因子动量近期强的因子继续强Arnott et al.(2019);Ehsani & Linnainmaa(2019);Gupta & Kelly(2019)
因子波动率不预测收益,只按风险调仓Qian(2005)风险平价一族
市场情绪乐观期与悲观期偏爱不同风格Baker & Wurgler(2006);Ung & Luk(2016)
宏观变量因子表现与商业周期、利率环境相关Bender et al.(2018)

(1)因子估值差。因子组合也是一揽子股票,同样可以问"现在贵不贵"。Asness 等人从 Gordon 增长模型出发把收益拆成盈利收益率加增长($\E[R]=E/P+g$),对因子的多空两头分别拆解后相减:

式 (7.88) · 价值价差:因子的估值标尺
$$ \E[R_{\mathrm{value}}] - \E[R_{\mathrm{growth}}] \;=\; \underbrace{\big( E/P_{\mathrm{value}} - E/P_{\mathrm{growth}} \big)}_{\text{价值价差 value spread}} \;-\; \underbrace{\big( g_{\mathrm{growth}} - g_{\mathrm{value}} \big)}_{\text{成长价差 growth spread}} $$
$E/P_{\mathrm{value}},\ E/P_{\mathrm{growth}}$因子多头(价值组)与空头(成长组)的盈利收益率;也常用 BM 等指标,或取两头之比替代差值
价值价差多头相对空头的便宜程度:价差越大,说明因子当前估值越低、后续预期收益越高
$g$两组的预期盈利增长;成长价差是均值回复逻辑的对头风险——成长股若真兑现高增长,便宜没用
给因子本身算一个"市盈率"。实操上把当前价差与过去 36 个月的分布比:处于高位(因子便宜)则超配、低位则低配。硬伤在于:按估值给因子择时的收益与价值因子自身高度相关——价值因子低迷的年代(如 2008 年后的美股),这套择时也跟着失灵。

(2)因子动量。动量效应不仅存在于股票间,也存在于因子间。Arnott 等人(2019)对 51 个美股因子做截面动量(做多过去表现最好的 8 个、做空最差的 8 个),获得显著为正的收益,且不像股票动量那样发生崩溃;Ehsani 和 Linnainmaa、Gupta 和 Kelly 在更多因子、更多市场上得到相似结论。业界流行的"按近期 IC 高低给变量加权",本质上就是因子动量择时。注意它与估值择时天然打架——涨得多的因子往往也变贵了,AQR(动量派)与 Research Affiliates(估值派)为此论战多年。

(3)因子波动率。放弃预测收益,只用协方差信息配置:最小方差、风险平价、波动率倒数加权($w_k \propto 1/\sigma_k$,风险平价在因子两两相关系数相等时的特例,AQR 常用)。目标是压回撤而非增收益——实证上也确实只压住了回撤,收益端没有稳定改善。

(4)市场情绪。乐观期投资者追逐彩票式的进攻型股票(小盘、新股、成长),把它们推得过贵,随后进攻风格跑输;悲观期反之。用 VIX 分市场状态的统计显示:乐观期价值与动量占优,悲观期低波动、质量、股利这些防御因子的超额收益反而最大。

(5)宏观变量。期限利差、信用利差、通胀、产出增速等与因子表现存在统计关联(如期限利差与盈利因子高度负相关;价值与动量顺周期、低波动逆周期、质量全天候)。但宏观变量数目众多、传导链条长,样本内相关性很容易是拟合出来的。

为什么因子择时这么难

结论先行:样本外稳定战胜"等权持有多个因子"的择时方法,至今没有公认的答案。原因是结构性的:

  • 信号弱:因子收益的可预测成分本来就小,时序信息远比截面信息稀薄——截面上有几千只股票摊薄噪声,时序上只有一条历史。
  • 样本短:以月频观察,几十年数据只有几百个点,还要切给多个状态变量;商业周期一共才经历过几轮,按周期择时几乎必然过拟合。
  • 关系不稳:预测变量与因子收益的关系本身在漂移,且宏观数据存在事后修正(用了未来数据而不自知)。
  • 成本与拥挤反噬:择时意味着换手,扣掉成本后微弱的优势所剩无几;而一旦某个择时信号有效且公开,跟随资金会把它变成新的拥挤源,在转向时踩踏。

Bender 等人(2018)承认择时理论上可行,同时列出上述陷阱;Newfound Research 的结论更直接——考虑成本后,估值与动量择时对比"不择时"优势尽失;Dichtl 等人(2020)系统比较各种因子动态加权后发现,没有哪种方法能稳定胜过等权。这与 DeMiguel 等人(2009)在资产配置层面的经典结论遥相呼应。对多数投资者,合理的定位是:把择时预算花在防御上(极端拥挤或系统性风险信号出现时降暴露),而不是幻想逐月踩点。

要点
  • 五类择时信号:估值差(均值回复)、因子动量(延续)、波动率(只管风险)、情绪(进攻/防御轮动)、宏观(周期关联)。
  • 估值派与动量派方向相反,是业界著名论战;IC 加权本质是因子动量。
  • 因子择时难:信号弱、样本短、关系漂移、成本与拥挤反噬——战胜等权极难,防御性使用更现实。

7.6风格分析

换一个身份:现在你不是构建组合的人,而是审视别人组合的人。风格分析(style analysis)要回答的是"这只基金的收益到底从哪些风格来"。按数据来源分两派:基于持仓的分析(拿持仓明细逐股加总暴露,准确但要拿到底仓)与基于收益的分析(只用净值序列回归,数据易得)。持仓数据难得,所以基于收益的方法应用最广,本节专讲它。

Sharpe 经典风格分析

式 (7.92) · Sharpe(1992)约束回归
$$ R_{t} \;=\; \sum_{k=1}^{K} b_k\, F_{k,t} + \varepsilon_t, \qquad \min_{\boldsymbol{b}}\ \Var(\varepsilon_t) \quad \text{s.t.}\quad b_k \ge 0,\ \ \sum_{k=1}^{K} b_k = 1 $$
$R_t$被分析的基金(或资产)在 $t$ 期的收益率
$F_{k,t}$风格 $k$ 的指数收益率(大盘价值、大盘成长、中盘、小盘、债券……都是纯多头指数);Sharpe 要求这组风格"不重不漏"(MECE):每只股票属于且只属于一个风格
$b_k$基金对风格 $k$ 的暴露——解读为"复制这只基金所需的风格配方"。非负约束对应现实中难以卖空,和为 1 对应满仓配置
$\varepsilon_t$风格解释不了的部分:均值不必为零,其均值就是"选股/交易贡献",方差就是相对静态风格组合的跟踪误差
在"只允许做多、必须满仓"的约束下,找一个静态的风格指数组合把基金净值模仿得最像。两条约束使它不再是线性回归,而是一个二次规划(QP)问题。产出两个宝贝:风格配方 $b_k$(这只"主动"基金其实就是 60% 大盘价值 + 25% 小盘……),以及残差 $\varepsilon$——对它检验显著性,才知道扣掉风格后经理还剩多少真本事。常用 $R^2 = 1-\Var(\varepsilon)/\Var(R)$ 度量"风格解释度"。

Sharpe 用 12 个资产类别因子分析先锋的一只基金,展示了它可以被大盘价值与小盘两个风格基本复制。但经典框架的毛病也在约束里:不同指数商对"价值"的定义差异很大,换一家的风格指数结论就变(Buetow 等人因此对其实用性相当悲观);MECE 原则让风格数目组合爆炸(规模三档 × 价值/平衡/成长三档就要 9 个指数);暴露和为 100% 的硬约束还可能扭曲估计。

基于多空因子的风格分析

现代做法是分析超额收益:把基金收益减去基准(或无风险利率),再对多空因子收益率回归:

式 (7.94) · 多因子模型形式的风格分析
$$ R_{t} - R_{f,t} \;=\; \alpha + \beta_{M}\big(R_{M,t}-R_{f,t}\big) + \sum_{k=2}^{K} \beta_{k}\, \lambda_{k,t} + \varepsilon_t $$
$R_t - R_{f,t}$基金相对无风险利率的超额收益
$\lambda_{k,t}$多空因子组合(SMB、HML、动量……)的收益率——资金中性,不再需要"权重和为 1"与非负约束,普通 OLS 即可
$\beta_k$基金对因子 $k$ 的暴露:风格画像
$\alpha$所有因子都解释不掉的平均超额收益:真正值得付费的部分
这就是实证资产定价里最标准的时序回归(式 1.4)换了个用途:从"检验模型"变成"透视基金"。Carhart(1997)用四因子模型透视美国公募基金即是典范:业绩最好与最差的基金之间,风格暴露差异带来的收益差远大于 α 的差异。配合滚动窗口回归还能监测风格漂移——暴露忽大忽小的基金,风格本身就是一种风险。

案例:巴菲特的 α 从哪来

案例

风格分析最著名的实战是 AQR 的"Buffett's Alpha"(Frazzini、Kabiller 和 Pedersen 2018)。伯克希尔 1976—2011 年年化收益约 19%、夏普比率约 0.76,胜过同期所有存续 30 年以上的股票和共同基金。用 Carhart 四因子回归,仍剩下年化约 12% 的高度显著 α(t 值约 3.2)——传统模型解释不了股神。但在模型中加入两个新因子后,α 变得不再显著:BAB(betting against beta,做多低 β 股、做空高 β 股)与 QMJ(quality minus junk,做多高质量股、做空垃圾股)。也就是说,巴菲特的超额收益可以在很大程度上被"低风险 + 高质量 + 价值"的稳定风格暴露解释,外加约 1.6~1.7 倍的杠杆——而且是以保险浮存金形式获得的、成本低于国债利率的耐心杠杆。据此构造的"仿巴菲特组合"(相同风格暴露与波动)在纸面上甚至更优。

这不是在贬低巴菲特,而是最高级别的致敬:他在这些因子被学术界命名之前几十年就系统性地暴露其上,并用别人拿不到的低成本杠杆把温和的因子收益放大成传奇——真正的样本外奇迹。风格分析的价值正在于此:把"神话"拆解成可理解、可复制、可定价的成分,剩下拆不掉的才叫 α。后续研究(Hou 等人用 q 因子系模型重检)也提醒:把样本拉长到 1968—2018 年后各模型又都解释不干净了——风格分析的结论永远相对于所用的模型与样本。

要点
  • Sharpe 经典风格分析 = 非负 + 和为 1 约束下的二次规划:用静态风格组合复制基金,残差均值是选股贡献。
  • 现代做法用多空因子做普通回归(式 7.94),摆脱 MECE 与纯多头指数的限制。
  • 巴菲特案例:市场 + 价值 + BAB + QMJ + 低成本杠杆解释了大部分传奇;α 是相对于模型的。

7.7风险归因

风格分析拆收益,风险归因(risk attribution)拆波动:组合 5% 的月波动里,几个点来自市场、几个点来自押注的风格、几个点来自个股运气?设组合收益率可写成 $M$ 个收益源的线性组合 $R=\sum_{m=1}^{M} x_m r_m$(式 7.95,$x_m$ 为对收益源 $m$ 的暴露,$r_m$ 为其收益率——在多因子模型里,收益源就是各因子加上个股特质收益)。

两种传统方法的局限

方法一:独立波动。算每个收益源自己贡献的波动 $\sigma(x_m r_m)$。直观,但有两个致命伤:它无视收益源与组合之间的相关性(一个与组合负相关的收益源其实在降低风险,这里却被记成正贡献);而且各项加起来不等于组合总风险——$\sum_m \sigma(x_m r_m) \ne \sigma(R)$,除非所有收益源完全正相关。账都对不上,谈何归因。

方法二:边际风险贡献。定义 $\mathrm{MCR}_m = \partial \sigma(R)/\partial x_m$(式 7.97):暴露每多一点,组合风险多多少。由于 $\sigma(R)$ 是 $\boldsymbol{x}$ 的一次齐次函数,欧拉定理保证 $\sigma(R) = \sum_m x_m\,\mathrm{MCR}_m$(式 7.98)——账加得上了。但偏导数没有业务语感:跟基金经理说"这个因子的偏导数是 0.8",他很难据此做决策。

风险三要素公式

Menchero 和 Davis(2011)把 MCR 拆开,得到一个既加得上账、又说人话的公式:

式 (7.100) · 风险三要素公式(Euler 分解)
$$ \sigma(R) \;=\; \sum_{m=1}^{M} \underbrace{x_m}_{\text{暴露}} \times \underbrace{\sigma(r_m)}_{\text{波动}} \times \underbrace{\rho(r_m, R)}_{\text{相关性}} $$
$x_m$组合对收益源 $m$ 的暴露:经理的主动决策,可正可负——负暴露于一个与组合正相关的源,就是在对冲
$\sigma(r_m)$收益源自身的波动率:市场给的,暴露同样大时,越会晃的源贡献越大
$\rho(r_m, R)$收益源与组合整体的相关系数:决定这份波动有多少真正传导进组合,也是符号的来源——它可以为负,于是某个源的风险贡献可以是负数(分散/对冲效应)
$\sigma(R)$组合总波动率:全部 $M$ 项贡献严格加总而成,无残差
推导只需两行:$\sigma^2(R)=\Cov(R,R)=\sum_m x_m \Cov(r_m,R) = \sum_m x_m\, \sigma(r_m)\,\rho(r_m,R)\,\sigma(R)$,两边除以 $\sigma(R)$ 即得。对照式 (7.98) 立刻看出 $\mathrm{MCR}_m = \sigma(r_m)\,\rho(r_m,R)$——边际贡献 = 自身波动 × 与组合的相关性,偏导数终于有了业务翻译。
例子

两个收益源的 MCR 同为 1%,暴露也相同——按方法二它们无法区分。拆开看:源 A 是"波动 10% × 相关性 0.1",源 B 是"波动 2% × 相关性 0.5"。当下贡献虽相同,含义截然不同:A 是"大波动、弱挂钩",B 是"小波动、强挂钩"。相关系数比波动率难估得多,A 那个 0.1 的估计误差随时可能让它的真实贡献远超账面——要砍暴露,先砍 A。三要素给了 MCR 无法提供的决策依据。

应用于多因子模型

把收益源具体化为因子与特质收益。组合权重 $w_i$ 下,$R_p = \sum_k x_k f_k + \sum_i w_i u_i$,其中 $x_k = \sum_i w_i X_{ik}$ 是组合的因子暴露(个股暴露的加权和)。直接套用三要素:

式 (7.109) · 多因子框架下的风险归因
$$ \sigma(R_p) \;=\; \sum_{k=1}^{K} x_k\, \sigma(f_k)\, \rho(f_k, R_p) \;+\; \sum_{i=1}^{N} w_i\, \sigma(u_i)\, \rho(u_i, R_p) $$
$x_k = \sum_i w_i X_{ik}$组合对因子 $k$ 的暴露
$\sigma(f_k),\ \rho(f_k,R_p)$因子 $k$ 的波动率及其与组合的相关性——前半部分合计为系统性风险贡献
$w_i,\ \sigma(u_i),\ \rho(u_i,R_p)$个股权重、特质波动及特质收益与组合的相关性——后半部分合计为特质风险贡献,持股越分散占比越小
一张风险归因表就此诞生:每个因子一行,各列是暴露、波动、相关性与贡献占比。基金经理据此检查"风险花在哪了"——最健康的状态是风险预算集中在自己有信息优势的因子上,而不是被行业或市值这种无意押注偷走。
图 7-3 | 某指数增强组合的风险归因示意(模拟数据)。国家(市场)因子通常是纯多头组合最大的风险来源;动量为负贡献——组合对动量的负暴露与其正相关性相乘为负,起到了对冲作用;各项贡献加总恰为 100%。
要点
  • 独立波动加不成总账、MCR 加得上但没有业务含义——两种传统方法各缺一半。
  • 三要素公式:风险贡献 = 暴露 × 源波动 × 与组合的相关性,逐项相加严格等于 $\sigma(R)$(欧拉分解)。
  • $\mathrm{MCR}_m=\sigma(r_m)\rho(r_m,R)$:边际贡献的白话翻译;相关性为负 ⇒ 贡献为负 ⇒ 对冲。
  • 多因子版本把风险拆成"因子贡献 + 特质贡献",是检查风险预算是否花在刀刃上的日常工具。

7.8展望:另类数据与因子化配置

另类数据

传统量价与财务数据的"矿"越挖越贫,目光自然转向另类数据(alternative data):App 定位、网络抓取、舆情文本、卫星图像、刷卡消费……经典战例是数据商 Thasos 用特斯拉工厂周边的手机定位信号,提前推断出 Model 3 产能翻番,其对冲基金客户抢在财报大涨前布局。但"另类"不等于"即插即用",冷静的清单有五条:

  • 技术要匹配:非结构化数据需要 NLP 等相应技术栈;变量维度暴增还带来维数灾难与更高的过拟合风险。
  • 需要专业知识:另类数据是"发现了一座没人去过的山",有没有矿、从哪挖,全看使用者的领域知识;买数据商加工好的现成信号,等于和所有买家共享拥挤。
  • 数据未必无偏:如员工点评网站的数据——无认证机制、不满者更爱发声、雇主刷分——采集过程的偏差会整体污染结论。
  • 历史太短:另类数据集常只有两三年历史。Bailey 和 López de Prado 的研究显示,2 年长度的数据只需约 7 次尝试就能"挖出"一个夏普比率 1.0 的假策略,5 年也不过 45 次——多重检验问题在短样本上被急剧放大。
  • 要验增量:若新数据挖出的信号能被已有因子解释,它只是贵了十倍的旧信息。真正有价值的是与现有收益源低相关的部分。

因子化的大类资产配置

因子思维的终点是越过股票,接管整个资产配置:股票、债券、商品、外汇、地产这些表面迥异的资产,其收益背后是同一组底层因子在驱动——实际利率、通胀、信用、发达/新兴市场股权、流动性等。债券不再是"一类资产",而是利率、信用与通胀因子的一个特定暴露包。配置因子而非资产,分散化才落在真正独立的风险上。落地有两个关键:

  • 构建因子模拟组合(factor-mimicking portfolios):利率、通胀这类因子不能直接买,需要用暴露最大的资产组合复制其收益(思路与第 2 章因子构建一脉相承);配置方法上,因子收益难预测,常用只依赖协方差的风险平价或简单等权。
  • 抵御尾部风险:危机时刻各因子的下行相关性会陡然抬升,"分散"集体失效。贝莱德的防御性因子择时(Fergis et al. 2019)用两个低频指标站岗:RTI(风险容忍指标,因子收益与波动排序的秩相关系数 $\mathrm{RTI}=\mathrm{corr}(q(R),q(\sigma))$,式 7.110——风险偏好崩塌时高风险因子跌得最狠,RTI 转负)与多样化比例 DR(各因子加权波动之和除以组合波动——相关性激增时 DR 骤降)。指标报警即降仓,2012 年欧债危机(RTI 报警)与 2013 年"减码恐慌"(DR 报警)中均有效保护了组合。这是因子择时最务实的用法:不猜顶点,只避深渊。
要点
  • 另类数据是未开垦的矿山,但要过五关:技术、领域知识、无偏性、样本长度、增量贡献。
  • 大类资产的收益由少数底层因子驱动;配置因子优于配置资产,前提是造得出因子模拟组合。
  • 因子尾部相关性会在危机中集体抬升;RTI 与 DR 类防御性指标是因子择时最靠谱的应用场景。

本章练习

练习刻意有难度。代码题请准备 Python 环境(numpy / scipy),先自己写,再看提示,最后对答案。

练习 7.1 手写 Barra 式截面 WLS 回归与纯因子组合 代码题

模拟一个 Barra 式市场:400 只股票、5 个行业(哑变量暴露)、3 个风格因子(标准化暴露)、120 期。请你:

  1. 按 Barra 规范构造暴露矩阵:风格暴露做市值加权去均值、截面标准差归一(为避开共线性,本题不含国家因子);
  2. 用回归权重与市值平方根成正比的 WLS,计算纯因子组合权重矩阵 $\boldsymbol{\Omega}$,并数值验证 $\boldsymbol{\Omega}\boldsymbol{X}=\boldsymbol{I}$(目标因子暴露为 1、其他为 0);
  3. 验证风格纯因子组合是资金中性的(权重和为 0),并解释原因;
  4. 逐期估计因子收益率 $\hat{\boldsymbol{f}}_t=\boldsymbol{\Omega}\boldsymbol{r}_t$,与模拟用的真实因子收益率算相关系数。
提示

WLS 不必构造 $N\times N$ 对角阵:X.T * w_reg 的广播恰好等于 X'W。资金中性的关键:行业哑变量各列之和是全 1 向量,全 1 向量在 X 的列空间里,而风格纯因子组合对所有行业列的暴露为 0。

参考答案
import numpy as np
rng = np.random.default_rng(42)

N, P, Q, T = 400, 5, 3, 120          # 股票 / 行业 / 风格因子 / 期数
ind = rng.integers(0, P, N)          # 每只股票所属行业
X_ind = np.eye(P)[ind]               # N x P 行业哑变量
cap = np.exp(rng.normal(0, 1, N))    # 市值(对数正态)
s = cap / cap.sum()                  # 市值权重

# 风格暴露: 市值加权均值为 0, 截面标准差为 1
style = rng.standard_normal((N, Q))
style = style - s @ style
style = style / style.std(axis=0)
X = np.hstack([X_ind, style])        # N x K, K = P + Q, 满秩

# 模拟 T 期收益: 真实因子收益 + 特质收益(方差与市值负相关)
f_true = 0.01 * rng.standard_normal((T, P + Q))
sig_e = 0.05 / cap ** 0.25
R = f_true @ X.T + sig_e * rng.standard_normal((T, N))

# WLS: 回归权重与 sqrt(市值) 成正比
w_reg = np.sqrt(cap) / np.sqrt(cap).sum()
XtW = X.T * w_reg                    # 等价于 X'W (广播, 免建对角阵)
Omega = np.linalg.solve(XtW @ X, XtW)          # K x N 纯因子组合权重

# (2) 纯因子性质: Omega @ X = I
err = np.abs(Omega @ X - np.eye(P + Q)).max()
print("Omega X 与单位阵的最大偏差:", err)       # ~1e-14

# (3) 风格纯因子组合资金中性
print("风格纯因子组合权重和:", (Omega[P:] @ np.ones(N)).round(12))

# (4) 逐期因子收益估计
f_hat = R @ Omega.T
for k in range(P + Q):
    c = np.corrcoef(f_hat[:, k], f_true[:, k])[0, 1]
    print(f"因子 {k}: corr(f_hat, f_true) = {c:.3f}")

解读:$\boldsymbol{\Omega}\boldsymbol{X}=\boldsymbol{I}$ 在数值精度内严格成立——每一行组合对目标因子暴露恰为 1、对其余因子为 0,这就是"纯因子"。资金中性的原因:全 1 向量等于行业哑变量各列之和,风格纯因子组合对每个行业暴露都是 0,权重和 $=\sum_p(\boldsymbol{\Omega}\boldsymbol{X})_{q,p}=0$。因子收益的估计相关系数通常在 0.85~0.98 之间:截面上几百只股票摊薄了特质噪声,但摊不干净——行业内股票只有几十只的行业因子噪声最大。若加入国家因子(全 1 列),$\boldsymbol{X}$ 不再满秩,必须补上式 (7.20) 的约束、改用式 (7.27) 求解。

练习 7.2 实现 Sharpe 风格分析 代码题

模拟一只基金:真实风格权重为 4 个风格指数的 [0.55, 0.25, 0.00, 0.20],外加每周 5bp 的真实选股收益和噪声。请在非负、和为 1 的约束下用最小二乘恢复风格权重,并估计选股贡献与风格解释度 $R^2$。要求风格指数之间高度相关(都含市场成分),以贴近现实。不许调用现成的 QP 求解器(scipy.optimize.nnls 可以用)。

提示

NNLS 天然处理非负约束。等式约束 $\sum b_k=1$ 可以化成一条"权重极大的伪观测"追加到设计矩阵底部:$\lambda\cdot(1,\dots,1)\,\boldsymbol{b} = \lambda$,$\lambda$ 取 1e6 即近似硬约束。也可以用投影梯度:每步梯度下降后把 $\boldsymbol{b}$ 投影回单纯形。

参考答案
import numpy as np
from scipy.optimize import nnls
rng = np.random.default_rng(7)

T, K = 260, 4                        # 周频约 5 年 / 4 个风格指数
mkt = 0.001 + 0.02 * rng.standard_normal(T)
F = mkt[:, None] + 0.008 * rng.standard_normal((T, K))  # 指数间高度相关
b_true = np.array([0.55, 0.25, 0.00, 0.20])
alpha_true = 0.0005                  # 每周 5bp 真实选股能力
R = F @ b_true + alpha_true + 0.004 * rng.standard_normal(T)

# 约束回归 min ||R - F b||^2  s.t. b >= 0, sum(b) = 1
lam = 1e6                            # 等式约束 -> 大权重伪观测
A = np.vstack([F, lam * np.ones((1, K))])
y = np.concatenate([R, [lam]])
b_hat, _ = nnls(A, y)

print("真实权重:", b_true)
print("估计权重:", b_hat.round(3), " 和 =", b_hat.sum().round(6))
resid = R - F @ b_hat
print(f"选股收益: 每周 {resid.mean():.5f} 约合年化 {resid.mean()*52:.2%}")
r2 = 1 - resid.var() / R.var()
print(f"风格解释度 R^2 = {r2:.3f}")

解读:估计权重应接近 [0.55, 0.25, 0, 0.20](真实权重为 0 的风格被非负约束干净地压在边界上——这正是 Sharpe 加约束的动机之一:无约束回归会给它一个虚假的小负数暴露)。残差均值恢复出约 0.05% 的周度选股贡献;$R^2$ 通常在 0.95 以上,印证"基金收益的绝大部分由风格解释"。把 lam 改小(如 10)可以观察约束逐渐失效的过程;把 alpha_true 设为 0 重跑,看看残差检验能否分辨"无技能"。

练习 7.3 风险归因:三要素与 Euler 加总 代码题

给定一个 4 因子模型(市场、规模、价值、动量):因子协方差矩阵、100 只股票的暴露矩阵与组合权重、个股特质波动。请计算组合波动率 $\sigma_p$、每个因子的 MCR 与风险贡献(含特质部分),并数值验证欧拉分解:全部贡献之和恰等于 $\sigma_p$。构造数据时让组合对动量有负暴露、而动量与市场正相关,使动量出现负的风险贡献,并解释其含义。

提示

组合因子暴露 $\boldsymbol{x}=\boldsymbol{X}^{\top}\boldsymbol{w}$。因子与组合的协方差向量就是 $\boldsymbol{\Sigma}_f\boldsymbol{x}$(特质收益与因子无关);特质部分与组合的协方差是 $\sum_i w_i^2\sigma_{e,i}^2$。贡献 $=$ 暴露 × 协方差 / $\sigma_p$。

参考答案
import numpy as np
rng = np.random.default_rng(0)

K, N = 4, 100
names = ["市场", "规模", "价值", "动量"]
vol_f = np.array([0.045, 0.020, 0.018, 0.025])   # 因子月波动
corr_f = np.array([[ 1.0,  0.2, -0.1,  0.3],
                   [ 0.2,  1.0,  0.1, -0.1],
                   [-0.1,  0.1,  1.0, -0.4],
                   [ 0.3, -0.1, -0.4,  1.0]])
Sig_f = corr_f * np.outer(vol_f, vol_f)

X = rng.standard_normal((N, K)) * 0.8
X[:, 0] = 1.0                        # 所有股票市场暴露为 1
X[:, 3] -= 0.3                       # 组合整体对动量负暴露
w = rng.dirichlet(np.ones(N))        # 纯多头权重, 和为 1
sig_e = rng.uniform(0.04, 0.10, N)   # 个股特质月波动

x = X.T @ w                          # 组合因子暴露 (K,)
var_idio = np.sum(w**2 * sig_e**2)
sig_p = np.sqrt(x @ Sig_f @ x + var_idio)

cov_fR = Sig_f @ x                   # cov(f_k, R_p)
mcr = cov_fR / sig_p                 # = sigma(f_k) * rho(f_k, R_p)
contrib_f = x * mcr                  # 因子贡献 x_k * MCR_k
contrib_e = var_idio / sig_p         # 特质贡献

print(f"组合月波动率 = {sig_p:.4f}")
for k in range(K):
    rho = cov_fR[k] / (vol_f[k] * sig_p)
    print(f"{names[k]}: 暴露 {x[k]:+.3f}  波动 {vol_f[k]:.3f}  "
          f"相关 {rho:+.2f}  贡献 {contrib_f[k]:+.4f} "
          f"({contrib_f[k]/sig_p:+.1%})")
print(f"特质贡献 {contrib_e:.4f} ({contrib_e/sig_p:.1%})")
total = contrib_f.sum() + contrib_e
print("Euler 加总检验:", np.isclose(total, sig_p), total, sig_p)

解读:市场因子贡献通常占九成上下——纯多头组合的宿命。动量的贡献为负:组合对动量暴露约 −0.3,而动量因子与市场正相关(corr 0.3)使它与组合整体正相关,"负暴露 × 正相关"相乘为负——这份暴露实际在对冲组合风险。欧拉检验严格通过是因为 $\sigma_p$ 是暴露的一次齐次函数:$\sum_m x_m\,\partial\sigma_p/\partial x_m=\sigma_p$,三要素公式就是把每个偏导数写成 $\sigma(r_m)\rho(r_m,R)$。

练习 7.4 MVO 对收益预测误差有多敏感 代码题

构造 20 个资产的"真实" $\boldsymbol{\mu}$(年化 2%~10%)与常相关($\rho=0.3$)协方差矩阵,先求出真实参数下的无约束 MVO 权重。然后给 $\boldsymbol{\mu}$ 加上标准差为 0.5%、1%、2% 的估计噪声(现实中预期收益的估计误差只会更大),重复 500 次,统计最优权重相对真实权重的平均变动幅度(以真实组合总仓位为分母)。你会得到什么结论?

提示

权重变动可用 $\sum_i|w_i^{\text{noisy}}-w_i^{\text{true}}|\,/\sum_i|w_i^{\text{true}}|$ 度量。想想为什么噪声会被放大:$\boldsymbol{\Sigma}^{-1}$ 的大特征值方向对应"低样本风险",噪声在这些方向上被除以一个很小的数。

参考答案
import numpy as np
rng = np.random.default_rng(1)

N, gamma = 20, 3.0
sig = rng.uniform(0.15, 0.35, N)
Sig = 0.3 * np.outer(sig, sig)
Sig[np.diag_indices(N)] = sig ** 2
mu = rng.uniform(0.02, 0.10, N)

def mvo(m):
    return np.linalg.solve(gamma * Sig, m)

w0 = mvo(mu)
gross0 = np.abs(w0).sum()
print(f"真实权重: 多头合计 {w0[w0>0].sum():.2f}, "
      f"空头合计 {w0[w0<0].sum():.2f}")

for noise in [0.005, 0.01, 0.02]:
    chg, flip = [], []
    for _ in range(500):
        w1 = mvo(mu + noise * rng.standard_normal(N))
        chg.append(np.abs(w1 - w0).sum() / gross0)
        flip.append(np.mean(np.sign(w1) != np.sign(w0)))
    print(f"mu 误差 {noise:.1%}: 权重平均变动 {np.mean(chg):.0%}, "
          f"平均 {np.mean(flip):.0%} 的资产多空方向翻转")

典型结果:真实权重本身已包含大量多空杠杆;哪怕只有 0.5%~1% 的 $\mu$ 估计误差(远低于现实——年化预期收益的估计标准误动辄几个百分点),权重的平均变动就达到总仓位的两位数百分比,2% 噪声下部分资产的多空方向都会频繁翻转。原因在 $\boldsymbol{\Sigma}^{-1}$:优化器把 $\mu$ 的差异投射到样本协方差里"看似低风险"的方向并加杠杆,噪声被这些方向的小特征值放大。这解释了业界的三件事:为什么 MVO 被叫作"误差最大化器"、为什么约束(本身就是收缩)无处不在、为什么只用 $\boldsymbol{\Sigma}$ 的目标函数(最小方差、风险平价)如此流行。

练习 7.5 推导 MVO 解析解,并论证它为何不能直接用 推导题

(1)从 $U(\boldsymbol{w})=\boldsymbol{w}^{\top}\boldsymbol{\mu}-\frac{\gamma}{2}\boldsymbol{w}^{\top}\boldsymbol{\Sigma}\boldsymbol{w}$ 出发,严格推导无约束最优解 $\boldsymbol{w}^{*}=\frac{1}{\gamma}\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$,说明用到的每一个条件;(2)从至少三个角度论证为什么实盘中几乎不能直接使用这个解析解。

参考答案

(1) $U$ 对 $\boldsymbol{w}$ 求梯度:$\nabla U = \boldsymbol{\mu} - \gamma\boldsymbol{\Sigma}\boldsymbol{w}$(用到 $\nabla(\boldsymbol{w}^{\top}\boldsymbol{\mu})=\boldsymbol{\mu}$ 与 $\nabla(\boldsymbol{w}^{\top}\boldsymbol{\Sigma}\boldsymbol{w})=2\boldsymbol{\Sigma}\boldsymbol{w}$,后者依赖 $\boldsymbol{\Sigma}$ 对称)。令梯度为零得 $\gamma\boldsymbol{\Sigma}\boldsymbol{w}=\boldsymbol{\mu}$;若 $\boldsymbol{\Sigma}$ 正定(可逆),则 $\boldsymbol{w}^{*}=\frac{1}{\gamma}\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$。Hessian 为 $-\gamma\boldsymbol{\Sigma}\prec 0$($\gamma>0$ 且 $\boldsymbol{\Sigma}$ 正定),故 $U$ 严格凹,该驻点是全局唯一最大值。用到的条件:$\boldsymbol{\Sigma}$ 对称正定、$\gamma>0$、无任何约束。

(2) 至少三个角度:①输入误差放大——$\boldsymbol{\mu}$ 几乎不可估准,而 $\boldsymbol{\Sigma}^{-1}$ 把误差沿样本低风险方向放大成极端多空仓位(练习 7.4 的实验;样本协方差在 $T$ 不远大于 $N$ 时接近奇异,第 1 章练习 1.4,放大效应更烈);②解不满足现实约束——解析解一般含大量卖空与杠杆、不满足满仓约束,公募产品直接违规,而加上约束后解析解失效、必须数值优化;③无交易成本与换手概念——参数每期变一点,解析解权重就大幅跳动,隐含的换手在扣除线性与冲击成本后往往吞掉全部纸面收益;此外还有④错位问题——收益与风险模型因子不一致时,解析解会把仓位堆向风险模型看不见的 $\boldsymbol{\mu}_{\perp}$ 方向(7.3.2 节)。所以解析解的价值是提供直觉($\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}$ 的结构、各目标函数的等价条件),实际权重永远来自带约束、带成本、带对齐处理的数值优化。

练习 7.6 错位问题:后果与解药 简答题

某私募用自研收益模型(含独门的"分析师预期修正"变量)产生 $\boldsymbol{\mu}$,用外购的 Barra 模型做风险控制,直接代入 MVO。请(1)用正交分解的语言说明这套流程会产生什么系统性后果;(2)给出至少三种缓解方案,并各自指出其局限;(3)讨论一个微妙情形:如果该私募的独门变量确实携带真实 α,是否还应该惩罚 $\boldsymbol{\mu}_{\perp}$?

参考答案

(1) 把 $\boldsymbol{\mu}$ 对 Barra 因子暴露矩阵的列空间做正交分解 $\boldsymbol{\mu}=\boldsymbol{\mu}_{\parallel}+\boldsymbol{\mu}_{\perp}$。"分析师预期修正"不在 Barra 因子体系内,其预测大部分落进 $\boldsymbol{\mu}_{\perp}$。由于 $\boldsymbol{X}_R^{\top}\boldsymbol{\mu}_{\perp}=\boldsymbol{0}$,风险模型给这个方向计的风险只有特质项($\boldsymbol{\Sigma}\boldsymbol{\mu}_{\perp}=\sigma_u^2\boldsymbol{\mu}_{\perp}$),优化器于是系统性超配 $\boldsymbol{\mu}_{\perp}$ 方向:事前显示的组合风险被低估、事后实现波动超标,组合在一个"未被定价的隐因子"上积累了大量看不见的暴露;一旦该方向变成拥挤交易并反转,回撤远超风险预算。

(2) 方案与局限:①对齐因子体系——把收益模型的变量加入风险模型重估(或替换相似列/删除重复因子)。局限:商用模型改不动;"相似因子"的判定模糊;自建风险模型的统计质量难以匹敌商用模型多年的调校。②显式惩罚——目标函数加 $-\frac{\theta}{2}(\boldsymbol{w}^{\top}\hat{\boldsymbol{\mu}}_{\perp})^2$,等价于把 $\theta\hat{\boldsymbol{\mu}}_{\perp}\hat{\boldsymbol{\mu}}_{\perp}^{\top}$ 并入协方差。局限:$\theta$ 无理论闭式,需用 $\boldsymbol{\mu}_{\perp}$ 方向的实现波动校准,校准本身有估计误差。③约束兜底——收紧跟踪误差、行业/风格中性与个股上限,机械地限制任何方向的极端仓位。局限:无差别限制,把真 α 也一起削了。(其他可接受的答案:只用收益模型的排序做非参数选股、再用风险模型做等权池内的风控,从根上避免把 $\boldsymbol{\mu}$ 的数值喂给优化器。)

(3) 仍应惩罚,但强度要对。"无法被风险模型解释"只说明该方向与已知因子正交,不说明它没有波动——盈亏同源,真实 α 也伴随真实风险。正确的 $\theta$ 应使惩罚等价于该方向真实的方差(例如用 $\boldsymbol{\mu}_{\perp}$ 方向组合的历史实现波动估计),此时优化器对它的配置回到"收益与风险相称"的水平:既不像 $\theta=0$ 那样把它当免费午餐,也不像 $\theta\to\infty$ 那样把独门信号掐死。极端情况才取极端值:若怀疑 $\boldsymbol{\mu}_{\perp}$ 是收益模型的噪声残渣(两个模型因子几乎同构时常见),$\theta$ 应取大直接清零该方向。