第 1 章

因子投资基础

整个因子投资,可以围绕一个公式展开。这一章把这个公式立起来,解释清楚它的三个成分——因子、多因子模型、异象——然后沿着学术界和业界两条线,看清这门学科从哪里来、现在长什么样。读完本章,你会拥有一张可以挂住后面所有章节的"地图"。

1.1一个公式:因子投资的统一视角

从 CAPM 说起

先问一个朴素的问题:为什么有的资产预期收益高,有的低?在 20 世纪 60 年代之前,没人能给出定量的回答。1958 年 Modigliani 和 Miller 提出著名的 MM 定理,说明在理想市场里企业价值与融资方式无关,但"风险如何决定收益"反而更加扑朔迷离。第一个把这件事说清楚的,是资本资产定价模型(Capital Asset Pricing Model,CAPM)。

式 (1.1) · CAPM:资产的预期超额收益
$$ \E[R_i] - R_f \;=\; \beta_i \left( \E[R_M] - R_f \right) $$
$\E[\cdot]$期望符号:长期平均意义上的取值
$R_i$资产 $i$ 的收益率
$R_f$无风险收益率(如国债利率);$\E[R_i]-R_f$ 就是"超额收益"——冒险比不冒险多赚的部分
$R_M$市场组合(可以理解为"整个股市")的收益率,$\E[R_M]-R_f$ 称为市场风险溢价
$\beta_i$$= \Cov(R_i, R_M)\,/\,\Var(R_M)$,资产 $i$ 对市场涨跌的敏感度,也叫对市场风险的暴露
一只股票值得给你多少超额回报,只取决于一件事:它跟整个市场"共沉浮"的程度。市场每涨 1%,它平均跟涨 β%;承担的市场风险越多(β 越大),应得的补偿越多。跟市场无关的波动(比如某公司自己的意外)可以靠分散化消掉,所以市场不为它付钱。

CAPM 是最简单的线性因子模型:它只有一个因子——市场因子。但人们很快发现,单靠市场因子解释不了现实。1976 年 Ross 提出套利定价理论(Arbitrage Pricing Theory,APT),把"一个因子"推广成"一组因子",得到线性多因子定价模型:

式 (1.2) · 多因子模型:预期收益的截面结构
$$ \E[R_i^e] \;=\; \boldsymbol{\beta}_i^{\top} \boldsymbol{\lambda} \;=\; \beta_{i1}\lambda_1 + \beta_{i2}\lambda_2 + \cdots + \beta_{iK}\lambda_K $$
$\E[R_i^e]$资产 $i$ 的预期超额收益。上标 $e$ 表示 excess;文献中约定俗成简称"预期收益"
$K$模型中因子的个数(主流模型通常 3~5 个)
$\boldsymbol{\beta}_i$$K$ 维向量:资产 $i$ 在每个因子上的因子暴露(factor exposure),又称因子载荷(factor loading)
$\boldsymbol{\lambda}$$K$ 维向量:每个因子的预期收益率,称为因子溢价(factor risk premium)
把资产收益看成"配方":$\lambda_k$ 是第 $k$ 种"原料"的单价,$\beta_{ik}$ 是资产 $i$ 里这种原料放了多少。资产之间预期收益的差异,完全来自配方比例(β)的差异——原料价格(λ)对所有资产是同一份。
旁注

为什么用 $\E[R_i^e]$ 而不写 $\E[R_i]-R_f$?因为研究对象除了"纯多头"资产(股票、基金),还有一类多空对冲组合:做多一篮子股票、同时做空等金额的另一篮子。这类组合不占用净资金,它的超额收益天然就是多头减空头,不需要再减 $R_f$。写成 $R^e$ 对两类资产都成立,更有一般性。

定价误差:公式的最后一块拼图

式 (1.2) 描述的是市场均衡状态下"应该"的样子。现实中把任何一个资产拿来对照,左右两边往往不相等,差值记作 $\alpha_i$:

式 (1.3) · 全书的核心公式:带定价误差的多因子模型
$$ \E[R_i^e] \;=\; \alpha_i + \boldsymbol{\beta}_i^{\top} \boldsymbol{\lambda} $$
$\alpha_i$定价误差(pricing error):资产实际的预期收益,减去多因子模型"认为它应得"的部分,剩下的无法解释的残余
$\boldsymbol{\beta}_i^{\top}\boldsymbol{\lambda}$模型能解释的部分:承担系统性风险换来的补偿
这个公式把任何资产的收益切成两块:β 收益——"坐上了正确的船"应得的钱;α 收益——船票之外多赚(或少赚)的钱。因子投资的全部内容,都是围绕这两块展开的。

$\alpha_i$ 显著不为零,只有两种可能的解释:

  • 模型错了——式 (1.2) 右边漏掉了重要的因子(模型设定偏误),补上缺失因子后误差消失;
  • 市场错了——模型没问题,但该资产被错误定价(mispricing),存在可以套利的超额收益机会。

当然还有第三种平凡的情况:数据只是总体的一个样本,$\alpha_i$ 的估计值偏离零可能纯属运气。所以"显著"两个字很关键——必须用统计检验说话,这正是第 2 章的主题。

三个成分:因子、多因子模型、异象

因子 factor

一群资产同时涨、同时跌背后的那个"共同原因";长期持有暴露于这个原因的资产,能赚到一份补偿。

严格定义:一个因子描述了众多资产共同暴露的某种系统性风险,这种风险是资产收益率背后的驱动力;因子收益率是这种风险的风险溢价,是这些资产的共性收益。

由定义可以推出因子必须满足的两个必要条件:(1)因子驱动资产收益的共同运动(co-movement),因此它一定与资产收益率的协方差矩阵有关;(2)因子长期能获得正收益,即它必须是被定价的(priced)——市场真的为这种风险付钱。两个条件缺一不可:只有共同运动而没有溢价,只是统计上的相关;只有收益而不驱动共同运动,更可能是错误定价而非风险。

类比

Ang(2014)有一个流传很广的类比:因子之于资产,就像营养之于食物。米饭、肉类、乳制品五花八门,但对身体真正起作用的是背后的碳水、蛋白质、脂肪等营养成分。每种食物的价值取决于:它含哪些营养、含多少(对应 $\beta_i$);每种营养对健康多重要(对应 $\lambda$)。同理,股票组合形式成百上千,归根结底都是有限几种因子的不同配比。投资者吃的是"食物"(股票),补的是"营养"(因子)。

多因子模型 multi-factor model

挑几个相互独立、各自都真正重要的因子,组成一台解释"谁的预期收益该高、谁该低"的机器。

把若干因子放在一起就是一个多因子模型,对应式 (1.3) 中 $\boldsymbol{\beta}_i^{\top}\boldsymbol{\lambda}$ 的部分。因子不是越多越好,挑选时有两条原则:(1)相关性——高度相关的因子代表同一类风险,入选的因子应相互独立、各自对解释截面差异有显著的增量贡献;(2)简约法则(The Law of Parsimony)——因子代表的是共性风险,个数必然有限。学术界主流模型通常只含 3~5 个因子(第 4 章详述)。

异象 anomaly

一种"按理说不该赚钱却持续赚钱"的组合:它的收益里有一块,现有模型怎么也解释不掉。

选定多因子模型后,若按某个指标(财务指标或量价指标)把股票排序、做多一端做空另一端构建的组合,其 $\alpha_i$ 显著大于零,则该组合是一个异象,构建它的指标称为异象变量(anomaly variable)。注意:异象永远是相对于某个模型而言的——换一个更强的模型,异象可能就消失了。

误区

口语里"因子"一词经常混用,务必分清两个身份:进入定价模型 $\boldsymbol{\beta}_i^{\top}\boldsymbol{\lambda}$ 的叫定价因子(pricing factors);产生模型解释不了的超额收益 $\alpha_i$ 的叫异象因子(anomaly factors)。学术界严格区分二者——模型要简约,装不下的都算异象;业界则不太计较这个身份,只关心扣掉交易成本后还能不能赚钱。本手册说"因子"默认指定价因子,说"异象"指 $\alpha_i$ 的部分。

α 是相对于模型而言的:一个可视化

下图是 CAPM 世界里的"证券市场线"(Security Market Line):横轴是 β,纵轴是年化平均超额收益。模型认为所有资产都应落在直线 $\E[R^e]=\beta\cdot\lambda_M$ 上;偏离直线的垂直距离就是 α。拖动滑杆改变市场风险溢价 $\lambda_M$(相当于换一个"模型参数"),观察各资产的 α 如何变化——同一份数据,模型不同,α 就不同

图 1-1 | 证券市场线与定价误差 α(模拟数据,示意)。散点为 9 个资产的样本平均收益,虚线为当前 λM 下 CAPM 隐含的公平定价线。悬停可查看每个资产在当前模型下的 α。

因子投资包含的内容:β 的生意与 α 的生意

围绕式 (1.3),学术界和业界各自关心什么?可以整理成一张表:

学术界业界
关注 $\boldsymbol{\beta}^{\top}\boldsymbol{\lambda}$ 找"最好"的多因子模型——让所有资产的 α 尽可能接近零;研究因子背后的成因;对主动基金做业绩归因(结论:选对模型后,绝大多数主动管理人并无超额收益) 资产配置:找长期溢价高的因子(λ 大),以尽量高的暴露(β 大)分散地配置上去;Smart Beta ETF 是这门生意的产品化
关注 $\alpha$ 异象是评判市场是否有效、模型是否正确的证据;"谁解释掉的异象多,谁就是更好的模型" 不纠结因子的学术身份,只关心扣除交易成本后能否持续获得超额收益

换一个轴看世界:截面角度 vs 时序角度

截面 vs 时序 cross-section vs time-series

截面问的是"同一时刻,为什么 A 股票比 B 股票预期赚得多";时序问的是"同一只股票(或因子),收益怎么随时间起落"。

式 (1.3) 是关于均值的模型(model of the mean):它只关心不同资产收益率的长期平均为什么有高有低,这是截面视角。把它沿时间轴展开,就得到时序视角下的多元回归:

式 (1.4) · 时序展开:逐期的收益分解
$$ R_{i,t}^e \;=\; \alpha_i + \boldsymbol{\beta}_i^{\top} \boldsymbol{\lambda}_t + \varepsilon_{i,t} $$
$R_{i,t}^e$资产 $i$ 在第 $t$ 期实现的超额收益(不再是期望)
$\boldsymbol{\lambda}_t$第 $t$ 期各因子实现的收益率;对时间取期望得回 $\boldsymbol{\lambda}$
$\varepsilon_{i,t}$随机扰动:该期属于资产 $i$ 自己的、与因子无关的波动,$\E[\varepsilon_{i,t}]=0$
截面模型 (1.3) 是这台机器的"平均产出",时序模型 (1.4) 是它"每一期的运转记录"。对 (1.4) 两边取时间平均,$\varepsilon$ 项消失,就回到 (1.3)。

把 $N$ 个资产的时序方程堆叠成向量形式 $\boldsymbol{R}_t^e = \boldsymbol{\alpha} + \boldsymbol{\beta}\boldsymbol{\lambda}_t + \boldsymbol{\varepsilon}_t$(其中 $\boldsymbol{\beta}$ 是 $N\times K$ 暴露矩阵),对两边求协方差矩阵,利用 $\Cov(\boldsymbol{\lambda}_t,\boldsymbol{\varepsilon}_t)=0$,得到因子投资里另一个分量级的公式:

式 (1.6) · 方差的模型:协方差矩阵的因子结构
$$ \boldsymbol{\Sigma} \;=\; \boldsymbol{\beta}\, \boldsymbol{\Sigma}_{\lambda}\, \boldsymbol{\beta}^{\top} + \boldsymbol{\Sigma}_{\varepsilon} $$
$\boldsymbol{\Sigma}$$N$ 个资产收益率的协方差矩阵($N\times N$)——组合风险管理最想要的东西
$\boldsymbol{\Sigma}_{\lambda}$$K$ 个因子收益率的协方差矩阵($K\times K$),$K \ll N$
$\boldsymbol{\beta}$$N\times K$ 因子暴露矩阵
$\boldsymbol{\Sigma}_{\varepsilon}$特质性扰动的协方差矩阵;假设各资产的 $\varepsilon$ 互相独立,它是对角阵,只有 $N$ 个非零元素
资产间的相关性不需要一对一对地去估计——它们相关,只是因为都挂在同几个因子上。把 $N\times N$ 的大问题(约 $N^2/2$ 个参数)拆成 $K\times K$ 的小问题加一列对角线,这是一次巨大的降维。
例子

用样本数据直接估计协方差矩阵,数学上要求样本期数 $T \ge N$,否则矩阵不可逆、组合优化无解(Ledoit 和 Wolf 进一步指出 $T$ 需比 $N$ 高一个数量级才估得准)。A 股有 3000 多只股票,直接估计意味着需要几万个月的数据——不可能。而 Barra 的中国模型 CNE6 只用 1 个国家因子、9 个风格因子加一组行业因子,就刻画了 3000 多只股票的协方差结构。下图对比两种做法需要估计的参数个数:

图 1-2 | 估计 N 只股票的协方差矩阵需要的参数个数(对数无法用同轴表达,此处直接展示数值,单位:万个;因子模型按 K=10 计)。

时序角度还有另一个重要课题:因子择时(factor timing)。因子收益率在时间上有起有落、且与宏观环境相关,如果能在因子"好使"时配置、"不好使"时规避,收益会大幅提升。这是业界长盛不衰的研究热点,也是出了名的难题(第 7 章详述)。

要点
  • 核心公式 $\E[R_i^e] = \alpha_i + \boldsymbol{\beta}_i^{\top}\boldsymbol{\lambda}$ 把收益切成模型能解释的 β 收益和解释不了的 α。
  • 因子 = 驱动共同运动 + 长期被定价,两个条件缺一不可。
  • 异象是相对于模型的:模型变强,异象可能消失。
  • 均值的模型(截面)管收益预测,方差的模型(式 1.6)管风险控制——多因子模型一鱼两吃。
  • 学术界追求"α 全为零的好模型",业界追求"β 配置 + 扣费后仍在的 α"。

1.2学术起源:从便宜股到因子动物园

因子研究的学术脉络将近一个世纪,抓住这条时间线,后面各章出现的人名和方法就都有了坐标:

年代里程碑意义
1934Graham 和 Dodd《证券分析》提出价值溢价的思想雏形,业界"圣经"
1964 前后CAPM(Treynor、Sharpe、Lintner、Mossin 各自独立提出)第一次定量刻画风险与收益的关系
1970Fama 有效市场假说与联合假说此后所有实证资产定价研究的总框架
1973Fama–MacBeth 回归为检验 CAPM 而生,却成为因子研究的通用统计武器(第 2 章)
1976Ross 套利定价理论 APT从一个因子到一组因子
1977 / 1981Basu 便宜股效应 / Banz 小市值效应最早一批打脸 CAPM 的"异象"
1982Hansen 广义矩估计 GMM检验定价模型的计量武器库(第 2 章)
1984Shiller 噪音交易者模型行为金融学的起点(第 6 章)
1989GRS 检验"这组资产的 α 是否联合为零"的正式检验(第 2 章)
1992–1993Fama–French 三因子模型整合规模与价值异象,成为全球实证研究的基准模型(第 4 章)
2011Cochrane 提出"因子动物园"对挖因子狂潮的当头棒喝(第 6 章)
2013Fama、Hansen、Shiller 同获诺贝尔经济学奖实证资产定价的巅峰时刻——有趣的是三人观点针锋相对
2015 之后FF5、HXZ q-factor 等新模型混战;Harvey 等人提高 t 值门槛"因子大战"与可复现性反思(第 4、6 章)
联合假说问题 joint hypothesis problem

想检验"市场是否有效",必须先假设一个定价模型;结果一旦异常,你分不清是市场错了还是模型错了——两个假设永远绑在一起受审。

出自 Fama(1970)。要判断价格是否"正确",得先知道正确价格是什么,而这只能由某个资产定价模型给出。于是任何"市场无效"的证据,同时也是"模型有误"的证据,反之亦然。这个看似绕口的逻辑是理解全部实证资产定价文献的钥匙——它解释了为什么发现异象后,学术界总是分成"市场错了"(行为金融)和"模型漏了因子"(风险补偿)两派吵个不停。

数据窥探 data snooping

先偷看数据、再"提出"假设去检验它——考试前偷看了答案,考出高分不代表你会。

学术界已经挖出超过 400 个"因子",在发表偏差和多重假设检验的影响下,其中大多数只是数据窥探的产物。Cochrane 2011 年用"因子动物园"(factor zoo)形容这一乱象,并抛出三问:哪些因子是独立的?哪些是重要的?因子驱动价格的原因是什么?此后 Harvey 等人(2016)主张把因子显著性的 t 值门槛从 2.0 提到 3.0,Chordia 等人(2020)进一步提到 3.4 以上;McLean 和 Pontiff(2016)发现因子在论文发表后的样本外收益平均缩水一半以上。这些内容第 6 章会系统展开。

要点
  • 因子研究的主线:CAPM 提出 → 异象打脸 → 多因子模型收编异象 → 新异象再打脸 → 循环往复。
  • 联合假说问题决定了"检验市场"与"检验模型"不可分离。
  • 对 400+ 因子保持怀疑:样本外缩水、t 值门槛提高是这个领域的自我纠错。

1.3业界发展:管理人与投资者

管理人视角的五个课题

对基金管理人来说,论文里诱人的因子收益要落地,绕不开以下几件事,它们也构成了第 7 章的目录雏形:

  • 收益预测还是风险管理?同一套多因子模型,有人用截面视角预测收益(选股),有人用时序视角估协方差矩阵(控风险),也有人两者兼用再做组合优化。
  • 资金流入会削弱因子。策略赚钱靠的是市场的某种非有效性,用的人多了,非有效性就被抹平。
  • 因子择时。按因子估值择时(Research Affiliates 为代表)与按因子动量择时(AQR 为代表)是两大对立门派,两家公司多年来互发论文证明对方逻辑有缺陷,是业界著名的学术论战。
  • 区分 α 与 β 收益。Bender 等人(2014)的研究表明,主动管理人的超额收益约 80% 可由因子暴露解释,真正的 α 只占约 20%。付主动管理的费用买 β,是投资者最应避免的事。
  • 创新。另类数据(舆情、专利、新闻)与机器学习是新的收益来源,但金融数据信噪比极低,需要格外冷静(第 6、7 章)。
因子拥挤 factor crowding

太多资金追同一个因子,收益被摊薄不说,一旦风吹草动大家夺门而逃,踩踏本身就是新的风险。

使用相似指标、相近调仓频率的策略会加剧拥挤。2007 年 8 月的"量化地震"(Quant Meltdown)是教科书级案例:美股大量量化基金在几天内竞相平掉相似头寸,抛压引发流动性危机,许多长期优秀的对冲基金在短时间内录得巨亏。如何度量拥挤度并规避它,是管理人必须回答的问题(第 6 章 6.6 节)。

投资者视角:Smart Beta 的兴起

Smart Beta smart beta ETF

把学术界发现的因子做成便宜的指数基金:不追求神秘的 α,而是用透明规则、低费率批量买入某种因子暴露。

脉络:1987 年罗素推出最早的价值/成长风格指数(初衷是评估基金经理业绩)→ 1992 年先锋(Vanguard)推出第一批价值/成长指数基金 → 此后各类因子被批量产品化。到 2018 年,《经济学人》估算因子类 ETF 总规模已超过 6500 亿美元。它让普通投资者第一次能以极低成本"购买因子"——前提是会挑。

误区

"跟踪同一个因子的 ETF 都差不多"——错。同是价值因子 ETF,不同产品在选股池、加权方式、费率、流动性上差异巨大,历史表现能差出一截。更扎心的是 Choi 等人(2009)的实验:让受试者从若干同样跟踪标普 500 的被动 ETF 里挑一只——理性上唯一该比的是费率——绝大多数人却被不同区间的历史收益率迷惑,选了"过去涨得多"的那只。挑选因子产品时,先看逻辑与费率,再看历史收益。

要点
  • 管理人的功课:收益 vs 风险两种用法、拥挤、择时、α/β 之辨、创新。
  • 主动收益的约八成其实是 β——为 β 支付 α 的价格是最常见的浪费。
  • Smart Beta 把因子产品化,但同名产品差异巨大,挑选本身就是能力。

1.4这本手册的地图

原书七章可以完整地挂在式 (1.3) 的统一视角上,本手册沿用这个结构:

对应公式成分回答的问题
第 2 章 方法论整个式 (1.3)怎么估计 β 和 λ?怎么检验 α 是否显著?——排序法、Fama–MacBeth、GRS、GMM 等统计武器
第 3 章 主流因子$\boldsymbol{\lambda}$市场、规模、价值、动量、盈利、投资、换手率——每个因子的起源、成因与 A 股实证
第 4 章 多因子模型$\boldsymbol{\beta}^{\top}\boldsymbol{\lambda}$七大主流模型逐一拆解;哪个模型适合 A 股
第 5 章 异象研究$\alpha$预期差、基本面锚定反转、特质性波动率三个精选异象
第 6 章 研究现状对整个框架的反思p-hacking、因子大战、行为金融解释、机器学习
第 7 章 投资实践从公式到组合收益模型、Barra 风险模型、组合优化、Smart Beta、因子择时、归因
附录 A公式的理论地基资产价格从何而来:随机折现因子与效用理论

本章练习

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

练习 1.1 在模拟市场中恢复因子溢价 代码题

下面的代码生成一个"CAPM 严格成立"的模拟市场:50 个资产、600 个月,每个资产只暴露于市场因子。请你:

  1. 用每个资产 600 个月的平均超额收益作纵轴、真实 β 作横轴,做一次截面 OLS 回归,验证斜率接近真实的 λ = 0.6%/月,截距接近 0;
  2. 在市场中加入第 51 个资产:β = 1,但每月额外多赚 0.5%(真 α)。对它做时序回归 R51 = a + b * f + e,计算 a 的 t 统计量,判断在 600 个月的样本下能否在 5% 水平上拒绝 a = 0;
  3. 把样本缩短到 120 个月重复第 2 步。你发现了什么?这对"用十年数据评价一个策略的 α"意味着什么?
import numpy as np
rng = np.random.default_rng(42)

N, T = 50, 600
lam_M, sig_M = 0.006, 0.045        # 市场因子月均收益与波动
beta = rng.uniform(0.5, 1.5, N)     # 真实 beta
f = lam_M + sig_M * rng.standard_normal(T)          # 市场因子收益序列
eps = 0.06 * rng.standard_normal((T, N))            # 特质波动
R = f[:, None] * beta[None, :] + eps                # T x N 超额收益
提示

第 1 问:np.polyfit(beta, R.mean(axis=0), 1) 就够了。第 2 问:时序回归的 t 统计量 = 估计值 / 标准误,标准误可用 残差方差 / (T * var(f)) 推出截距的方差公式,或直接用 statsmodels 的 OLS。第 3 问的关键:α 的 t 值随 $\sqrt{T}$ 增长,月度 α=0.5%、特质波动 6% 时,信噪比大约是 0.083/月,想让 t 超过 2 需要多少个月?

参考答案
import numpy as np
rng = np.random.default_rng(42)
N, T = 50, 600
lam_M, sig_M = 0.006, 0.045
beta = rng.uniform(0.5, 1.5, N)
f = lam_M + sig_M * rng.standard_normal(T)
eps = 0.06 * rng.standard_normal((T, N))
R = f[:, None] * beta[None, :] + eps

# --- (1) 截面回归:平均收益 对 beta ---
slope, intercept = np.polyfit(beta, R.mean(axis=0), 1)
print(f"截距 = {intercept:.4%}(应≈0), 斜率 = {slope:.4%}(应≈{lam_M:.2%})")

# --- (2) 加入真 alpha 资产,时序回归 ---
def alpha_tstat(T_use, alpha_true=0.005, seed=7):
    r = np.random.default_rng(seed)
    f2 = lam_M + sig_M * r.standard_normal(T_use)
    R51 = alpha_true + 1.0 * f2 + 0.06 * r.standard_normal(T_use)
    X = np.column_stack([np.ones(T_use), f2])
    coef, res_ss, *_ = np.linalg.lstsq(X, R51, rcond=None)
    resid = R51 - X @ coef
    s2 = resid @ resid / (T_use - 2)
    cov = s2 * np.linalg.inv(X.T @ X)
    return coef[0], coef[0] / np.sqrt(cov[0, 0])

a600, t600 = alpha_tstat(600)
a120, t120 = alpha_tstat(120)
print(f"T=600: alpha={a600:.4%}, t={t600:.2f}")   # t 约 2 上下,勉强显著
print(f"T=120: alpha={a120:.4%}, t={t120:.2f}")   # t 明显小于 2,无法拒绝

要点:α 的 t 值近似为 $\dfrac{\alpha}{\sigma_{\varepsilon}}\sqrt{T}$。月 α=0.5%、特质波动 6%,信息比率约 0.083/月,需要 $T \approx (2/0.083)^2 \approx 580$ 个月(近 50 年!)才能稳定地"证明"它显著。十年的月度数据几乎不可能从统计上确认一个真实存在的、每年 6% 的 α——这就是第 2 章要用更精细的方法、第 6 章要警惕 p-hacking 的根本原因:好 α 难证真,假 α 却容易蒙混过关。

练习 1.2 推导方差的模型 推导题

从堆叠的时序模型 $\boldsymbol{R}_t^e = \boldsymbol{\alpha} + \boldsymbol{\beta}\boldsymbol{\lambda}_t + \boldsymbol{\varepsilon}_t$ 出发:

  1. 严格推导 $\boldsymbol{\Sigma} = \boldsymbol{\beta}\boldsymbol{\Sigma}_{\lambda}\boldsymbol{\beta}^{\top} + \boldsymbol{\Sigma}_{\varepsilon}$,并指出推导中每一步用到了哪个假设;
  2. 说明若 $\Cov(\boldsymbol{\lambda}_t, \boldsymbol{\varepsilon}_t) \ne 0$,公式会多出哪一项;
  3. 举一个现实场景,说明"$\boldsymbol{\Sigma}_{\varepsilon}$ 是对角阵"这个假设会失效(提示:想想同行业的两家公司)。失效时对组合风险估计的偏差方向是什么?
参考答案

(1) 协方差算子对常数向量 $\boldsymbol{\alpha}$ 不敏感,故 $\boldsymbol{\Sigma} = \Cov(\boldsymbol{\beta}\boldsymbol{\lambda}_t + \boldsymbol{\varepsilon}_t) = \boldsymbol{\beta}\Cov(\boldsymbol{\lambda}_t)\boldsymbol{\beta}^{\top} + \boldsymbol{\beta}\Cov(\boldsymbol{\lambda}_t,\boldsymbol{\varepsilon}_t) + \Cov(\boldsymbol{\varepsilon}_t,\boldsymbol{\lambda}_t)\boldsymbol{\beta}^{\top} + \Cov(\boldsymbol{\varepsilon}_t)$。 用到假设 $\Cov(\boldsymbol{\lambda}_t,\boldsymbol{\varepsilon}_t)=0$ 消去中间两项(β 视为非随机常数矩阵),即得结论。

(2) 会多出 $\boldsymbol{\beta}\boldsymbol{\Sigma}_{\lambda\varepsilon} + \boldsymbol{\Sigma}_{\lambda\varepsilon}^{\top}\boldsymbol{\beta}^{\top}$ 两项,其中 $\boldsymbol{\Sigma}_{\lambda\varepsilon}=\Cov(\boldsymbol{\lambda}_t,\boldsymbol{\varepsilon}_t)$。

(3) 同一行业的两家公司(如两家白酒企业)会同时受行业新闻冲击,若模型里没有行业因子,这部分共同波动就留在 $\varepsilon$ 里,使 $\boldsymbol{\Sigma}_{\varepsilon}$ 出现正的非对角元素。假设对角阵会低估持有同行业多只股票的组合风险——共同波动被当成可分散的特质波动"分散掉"了,而实际上分散不掉。这正是 Barra 类模型必须加入行业因子的原因(第 7 章)。

练习 1.3 因子模型 vs 样本协方差:一场风险预测比赛 代码题

模拟一个 $K=3$ 因子驱动的市场:$N=400$ 只股票,用前 $T=250$ 天作估计窗口、后 250 天作检验窗口。分别用(a)样本协方差矩阵、(b)因子模型协方差 $\hat{\boldsymbol{\beta}}\hat{\boldsymbol{\Sigma}}_f\hat{\boldsymbol{\beta}}^{\top} + \hat{\boldsymbol{D}}$ 预测 200 个随机等权组合(每个含 30 只股票)在检验窗口的波动率,比较两者预测误差。注意 $T < N$,样本协方差是奇异的——这道题会让你亲眼看到它输在哪里。

提示

因子模型这边:对每只股票做 250 天收益对 3 个因子收益的时序 OLS 得 $\hat{\boldsymbol{\beta}}$(用矩阵形式一次算完:B = R.T @ F @ inv(F.T @ F),先中心化);$\hat{\boldsymbol{D}}$ 取残差方差的对角阵。组合预测波动率 $=\sqrt{\boldsymbol{w}^{\top}\hat{\boldsymbol{\Sigma}}\boldsymbol{w}}$,与检验窗口的实现波动率比较平均绝对误差。

参考答案
import numpy as np
rng = np.random.default_rng(0)
N, K, T = 400, 3, 250

# 真实结构
B_true = rng.normal(0, 1, (N, K)) * np.array([1.0, 0.5, 0.3])
sig_f = np.array([0.010, 0.006, 0.004])       # 因子日波动
sig_e = rng.uniform(0.01, 0.03, N)            # 特质日波动

def simulate(T):
    F = rng.standard_normal((T, K)) * sig_f
    E = rng.standard_normal((T, N)) * sig_e
    return F, F @ B_true.T + E

F_in, R_in = simulate(T)      # 估计窗口
_,   R_out = simulate(250)    # 检验窗口(同一真实结构的新样本)

# (a) 样本协方差(T < N,奇异但仍可算二次型)
Rc = R_in - R_in.mean(0)
S_sample = Rc.T @ Rc / (T - 1)

# (b) 因子模型协方差
Fc = F_in - F_in.mean(0)
B_hat = np.linalg.solve(Fc.T @ Fc, Fc.T @ Rc).T      # N x K
resid = Rc - Fc @ B_hat.T
D_hat = np.diag(resid.var(0, ddof=K + 1))
Sig_f = np.cov(F_in.T)
S_factor = B_hat @ Sig_f @ B_hat.T + D_hat

# 比赛:200 个随机 30 股等权组合
err_s, err_f = [], []
for _ in range(200):
    idx = rng.choice(N, 30, replace=False)
    w = np.zeros(N); w[idx] = 1 / 30
    realized = R_out @ w
    vol_true = realized.std(ddof=1)
    for S, err in [(S_sample, err_s), (S_factor, err_f)]:
        vol_pred = np.sqrt(w @ S @ w)
        err.append(abs(vol_pred - vol_true) / vol_true)

print(f"样本协方差 平均相对误差: {np.mean(err_s):.1%}")
print(f"因子模型   平均相对误差: {np.mean(err_f):.1%}")

典型结果:因子模型的误差显著更小(往往只有样本协方差的一半左右)。原因:样本协方差要从 250 个观测里估出 $400\times401/2 \approx 8$ 万个参数,噪声淹没了信号,且矩阵奇异意味着存在"预测波动为零"的伪套利方向;因子模型只估 $400\times3 + 6 + 400 \approx 1600$ 个参数,牺牲一点灵活性换来了巨大的稳定性。这就是式 (1.6) 的实战价值。

练习 1.4 为什么 T < N 时样本协方差必然奇异 证明题

设 $\boldsymbol{X}$ 为 $T\times N$ 的(已按列去均值的)收益率矩阵,样本协方差 $\boldsymbol{S} = \boldsymbol{X}^{\top}\boldsymbol{X}/(T-1)$。证明:当 $T \le N$ 时 $\boldsymbol{S}$ 必然不可逆;并解释这在投资组合优化中会造成什么荒谬的结论。

参考答案

矩阵秩的性质:$\mathrm{rank}(\boldsymbol{S}) = \mathrm{rank}(\boldsymbol{X}^{\top}\boldsymbol{X}) = \mathrm{rank}(\boldsymbol{X}) \le \min(T, N)$。又因去均值使 $\boldsymbol{X}$ 的行向量和为零向量,秩至多为 $T-1$。故 $T \le N$ 时 $\mathrm{rank}(\boldsymbol{S}) \le T-1 < N$,$N$ 阶方阵秩亏,必然奇异。

荒谬后果:奇异意味着存在非零权重向量 $\boldsymbol{w}$ 使 $\boldsymbol{w}^{\top}\boldsymbol{S}\boldsymbol{w} = 0$——模型认为存在"零风险"的非平凡组合。均值–方差优化器会疯狂加杠杆押注这些方向(它们只是样本中的巧合),实盘中风险巨大。这就是脚注里"协方差矩阵的逆出现在最优权重表达式中"的深意:优化器对协方差估计误差极其敏感,垃圾进、杠杆化的垃圾出。

练习 1.5 给"新因子"做一次身份审查 简答题

某研究员向你展示"因子 X":按上市公司名称的笔画数排序构建的多空组合,2015—2024 年在 A 股年化超额收益 8%,t 值 2.3。请结合本章概念,从因子的两个必要条件数据窥探联合假说三个角度写出完整的质疑框架,并给出你会要求补做的至少四项检验。

参考答案

必要条件角度:(1)共同运动——笔画数没有理由驱动收益率的协同波动,可检验:按笔画数分组的组合收益率之间是否有超出市场因子的共同成分;(2)被定价——不存在任何经济学机制说明市场应当为"笔画风险"支付溢价。两个条件都高度存疑,X 几乎不可能是定价因子,顶多是异象候选。

数据窥探角度:笔画数是典型的"查看数据后编出的假设"。考虑研究员可能尝试过的所有荒诞变量(拼音首字母、代码尾号……),在几百次隐性尝试下,t=2.3 完全在多重检验的运气范围内(第 6 章:当代标准要求 t 至少 3.0 以上)。

联合假说角度:8% 的"超额"是相对于哪个模型算的?若只用市场单因子模型,X 可能只是暗中暴露于规模或流动性因子(小盘股名称可能系统性地更长/更短),α 是模型遗漏因子的伪装。

应补检验(任四):① 换用 FF3/FF5 等更强模型重算 α;② 检查组合在规模、价值、流动性上的暴露;③ 严格样本外检验(2024 之后新数据 / 其他市场);④ 提高 t 值门槛并做 Bonferroni 类多重检验校正;⑤ 扣除交易成本后的净收益;⑥ 子样本稳健性(分年份、分市值段)。核心逻辑:没有经济学故事的统计显著,默认按运气处理

练习 1.6 α 还是 β:拆穿一只"明星基金" 简答题

某主动基金过去十年年化跑赢沪深 300 指数 5 个百分点,宣传语是"十年验证的选股 α"。已知该基金长期重仓小市值、低估值股票。请设计一个定量流程判断这 5% 里有多少是 α、多少是 β;并回答:如果结论是"几乎全是 β",投资者应该做什么?(提示:Bender 等人 2014 的 80/20 结论,以及 Smart Beta 的存在意义。)

参考答案

流程:① 取基金月度收益减无风险利率得 $R^e_t$;② 选一组 A 股适用的因子(市场、规模 SMB、价值 HML 起步,第 4 章会给出更适合 A 股的组合);③ 做时序回归 $R^e_t = \alpha + \beta_1 MKT_t + \beta_2 SMB_t + \beta_3 HML_t + \varepsilon_t$;④ 看 $\hat\alpha$ 的大小和 t 值(用第 2 章的 Newey–West 标准误),并看 $R^2$——$R^2$ 越高,说明收益越大程度上是因子暴露的结果;⑤ 稳健性:滚动窗口检查暴露是否稳定(风格漂移)。

预期结果:重仓小市值 + 低估值意味着 SMB、HML 暴露显著为正,5% 的"超额"多半会被两个 β 吃掉大半——这与 Bender 等人(2014)"主动收益 80% 可由因子暴露解释"的结论一致。

投资者对策:若 α 不显著,就不该为这份收益支付主动管理费——同样的因子暴露可以用费率低得多的 Smart Beta 产品复制(规模 + 价值 ETF 组合)。这就是"不要用 α 的价格买 β":主动费用只应支付给回归后仍然显著的那部分 α。