跳到正文

因子组合构造

在因子之间分配资本的三种做法——等权、IC 加权、风险平价——本质上是同一个问题的三个答案:你有多信自己对因子的估计。附 Frazzini-Pedersen (2014) 做空 beta 的完整构造。

第 7 篇 · 共 12 篇 约 14 分钟

假设你已经接受了市场对某些特征有奖励——价值、动量、质量、低波动、规模——并且决定向它们倾斜。真正要做的决定不在这儿,而在下一步:怎么倾斜。

等权、按信息系数加权、风险平价,这三种做法给出三个不同的组合。它们看起来是三种技术,实际上是同一个问题的三个答案:你对自己那份因子估计有多少信心。完全不信就等权,因为等权一个参数都不用估;完全相信就做均值-方差优化,把预期收益和协方差全用上;中间地带全都是各种形式的收缩。这条线索会贯穿整篇文章,包括最后讲容量和拥挤的时候。

第二条线索是:因子不是资产。这句话听起来像废话,但因子构造、组合集成、容量和拥挤这四个问题的麻烦,全都是从这里长出来的。

因子组合到底是什么

因子组合是一个多空(或纯多)组合,它对单一特征有暴露,理想情况下对其他因子近似正交。

拿价值举例:做多高账面市值比的股票,做空低账面市值比的股票,缩放到美元中性,通常还做行业中性。得到的组合对”价值”有正暴露,对市场、规模、动量的暴露接近零。这个组合的收益序列,就是你之后所有分析里的”价值因子收益”。

具体怎么造出来的,值得走一遍,因为每一步都会影响最后那条收益序列。先定义特征:价值用账面市值比,动量用跳过最近一个月的 12 个月收益,质量用盈利性指标(ROE、毛利润),低波动用滞后波动率或 beta。然后在每个再平衡日按特征值给资产排序,切成十分位或五分位。标准的多空因子组合做多最高分位、做空最低分位,两侧缩放到美元中性;纯多版本只留最高分位。最后一步是中性化——把对其他因子(行业、市场 beta、规模)的暴露剔掉,让这个因子”干净”。这一步可选,但一旦省掉,你以为在研究价值,实际上研究的是价值加一堆行业暴露。

Fama-French (1993) 的价值因子 HML 就是这么造的,用的是规模和账面市值比的 2×3 双重排序:

HML=12(SV+BV)−12(SG+BG)\text{HML} = \frac{1}{2}(SV + BV) - \frac{1}{2}(SG + BG)

其中 SS 和 BB 是按市值分的小盘与大盘,VV 和 GG 是按账面市值比分的价值与成长。两个 1/2 保证多空两侧在规模维度上平衡,价值组合不会顺带变成一个小盘组合。

实践中你多半不会手工构造这些。因子库(Barra、Axioma、Bloomberg、MSCI、CRSP)直接给你因子收益或因子暴露。用别人的因子省事,代价是上面那些构造选择变成了你看不见的东西——中性化到什么程度、分位怎么切、再平衡频率多少,都会进到你的回测里。

三种分配方式

设你已经选定了 KK 个因子,手上有因子收益 f1,…,fKf_1, \ldots, f_K 和它们的协方差矩阵 Σf\Sigma_f,要构造一个因子层面的权重向量 wf∈RKw_f \in \mathbb{R}^K。

最简单的答案是等权:

wf=1K1w_f = \frac{1}{K} \mathbf{1}

这个组合不使用任何关于因子收益或协方差的信息,因此它对估计误差完全免疫——它根本没估计任何东西——换手也最低。它的缺点同样明显:不反映因子强度,不奖励分散化收益,高波动因子和低波动因子一视同仁。

即便如此,它在样本外很难被打败。DeMiguel、Garlappi 和 Uppal (2009) 在资产层面证明了这一点:一堆优化方法在样本外跑不过 1/N,因为优化把估计误差放大得比它捕捉的信号还多。把这个结论平移到因子层面是业界常见做法,但要说清楚——那篇论文做的是资产层面的比较,因子层面没有同等强度的证据,只是 KK 通常在 5 到 10 之间、估计误差的问题结构相似,所以直觉可以借用。

第二个答案是让数据说话:按信息系数(IC,因子信号与前瞻收益的相关性)分配资本。

wfk∝∣ICk∣w_{f_k} \propto |\text{IC}_k|

理由是 Grinold-Kahn (2000) 的主动管理基本定律:

IR=IC⋅Breadth\text{IR} = \text{IC} \cdot \sqrt{\text{Breadth}}

其中 IR 是信息比率(年化 alpha 除以跟踪误差),IC 是因子的信息系数,Breadth 是每年独立的下注机会数。这条式子讲的是单个信号的 IR 从哪来。把 KK 个近似不相关的因子合起来时,能直接相加的是 IR 的平方:

IRtotal2=∑k=1KIRk2\text{IR}_{\text{total}}^2 = \sum_{k=1}^{K} \text{IR}_k^2

而达到这个上限的权重,在各因子波动率和广度相近的条件下,正比于 IC 本身而不是 IC 的平方。这两件事很容易混:平方出现在”合成后的 IR”里,不出现在”分配比例”里。按 IC 平方分配会把资本过度堆在当期估计最高的那个因子上,而 IC 估计恰恰是这里面噪声最大的东西——频繁重估 IC,你会得到一组抖得没法交易的权重。

所以实际用的是往等权收缩的版本:

wfk=(1−α)1K+α∣ICk∣∑j∣ICj∣w_{f_k} = (1 - \alpha) \frac{1}{K} + \alpha \frac{|\text{IC}_k|}{\sum_j |\text{IC}_j|}

其中 α∈[0,1]\alpha \in [0, 1] 是收缩参数,α=0\alpha = 0 退回等权,α=1\alpha = 1 是纯 IC 加权。α\alpha 的选择就是前面那条线索的显式版本:你有多信自己的 IC 估计。

第三个答案绕开收益估计,只处理风险:按逆波动率分配,

wfk∝1σfkw_{f_k} \propto \frac{1}{\sigma_{f_k}}

或者更严格地要求等风险贡献,

wfk⋅(Σfwf)k=wfj⋅(Σfwf)j∀k,jw_{f_k} \cdot (\Sigma_f w_f)_k = w_{f_j} \cdot (\Sigma_f w_f)_j \quad \forall k, j

这就是风险平价用在因子上而不是资产上。波动率高的因子拿到更小的配置,于是没有哪一个因子单独主导组合的风险。风险平价因子组合的事前波动率低于等权组合,夏普通常也更高一点,因为风险分布更均匀。它比等权多用了一个估计量(波动率),但波动率比预期收益好估得多——这也是它在实务里比均值-方差受欢迎的原因。

因子协方差矩阵

除了等权,上面每种方法都要用到 Σf\Sigma_f,所以怎么估它是个绕不开的问题。

最直接的是历史法:在某个回溯窗口上算因子收益的样本协方差。它是标准做法,问题出在 KK 相对 TT 不小的时候——样本协方差矩阵的估计误差会被优化器专门挑出来放大。收缩法是标准修补:向 σˉ2I\bar{\sigma}^2 I 做 Ledoit-Wolf 收缩,用一点偏差换掉大量方差。再激进一点是给 Σf\Sigma_f 强加结构——对角、单因子、多因子低秩——用 PCA 或因子分析估出来,参数少了,误差自然小,代价是结构假错了就系统性地错。

KK 在 5 到 20 之间、有 5 年以上月度数据的常规情形,带 Ledoit-Wolf 收缩的历史法基本就是默认选择。

案例:做空 Beta

因子里最干净的一个案例是 Frazzini 和 Pedersen (2014) 的 Betting Against Beta(BAB)。规则一句话说完:做多低 beta 股票,做空高 beta 股票。这个利差有正的预期收益,与其他因子相关性低,而且在数十年和多个地域上都存在。

构造过程也很直接。每个再平衡日,用滚动一年的股票收益对市场收益回归估出 beta,按 beta 给股票排序,形成十分位;做多第一分位(最低 beta)、做空第十分位(最高 beta),按 beta 排序加权或在分位内等权;月度再平衡。因为多空两侧的 beta 不同,还要按 beta 缩放两条腿,让组合真的市场中性——这一步是 BAB 和普通”低波动组合”的关键区别。

经济直觉是杠杆约束。共同基金、养老金这类投资者要达到自己的波动率目标,但不能随便加杠杆,于是只能去买高 beta 股票。这份需求推高了高 beta 股票的价格、压低了它们的预期收益,低 beta 股票则相应被低估。BAB 收割的就是这个错误定价——它不是”低风险居然收益更高”的悖论,而是一个关于谁被禁止用杠杆的故事。

原论文报告的美国 BAB 组合在近百年样本上夏普大约在 0.7 到 0.8 这个量级,具体数字随样本区间、beta 估计窗口和构造细节变化。要注意这是交易成本前的口径:BAB 的换手不低,做空腿还要付融券成本,扣掉之后会明显下降,下降多少取决于你的换手假设和市场冲击模型,自己按自己的成本重算一遍比引用任何一个数字都可靠。

这个因子还有几个性质值得记住。它的市场 beta 略为负,是个防御性因子;它和价值、动量、规模、质量的相关性几乎为零,所以在多因子组合里的分散化贡献很大;它最差的回撤小于市场,在危机期间通常表现相对好。容量方面,因为多空两侧都是流动性尚可的普通股票,它比大多数异象容纳得下更多资金,但具体能到多少,公开的估计口径差异很大,别把任何一个数字当准数。

从因子权重到资产权重

假设你决定在价值、动量、质量、低波动和 BAB 之间分配,用上面任一种方法定出了 wfw_f。教科书式的做法是在因子层面做均值-方差:先从历史数据算每个因子的预期收益、波动率和夏普(回溯期能长就长,10 年以上为好),用收缩估出 Σf\Sigma_f,然后解优化问题;如果你不信自己的预期收益估计,就退化成最小方差解。

import numpy as np
import pandas as pd

factor_returns = pd.read_csv('factor_returns.csv', index_col=0, parse_dates=True)

# Mean and covariance
mu_f = factor_returns.mean().values * 12  # Annualize
Sigma_f = factor_returns.cov().values * 12

# Add Ledoit-Wolf shrinkage
Sigma_shrunk = shrunk_cov(factor_returns) * 12

# Solve for MVO weights
from scipy.optimize import minimize
n_factors = len(mu_f)

def neg_sharpe(w):
    ret = w @ mu_f
    vol = np.sqrt(w @ Sigma_shrunk @ w)
    return -ret / vol

constraints = [{'type': 'eq', 'fun': lambda w: w.sum() - 1}]
bounds = [(0, 1) for _ in range(n_factors)]

result = minimize(
    neg_sharpe,
    x0=np.ones(n_factors) / n_factors,
    constraints=constraints,
    bounds=bounds
)

w_f = result.x
print("Factor weights:", w_f.round(4))

生产系统会在这上面加不少东西:用 Black-Litterman 处理预期收益、对因子暴露加约束、把交易成本作为惩罚项写进目标函数。但骨架就是这些。

问题在于这个 wfw_f 还不能下单。你交易的是股票,不是因子。设目标因子暴露是 f⋆f^\star(比如 0.5 价值、0.3 动量、0.2 质量),资产层面的因子暴露矩阵是 BB(N×KN \times K),你要找的权重 ww 得满足 w⊤B=f⋆w^\top B = f^\star。这个方程组是欠定的:NN 远大于 KK,无数个组合给出同一组因子暴露。所以加一个正则项把解钉住:

min⁡w∥w−wprior∥2s.t. w⊤B=f⋆\min_w \|w - w_{\text{prior}}\|^2 \quad \text{s.t. } w^\top B = f^\star

其中 wpriorw_{\text{prior}} 是基准权重,通常取市值权重。解出来是在 L2 范数下离基准最近、同时达到目标因子暴露的那个组合,本质是一个带线性约束的二次规划,任何标准求解器都能解。跟踪误差由 L2 惩罚的强度控制——这也是把”因子观点”和”别偏离基准太远”这两个诉求放在同一个式子里的地方。

真实流水线上,这个集成步骤前面还有几层:定义 4 到 8 个有明确经济学原理的因子,按前面的分位利差方式构造出因子组合,算出每个因子的收益序列,估出均值、波动率、夏普和相关矩阵,选一种分配方法,可选地叠加自下而上的选股观点,最后在集成时把最大因子暴露、行业上限、换手率限制这些约束一起施加进去。输出才是逐资产的权重。

该选哪种分配方法

等权、IC 加权、风险平价、均值-方差之间的选择没有普适答案,但有几条经验站得住。

等权是最安全的默认值,在大多数时期和大多数因子集合上都不难看,代价是把强弱不同的因子当成一样。IC 加权只在你的 IC 估计足够稳定时才有效,而 IC 通常是时变的——这是它在实务里最常见的失败方式。风险平价在因子波动率差异大的时候有用;但大多数股票因子组合的波动率本来就差不多,所以它和等权的差距经常小到不值得多一层估计。均值-方差需要好的预期收益估计,而好的预期收益估计很少见。

多数从业者的答案是混合:

w=α⋅wEW+β⋅wIC+γ⋅wRPw = \alpha \cdot w_{\text{EW}} + \beta \cdot w_{\text{IC}} + \gamma \cdot w_{\text{RP}}

其中 α+β+γ=1\alpha + \beta + \gamma = 1,α=0.5\alpha = 0.5、β=0.2\beta = 0.2、γ=0.3\gamma = 0.3 是一组合理取值。这不是和稀泥。你不知道哪种方法在下一个十年更对,在方法之间分散和在因子之间分散是同一种正则化。

哪些因子值得放进去

文献里已经识别出几十个因子,其中一部分是真的,很大一部分可能来自数据挖掘。

以 Harvey、Liu 和 Zhu (2016) 及后续文献为准,比较稳健的那一批是:市场(股权溢价,股票相对债券的基本超额收益)、规模(SMB,小盘跑赢大盘,1980 年前尤其明显)、价值(HML,高账面市值比跑赢低)、动量(UMD,赢家在 3 到 12 个月内继续赢)、质量(RMW 和 CMA,盈利公司跑赢不盈利公司)、低波动与 BAB(低 beta 股票的风险调整收益高于高 beta 股票)。跨资产的还有期限(长期债券跑赢短期,期限溢价)、信用(低评级债券跑赢高评级,信用溢价)和 carry(高 carry 的货币或资产赚正收益)。

第二档是真实但没那么可靠的:投资(低投资公司跑赢高投资公司)、盈利性(毛利润/资产预测收益)、流动性(低流动性股票赚溢价)。这些在部分样本上稳健,换个地域或换个时期就容易消失。

剩下的多半是假阳性。日历效应(一月效应、月末效应之类)大部分经不起样本外检验;技术分析里的”价格形态”在稍微有效一点的市场里就是随机的;已发表因子里 tt 统计量低于 3 的那一批,很可能只是噪声。最后这条不是随口一说——Harvey、Liu 和 Zhu 的论点正是,考虑到整个文献试过的因子数量,传统的 t>2t > 2 门槛太松,正确的阈值大约在 3。你自己搜因子时适用同一把尺子。

规模、时机和拥挤

前面所有内容都假设因子收益是给定的。实际上你一旦开始交易,就在改变它。

容量是第一个约束。每个因子能容纳的资金有限,越多钱去收割同一个因子,因子收益衰减得越快——这就是标准的套利均衡故事,低效被套利掉,溢价缩小。相对排序比绝对数字可靠:换手高的因子(动量首当其冲)容量明显小于换手低的因子(价值、质量、低波动),而依赖小市值或低流动性股票的因子(规模、流动性)容量最小。公开的美元容量估计差异极大,因为它们取决于换手假设、冲击模型和可接受的收益衰减幅度,引用之前先看清楚口径。对大多数机构配置人,容量在主流因子上不是硬约束;在规模和流动性这类因子上会是。

择时是第二个问题,答案比较扫兴:很难。因子收益的自相关性低、方差高,信噪比不支持大部分择时尝试。确实有一些证据支持因子层面的时间序列动量——近期表现好的因子在接下来几个月倾向于继续好——但效应不大,而且因子收益的绝大部分来自长期溢价而不是时机。实务里多数机构配置人用静态因子权重,定期再平衡回目标,不做择时。

拥挤是第三个,也是最难量化的一个。当更多投资者持有相似的因子组合,这些组合之间的相关性上升,退出的时候会同时退出。2007 年 8 月的”量化地震”是经典案例:许多量化股票基金持有高度相似的因子组合,一家基金去杠杆引发的抛压传导到了所有人身上。想监控它,可以看主要因子 ETF 之间的持仓重叠、因子标的上的空头兴趣、以及因子自身的集中度(比如价值因子有多少暴露压在单一行业上)。这些都是粗糙的代理指标。拥挤是一个已知的风险,但不是一个能精确度量的风险,别假装它是。

三个容易犯的错

第一个是把因子当资产类别。你不能像买标普 500 ETF 那样”买价值”。你买的是一个暴露于价值的股票组合,它带着跟踪误差、交易成本和容量约束,而这三样东西在因子收益序列里一样都看不见。

第二个是忽视衰减。因子一旦被发表,收益往往随着套利资金涌入而下降。价值因子在被广泛发表之前的几十年里溢价明显更高,之后就薄了很多。所以因子组合要定期重估,权重应该压在样本外证据上,而不是压在最初那篇论文的样本上。

第三个是把因子暴露当成因子收益。持有一个高价值暴露的组合,不等于你赚到了价值因子的收益:残差风险、行业暴露、意外的动量暴露都会混进你的收益流里。把实际收益归因回因子,本身是一件需要认真做的事,不是在报告里写一行暴露数字就完了。

它不管用的时候

因子投资有过很长的表现不佳期。2010 年代对价值格外难熬,成长股一路跑赢;2009 年三月市场反转时动量遭遇了一次剧烈的崩塌;低波动在强烈风险偏好的年份通常落后。

因子溢价不是常数,它们来来去去。长期均值为正,但任何一个给定年份都可能是另一回事。这也是对因子投资最标准的批评:长期有效,短期难受,而在回撤中放弃的投资者恰好错过了后面的溢价。

诚实的回答是因子是真的,但它们的收益噪声很大。在多个因子之间分散能降低噪声,再平衡纪律能把长期溢价拿回来——这两件事都不解决”难受”,只是让难受不至于变成放弃。

文献

  • Fama & French (1993). “Common Risk Factors in the Returns on Stocks and Bonds.” Journal of Financial Economics 33(1): 3-56. 三因子模型。
  • Carhart (1997). “On Persistence in Mutual Fund Performance.” Journal of Finance 52(1): 57-82. 加入动量。
  • Frazzini & Pedersen (2014). “Betting Against Beta.” Journal of Financial Economics 111(1): 1-25. BAB 因子。
  • Grinold & Kahn (2000). Active Portfolio Management. McGraw-Hill. 主动管理基本定律。
  • Asness, Frazzini, Israel & Moskowitz (2015). “Diving into the Cross Section of Returns.” SSRN Working Paper. 多因子分析。
  • Novy-Marx (2013). “The Other Side of Value: The Gross Profitability Premium.” Journal of Financial Economics 108(1): 1-28.
  • Hou, Xue & Zhang (2015). “Digesting Anomalies: An Investment Approach.” Review of Financial Studies 28(3): 650-705.
  • Harvey, Liu & Zhu (2016). “…and the Cross-Section of Expected Returns.” Review of Financial Studies 29(1): 5-68. 多重检验修正。

下一篇文章:交易成本感知的优化——被忽略的 30% 的 MVO:换手率。