一家头部 私募 量化 公司带着 3 年期 "中证500 中性" 业绩材料来谈尽调:Sharpe 1.8 净值口径,贝塔 0.03(真的市场中性),信息比率 1.5 相对 R007 现金基准。表面看是机构级别的纯 alpha。然后你跑一遍 Barra CNE5 + 申万 行业 因子回归,结果是 、、,而 alpha 月度 0.018% (t = 1.1, Newey-West)。翻译:经理人过去三年是在 免费收割 价值 + 质量 - 反动量 这组静态风格暴露;一旦把风格 PnL 扣掉,残差技能 alpha 在统计上与零无异。LP 可以用 沪深300价值ETF (510410) + 沪深300质量ETF (515150) + 反动量 50/50 配置在 30bp 跑出相似暴露,跳过 1.5%+20%。本课讲清楚:对 L/S 量化 中性,Brinson 失效,因子模型 回归是唯一可读的归因工具。
术语对齐
本课从 data/glossaries/quant-glossary.yaml 复用的规范术语:夏普比率、信息比率、Alpha 衰减、因子模型、因子暴露、Barra 模型、价值因子、动量、质量因子、规模因子、低波动因子、跟踪误差、最大回撤。这些术语的规范定义在前置模块——L1 给出比率名;4.3 因子投资 给出因子名;4.4.2 风险模型 给出 Barra 构造——本课只复用,不重定义。
(A) 为什么 Brinson 在 L/S 量化 中性 上失效
L2 的 Brinson 要求基准的 sector 权重 非零且行业内基准收益 良好定义。L/S 量化 中性 产品按构造净 exposure 接近 0——长仓减空仓后每个 申万 行业 的净 weight 在 ±1% 范围;基准是 R007 现金 + 0% 行业权重,不是 沪深300 / 中证500。若硬把 中证500 全收益 当 Brinson 基准, 会变成大额负数(因为基准把全部 中证500 权重摊给行业、组合只有净残差),三项分解结果不可读。
修法不是修代数,是换计量方法:从 按持仓 weight 分解 改成 按收益 序列 回归。不再问"组合 sector 权重相对基准偏离多少",而是问"组合月度收益序列对一组因子收益序列做 OLS 回归之后,因子载荷 (factor-loading) 是多少、剩下的截距 (alpha) 是不是统计显著"。回归直接从收益序列推出隐含因子暴露,与组合是 long-only / market-neutral / 全对冲 无关。这种"收益基于回归"的归因方法,自 Fama-French 1993 后成为 L/S 量化 的工业标准。
(B) Fama-French 5 因子 + 动量 (FF5+MOM) 规范
学术级的 L/S 股权 归因。回归形式:
下面这段 Inline-code listing 把六个因子在规范顺序里固定下来:
(1) Mkt-Rf
(2) SMB
(3) HML
(4) RMW
(5) CMA
(6) MOM
每个因子的定义:Mkt-Rf 市场超额(CRSP value-weighted 减 1 月 T-bill)——市场风险溢价;SMB (Small-Minus-Big) 规模因子——多小盘空大盘;HML (High-Minus-Low B/M) 价值因子——多高账面市值比空低账面市值比;RMW (Robust-Minus-Weak operating profitability) 质量因子——多高盈利能力空低盈利能力;CMA (Conservative-Minus-Aggressive investment) 投资因子——多低投资空高投资(高资本支出的公司倾向跑输);MOM (Carhart 1997 12-1 月) 动量因子——多近 12 个月赢家空输家。
数据源 (us):Ken French data library 在 Dartmouth (mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html) 免费下载月度因子收益;Asness-Frazzini 的 AQR 数据库 (aqr.com/Insights/Datasets) 提供全球区域版本 + QMJ (Quality-Minus-Junk) + BAB (Betting-Against-Beta) 扩展。
CN 数据源:Wind 万得 因子数据 API、朝阳 永续 因子库、RESSET 锐思 学术 数据库(订阅);自由版 国信 证券 多因子 系列 公开 报告 提供基础月度因子收益,历史较短。CN A 股 学术口径 5 因子:市场用 沪深300 全收益 - R007,SMB 用 中证500 - 中证100,HML 用账面市值比 三分位 多空,RMW 用 ROE 三分位 多空,CMA 用 投资率 三分位 多空,MOM 用 12-1 月 截面动量。
回归窗口:月度 36-60 个月(3-5 年)——既要让 alpha 在噪声之上识别,又要避免暴露漂移。OLS 估计:;alpha 是截距;t-stat 用 Newey-West 调整自相关(默认 lag = 4)。CN 因子收益的清洁历史较短(注册制 IPO 改革 2019、A50 / 北向 大资金 流入 2020-2021 重构市场结构),CN 实务通常用 24-36 月 窗口而非 60 月。
(C) Barra 多因子规范
工业级 L/S 股权 归因。MSCI Barra One、Axioma、Bloomberg PORT、Wind 因子模型 全部用这个范式。两点改良:更多风格因子(8-15 个,而非 FF5+MOM 的 5-6 个)+ 行业 dummies(把行业效应从风格效应里独立出来)。
Barra USE4(美股):9 个风格因子(Beta / Momentum / Size / Earnings Yield / Volatility / Growth / Leverage / Liquidity / Non-linear Size)+ GICS 11 行业 dummies。
Barra CNE5(A 股):10 个风格因子(Beta / Momentum / Size / BTOP / Earnings Yield / Volatility / Liquidity / Growth / Non-linear Size / Residual Volatility) + 30 个 申万 一级 行业 dummies。表达:。
Barra 与 Fama-French 不同:Barra 的 Volatility 与 Liquidity 因子不在 FF5+MOM 里;Size 与 Momentum 概念相近但构造不同——Barra 用横截面回归得到 纯 因子 portfolio(每只 portfolio 对其因子单位暴露、对其他因子零暴露),Fama-French 用按特征排序的 long-short portfolio。FF5+MOM 公开 + 可复现;Barra 私有 + 更精细 + 机构口径的工业标准。本课基于公开数据自建 FF5+MOM / CN-A 5 因子 + MOM,Barra 输出作为黑盒讨论机构案例。
(D) Alpha vs 风格 分解 与 杀掉幻觉
回归的核心输出。下面这段 Inline-code listing 给出五项分解结果的规范顺序:
(1) factor_PnL_f = beta_f * cumulative_F_f * book_NAV
(2) total_factor_PnL = sum_f factor_PnL_f
(3) alpha_PnL = total_PnL - total_factor_PnL
(4) style_PnL_share = |total_factor_PnL| / |total_PnL|
(5) t_alpha = alpha_monthly / SE(alpha) with |t_alpha| > 2.0 at 5% level
Alpha t-stat 公式:
|| > 2.0 → alpha 在 5% 水平显著不为零。
杀掉幻觉案例(canonical):中证500 中性 私募 报 3 年 Sharpe 1.8 净值。Barra CNE5 + 申万 行业 在 36 个月月度收益上回归得 、、,其他风格因子不显著; (t = 1.1, Newey-West)。意思:价值 + 质量 - 反动量 这组静态 因子暴露 显著(t > 2);alpha 不显著(|t| < 2)。
PnL 分解:HML / BTOP 因子 累计 +8%,所以 factor_PnL_HML = 0.42 × 0.08 × NAV = +3.4% / NAV;RMW 类似 (+3.8%);- MOM × 负的动量收益 = +1.9%;total factor PnL ≈ +9.1% 占总累计 +11% 的 82%。style_PnL_share = 82%。决策:不要按 1.5%+20% 私募 量化 买一个 alpha t-stat 1.1 的产品;LP 可以用 沪深300价值ETF + 沪深300质量ETF + 反动量 ETF 在 30bp 复制。
(E) Active 风险分解 与 因子归因 流水线
除了 PnL 分解,因子回归 还把主动风险(跟踪误差)拆成 因子风险 + 特定风险:
active variance =
前两项是 因子风险(由因子暴露 + 因子协方差预测),最后一项是 特定风险(残差方差)。高因子风险占比 = 跟踪误差大部分由静态风格暴露解释;高特定风险占比 = 跟踪误差大部分是个股特定 idiosyncratic 风险——后者才是 stock-picking 技能的体现。
下面这段 Inline-code listing 给出因子归因 流水线五个步骤:
(1) factor_returns, port_excess_returns = load_data(start, end, region, factor_model)
(2) X = factor_returns.values; y = port_excess_returns.values; beta_hat = OLS(X, y)
(3) residuals = y - X @ beta_hat[1:] - beta_hat[0]; nw_cov = newey_west(X, residuals, lag=4)
(4) t_stats = beta_hat / sqrt(diag(nw_cov)); t_alpha = beta_hat[0] / sqrt(nw_cov[0,0])
(5) factor_pnl = beta_hat[1:] * cumulative_factor_returns * book_nav; alpha_pnl = total_pnl - factor_pnl.sum(); style_share = abs(factor_pnl).sum() / abs(total_pnl)
五个步骤,按规范顺序展开:
factor_returns, port_excess_returns = load_data(start, end, region, factor_model)X = factor_returns.values; y = port_excess_returns.values; beta_hat = OLS(X, y)residuals = y - X @ beta_hat[1:] - beta_hat[0]; nw_cov = newey_west(X, residuals, lag=4)t_stats = beta_hat / sqrt(diag(nw_cov)); t_alpha = beta_hat[0] / sqrt(nw_cov[0,0])factor_pnl = beta_hat[1:] * cumulative_factor_returns * book_nav; alpha_pnl = total_pnl - factor_pnl.sum(); style_share = abs(factor_pnl).sum() / abs(total_pnl)
下面是 Fenced python code block 形式的 FactorRegressionAttribution 类骨架:
import numpy as np
class FactorRegressionAttribution:
# FF5+MOM (or Barra CNE5) factor regression attribution
def load_factor_returns(self, start, end, region, factor_model):
# Wind / RESSET / 朝阳 永续 因子月度收益
return None
def align_returns(self, port_returns, factor_returns, risk_free):
port_excess = port_returns - risk_free
return port_excess, factor_returns
def run_regression(self, port_excess, factors, newey_west_lag=4):
X = np.column_stack([np.ones(len(factors)), factors])
y = port_excess
beta_hat, *_ = np.linalg.lstsq(X, y, rcond=None)
residuals = y - X @ beta_hat
return beta_hat, residuals
def decompose_pnl(self, betas, factor_returns, book_nav):
cum_f = (1 + factor_returns).prod(axis=0) - 1
factor_pnl = betas * cum_f * book_nav
return factor_pnl
def compute_alpha_significance(self, alpha, residuals, T):
se = residuals.std() / np.sqrt(T)
t_alpha = alpha / se
return float(t_alpha)
def format_attribution_table(self, regression_results, pnl_decomposition):
return None
类名 FactorRegressionAttribution,六个方法 load_factor_returns / align_returns / run_regression / decompose_pnl / compute_alpha_significance / format_attribution_table 的顺序、参数名 (start、end、region、factor_model、port_returns、factor_returns、risk_free、port_excess、factors、newey_west_lag、betas、book_nav、alpha、residuals、T、regression_results、pnl_decomposition)、默认 newey_west_lag=4,以及注释 # FF5+MOM (or Barra CNE5) factor regression attribution,与英文版本字节级一致。
CN 实战:2024 Feb 微盘 反转 与 size factor 杀手
CN 因子归因 的最近一次重要案例是 2024 年 2 月 微盘股 / DMA 雪球 反转。一批 中证500 中性 / 中证1000 中性 私募 在 2021-2023 年三年 Sharpe 2.5+,因子归因显示 (规模因子:多小盘 空大盘)+ (低波动因子) + (流动性因子:多低流动性溢价 空高流动性)。alpha t-stat 1.2(不显著)。
2024 年 2 月 中证1000 / 中证2000 两周下跌 25%,小盘股因子 反转;同组产品两周回吐 -15% 到 -25%;之前 36 月里几乎全部"Sharpe"在两周里被 size factor 重设。教训:Sharpe 是风格,不是技能。
AMAC 中基协 私募 投资 基金 信息 披露 内容 与 格式 指引 第3号 要求 量化 增强 / 行业 中性 / 风格 中性 产品季度业绩报告披露 风格 归因——通常用 Barra CNE5 或 国信 多因子;主流 私募 信息 平台(朝阳 永续 / 私募 排排 网)标准化呈现这些表格;社保 / 险资 / FOF 母 基金 在尽调中以 alpha t-stat > 2 AND style_PnL_share < 50% 作为硬指标。
公式探索
Formula Explorer
alpha / (sigma * sqrt(T))练习
Exercise
You are evaluating a market-neutral L/S equity book over 36 months of monthly returns. (cn-region) use Barra CNE5 + 申万 行业 dummies. Do five computations and report a single table. (i) Run the OLS regression R_p,t - r_f,t = alpha + sum_f beta_f * F_f,t + epsilon_t and report the 6 betas (top 6 style betas in Barra CNE5: Beta / Momentum / Size / BTOP / Earnings Yield / Volatility) plus alpha. (ii) Compute Newey-West-adjusted t-stats with lag=4 for each beta and alpha. (iii) Identify which betas are statistically significant at the 5% level (|t| > 2). (iv) Compute per-factor PnL factor_PnL_f = beta_f * cumulative_F_f * book_NAV, total factor PnL, alpha PnL, and the style PnL share = |total_factor_PnL| / |total_PnL|. (v) State whether the manager passes the significance test (|t_alpha| > 2 AND style share < 50%) or fails (alpha is style harvesting; recommend smart-beta replication).
提示
numpy.linalg.lstsq 跑 OLS;Newey-West 协方差需要单独实现或调用 statsmodels.regression.linear_model.OLS(..).fit(cov_type='HAC', cov_kwds={'maxlags': 4})。截距对应 alpha。提示
style_PnL_share 反映"基金有多少回报靠静态风格";> 50% 通常对应"风格收割";< 30% 对应"主要 alpha"。t_alpha < 2 + share > 50% = 风格收割,智能贝塔 复制即可。边界与前向指针
L1 给出 Sharpe / IR(信息比率)/ Sortino / Calmar 等风险调整后比率;L3 用同样的 Sharpe / IR 词汇,告诉 LP 这些数字 扣完静态风格之后还剩多少。Brinson(L2)是 持仓 weight 路径;因子归因(L3)是 收益 序列 回归 路径;两者覆盖整个量化产品族。
最大回撤(max drawdown)、跟踪误差 在 L3 的 active 风险 分解 公式里以"特定风险 vs 因子风险"形式重新出现。Alpha 衰减(alpha decay)在 L3 跨年回归窗口里表现为 t_alpha 持续下降——CN 私募 量化 行业 2020-2024 的 中位 t_alpha 从 ~2.3 压到 ~1.5。
因子构造细节(SMB / HML / RMW / CMA 排序方法、2x3 排序、市值 等权 vs 价值 等权、再平衡频率)与 Barra USE4 / CNE5 的 pure-factor portfolio 横截面回归构造在 4.3 因子投资 模块展开;L3 把因子收益当回归输入(R-端),4.3 构造它们。
风险模型 深 入(因子协方差矩阵估计、Ledoit-Wolf 收缩、特定风险建模、ex-ante 跟踪误差 分解、FRTB)在 4.4.2 风险模型 模块;L3 读入因子暴露并跑回归,4.4.2 构造模型。
OLS 理论 + Newey-West 调整 推导在 2.2 统计推断(回归课)模块;L3 把 OLS + Newey-West 当黑盒用。Deflated Sharpe / Probabilistic Sharpe / 多重检验修正 用于因子数据挖掘 在 4.5.1 回测方法论(过拟合课)模块;L3 用 |t| > 2 作单一检验阈值并前向指出。
实务细节:回归窗口、Newey-West lag 与样本不足
CN 私募 量化 因子归因 的实务里,样本期长度 是常被忽视的关键。Ken French 美股库提供 60+ 年月度因子收益;Wind / 朝阳 永续 的 CN A 股 因子干净历史(注册制 IPO 改革之后)只有约 5-7 年。意味着 CN 因子归因 的统计能力比 US 弱很多:36 月 窗口下 alpha 标准误约 , 需要月度 alpha 大致 ;而 60 月 窗口下 只需 。同样的 alpha 量级,在 60 月 窗口里"显著",在 36 月 窗口里"不显著"。
CN 实务通常 24-36 月,这降低了 alpha 显著性识别门槛——把 t = 1.5 当作"足够"是常见错误。
Newey-West lag 选择:月度因子归因 lag = 4 是默认值(Newey-West 1987 推荐 lag ,T = 36 月 给出 ~2.5,T = 60 月 给出 ~3,工业默认取 4 偏保守)。lag 偏高会扩大 t-stat 的标准误,使 alpha 不容易"显著";lag 偏低会过度乐观。建议在尽调报告里同时给出 lag = 0(古典 OLS)、lag = 4、lag = 6 三种 alpha t-stat,看结果一致性。
工业 案例:与 US 对照
US 平行案例:AQR Style Premia 在 2018-2020 的 3 年回撤。AQR 旗舰多风格 L/S 产品在 2003-2017 年间通常报 12-18% 年化 + FF5+MOM 、、。2018-2020 同样的 betas 累计回撤 -25%——不是经理人错误,而是 因子收益 转负:HML 累计 -15%,MOM 累计 -10%,QMJ 接近 0。因子 PnL -10 到 -15%;rolling 36 月 alpha t-stat 维持 1.5-2.0(alpha 没坏)。当 2022 价值因子 反转 (HML 累计 +12%),同样的 betas 产出 +15% 因子 PnL,产品反弹——因子收益变了,alpha 没变。这是因子归因 的核心信息:把"风格 PnL"与"alpha PnL"分开,LP 才能在产品回撤时正确判断"是不是基金本身坏了"。
CN 对照:2024 年 2 月 微盘 反转 + 2022 年 新能源 风格 反转 都是 因子收益 转负 而非 alpha 消失 的实例;但因为 CN 因子样本短、CN 私募 透明度低,很多 LP 当时误判为"经理人能力下降",赎回潮反而把损失放大。把每只产品季度业绩报告里 固定 包含因子归因 表 + alpha t-stat 时间序列,是把这种判断错误降到最低的硬指标。
通向 L4 的桥
L1 给比率;L2 给长 only Brinson 分解;L3 给 L/S 量化 因子归因 + alpha vs 风格 决策;L4 把三者合并成"配置者打分卡"——8 步流水线 + 7 问决策过滤器。LP 看到一只 私募 量化 5 年期 业绩,经过完整流水线后只读最终一行:invest / decline / counter-propose 智能贝塔 复制。下一课讲清楚每一步、每一问。