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

Brinson 归因:配置、选股与交互

4.6.2 · 业绩测量与归因 · 量化全流程

社保基金理事会一位资深投资经理把一份 沪深300 增强 私募 的年度业绩报告丢给你。基金宣传自己是"价值风格选股能手",过去一年相对 沪深300 全收益 跑赢 4%。表面看是技能。但你已经知道这是 2024 年的 价值跑赢成长 6% 的大年。问题是:这 4% 的主动收益里,有多少来自"在低估值行业(银行、非银金融、煤炭、石油)上超配权重",有多少来自"在每一个行业内部挑出比 沪深300 成分股更好的个股"?这两件事在 LP 眼里完全不一样:前者是行业轮动,30bp 的智能贝塔 ETF (510310 行业ETF / 沪深300价值ETF) 就能复制;后者才是真正的个股选择技能,值得 1.5%+20% 私募 量化 收费。Brinson 框架——这门课要讲的——是给长 only 与基准跟踪类产品做这种分解的唯一标准答案。

(A) 为什么需要 Brinson:长 only 与基准跟踪的设定

Brinson 框架 (Brinson-Hood-Beebower 1986 与 Brinson-Fachler 1985) 诞生于美国 institutional pension 的尽调场景:当一只长 only 基金跑赢基准时,这份主动收益从哪里来?这是一个比"夏普多少 / IR 多少"更追问机制的问题。

要做这种分解,你需要三组输入:(i) 组合在每个分组 ii 中的权重 wpiw_p^i(分组 = 申万 一级 行业 / GICS 11 sector / 国家 / 风格 box);(ii) 基准在同一分组中的权重 wbiw_b^i;(iii) 组合与基准在每个分组 内部 的回报 RpiR_p^iRbiR_b^i。分解要回答:主动收益 RpRbR_p - R_b 中,有多少由 (a) PM 相对基准的权重偏离决定(配置决策),(b) PM 行业内部的个股选择决定(选股决策),(c) 两者的交叉项决定?

Brinson 之所以能成立,是因为长 only 与基准跟踪类组合里 wbiw_b^i 始终非零、行业内部基准收益良好定义。当你尝试把 Brinson 套到 L/S 量化 中性 上,它会断:中性 产品的净 sector 暴露是长 - 短的残差,wpiw_p^i 接近 0,但基准(现金 + 0% 行业 sector 权重 或者 沪深300 全收益)却有完整的行业权重——(wpiwbi)(w_p^i - w_b^i) 会变成爆炸性的负数,分解结果不可读。这正是 L3 引入因子归因(因子模型 / Barra 模型)的原因:换计量手段。

(B) Brinson 代数

最干净的推导。组合总回报 Rp=iwpiRpiR_p = \sum_i w_p^i R_p^i;基准总回报 Rb=iwbiRbiR_b = \sum_i w_b^i R_b^i;主动回报 RpRb=i(wpiRpiwbiRbi)R_p - R_b = \sum_i (w_p^i R_p^i - w_b^i R_b^i)。对每一项加减一个 wbiRpiw_b^i R_p^i:

wpiRpiwbiRbi=wpiRpiwbiRpi+wbiRpiwbiRbi=(wpiwbi)Rpi+wbi(RpiRbi)=(wpiwbi)Rbi+(wpiwbi)(RpiRbi)+wbi(RpiRbi).\begin{aligned} w_p^i R_p^i - w_b^i R_b^i &= w_p^i R_p^i - w_b^i R_p^i + w_b^i R_p^i - w_b^i R_b^i \\ &= (w_p^i - w_b^i) R_p^i + w_b^i (R_p^i - R_b^i) \\ &= (w_p^i - w_b^i) R_b^i + (w_p^i - w_b^i)(R_p^i - R_b^i) + w_b^i (R_p^i - R_b^i). \end{aligned}

得到 BHB 1986 的三项规范分解。下面这段 Inline-code listing 用规范标签把三项的顺序固定下来:

(1) AE_i = (w_p^i - w_b^i) * R_b^i
(2) SE_i = w_b^i * (R_p^i - R_b^i)
(3) IE_i = (w_p^i - w_b^i) * (R_p^i - R_b^i)

加和等式 active_return = sum_i (AE_i + SE_i + IE_i) 在单期上 精确 成立——不存在残差。换成 KaTeX 块公式:

RpRb=i(wpiwbi)Rbi+iwbi(RpiRbi)+i(wpiwbi)(RpiRbi)R_p - R_b = \sum_i (w_p^i - w_b^i) R_b^i + \sum_i w_b^i (R_p^i - R_b^i) + \sum_i (w_p^i - w_b^i)(R_p^i - R_b^i)

Brinson-Fachler (BF 1985) 变体把 RbiR_b^i 内减一个基准总收益 RbR_b,使 AE 改为 AEi=(wpiwbi)(RbiRb)\text{AE}_i = (w_p^i - w_b^i)(R_b^i - R_b)。这样配置效应的符号更直观——AE 正意味着 超配了一个跑赢基准的行业,而非"超配了一个绝对收益正的行业"。SE 与 IE 不变,但会出现一个残差项 (RbiwpiRb)(R_b - \sum_i w_p^i R_b),通常并入总主动 收益。再进一步的 CAR-LO (custom-attribution-restated-long-only) 让 LP 自定义分组桶(币种 / 市值 十分位 / 质量 五分位),代数完全相同。

(C) 多期链接:Cariño / Menchero 方法

技术细节:BHB 的代数在单期上精确,但跨期的几何链 1+Rp,multi=t(1+Rp,t)1 + R_{p, \text{multi}} = \prod_t (1 + R_{p, t}) 是乘法,不是加法——单期效应不会自然加成到总主动收益。简单求和的"加和残差"会随期限线性增长。

Cariño 1999 / Menchero 2004 引入每期一个链接系数 ktk_t:

kt=ln(1+Rp,t)ln(1+Rb,t)Rp,tRb,tk_t = \frac{\ln(1 + R_{p,t}) - \ln(1 + R_{b,t})}{R_{p,t} - R_{b,t}}

Rp,t=Rb,tR_{p,t} = R_{b,t} 时取 L'Hôpital 极限 kt=1/(1+Rb,t)k_t = 1 / (1 + R_{b,t})。每个单期效应乘以 kt/Kk_t / K,其中 K=(ln(1+Rp)ln(1+Rb))/(RpRb)K = (\ln(1+R_p) - \ln(1+R_b)) / (R_p - R_b) 是同样的表达式在 累积 收益上的值。乘了之后,多期效应精确加和等于累积主动收益——加性恢复了。

Cariño 链接是 万得 (Wind) 业绩 归因 模块、MSCI Barra One、FactSet PA、Bloomberg PORT 的工业标准。另一种保加性的做法是 对数收益 Brinson——分解 ln(1+Rp)ln(1+Rb)\ln(1+R_p) - \ln(1+R_b) 而非 RpRbR_p - R_b——但单期量级是连续复利,可读性差。

(D) 解释:选股型 / 行业轮动型 / 集中下注型

Brinson 给出三种经理人的诊断指纹。下面这段 Inline-code listing 把三种角色固化下来:

(1) stock-picker
(2) sector-rotator
(3) concentrated

stock-picker (SE 主导):主动收益几乎全部来自行业内部的个股选择;行业层面权重与基准基本一致(各行业偏离都在 ±1% 内)。CN 典型:中证500 增强 / 沪深300 增强 产品里的 量化 团队——明汯 / 灵均 / 衍复 / 鸣锣 / 思勰 / 九坤 / 幻方 的中证500 增强 旗舰,通常 70-80% 的主动收益来自 SE,因为模型在每个 申万 行业 内挑名字,行业偏离被组合优化器约束在 ±1-2% 范围。配置者反应:这才是真正的 量化 选股 alpha,值得 1.5%+20% 私募 量化 收费

sector-rotator (AE 主导):主动收益主要来自行业偏离;行业内部权重接近基准。开头那只"价值经理"就是经典案例——超配 银行 / 非银 金融 / 煤炭 / 石油 这些"价值行业",其余靠 沪深300 成分股自然涨跌。配置者反应:这是 智能 贝塔 风格 暴露,30-50bp ETF 就能复制(沪深300价值ETF、行业ETF 组合);用对冲基金费率买这种暴露是亏的

concentrated (IE 主导):主动收益里 IE 项很大,代表 PM 同时 重仓某行业 + 在该行业里挑到正确的名字。CN 实例:2021 年的 新能源 风格 漂移 期间,一批 中证500 增强 把组合权重从分散转向重仓 锂电 / 光伏 / 整车 申万 二级 行业,并在子行业内挑到龙头(宁德时代 / 比亚迪 / 隆基 等)。表现亮眼但 active risk (跟踪误差) 很高。配置者反应:需要更长的样本期才能区分集中下注的技能与运气

三角化规则:健康的主动经理人 SE 持续为正(durable skill 信号);行业 轮动 型的 SE 在 0 附近震荡而 AE 在抓宏观;集中型在样本不长时无法定论。

(E) 工作样例与 Brinson 流水线

CN 工作样例:一只 沪深300 增强 私募 产品在 2024Q1 相对 沪深300 全收益 的归因。分组采用 申万 一级 11 个行业(银行 / 非银 金融 / 房地产 / 食品 饮料 / 医药 生物 / 电子 / 计算机 / 通信 / 国防 军工 / 公用 事业 / 化工)。给定季度起点的 wpiw_p^iwbiw_b^i、季度内 RpiR_p^iRbiR_b^i,逐行业算 AE / SE / IE,然后汇总。

样本数据(简化):银行行业 wp=12%,wb=8%,Rp=6.5%,Rb=6.0%w_p = 12\%, w_b = 8\%, R_p = 6.5\%, R_b = 6.0\%,得 AE=(0.120.08)×0.06=0.24%\text{AE} = (0.12 - 0.08) \times 0.06 = 0.24\%,SE=0.08×(0.0650.060)=0.04%\text{SE} = 0.08 \times (0.065 - 0.060) = 0.04\%,IE=0.04×0.005=0.02%\text{IE} = 0.04 \times 0.005 = 0.02\%,该行业贡献 ~0.30% 主动收益。逐个行业累计后,顶部贡献行业通常是 银行 / 非银 金融(2024Q1 价值反弹) + 电子(国产替代主题)。所有 11 行业 AE + SE + IE 加和等于总主动收益(例如 +2.3%)。

国际对照:同一套代数完全适用于美国 Russell 1000 长 only 产品在 GICS 11 sector 上的季度归因,代码不变,只换行业分类与基准代码;英文版本展开。

Brinson 流水线的五个步骤,按规范顺序:

  1. port_weights, bench_weights = load_sector_weights(period_start, fund_id, benchmark)
  2. port_returns, bench_returns = load_sector_returns(period_start, period_end, fund_id, benchmark)
  3. 对每个行业 i:AE_i = (port_weights[i] - bench_weights[i]) * bench_returns[i];SE_i = bench_weights[i] * (port_returns[i] - bench_returns[i]);IE_i = (port_weights[i] - bench_weights[i]) * (port_returns[i] - bench_returns[i])
  4. total_active = sum(AE) + sum(SE) + sum(IE)
  5. reconcile total_active == port_total_return - bench_total_return

下面是 Fenced python code block 形式的 BrinsonAttribution 类骨架:

import numpy as np

class BrinsonAttribution:
    # Brinson-Hood-Beebower attribution with Carino multi-period linking
    def load_period_data(self, period_start, period_end, fund_id, benchmark):
        # fetch sector weights and within-sector returns from administrator API
        return None

    def compute_single_period(self, port_weights, bench_weights, port_returns, bench_returns):
        ae = (port_weights - bench_weights) * bench_returns
        se = bench_weights * (port_returns - bench_returns)
        ie = (port_weights - bench_weights) * (port_returns - bench_returns)
        return {"AE": ae, "SE": se, "IE": ie}

    def link_multi_period(self, single_period_effects, method='carino'):
        # Carino linking restores additivity across periods
        return None

    def format_table(self, attribution_results):
        return None

    def reconcile(self, attribution_results, port_total_return, bench_total_return):
        total = sum(attribution_results["AE"]) + sum(attribution_results["SE"]) + sum(attribution_results["IE"])
        return abs(total - (port_total_return - bench_total_return)) < 1e-6

类名 BrinsonAttribution,五个方法 load_period_data / compute_single_period / link_multi_period / format_table / reconcile 的顺序,参数名(period_startperiod_endfund_idbenchmarkport_weightsbench_weightsport_returnsbench_returnssingle_period_effectsattribution_resultsport_total_returnbench_total_return),默认值 method='carino',以及注释 # Brinson-Hood-Beebower attribution with Carino multi-period linking,与英文版本字节级一致。

CN 行业 归因 的真实案例:新能源 风格 漂移

2021-2022 新能源 风格 漂移 是 CN 私募 量化 增强 群体里最 instructive 的案例。多家 沪深300 增强 / 中证500 增强 报出 12-18% 的年度主动收益。在 申万 一级 + 申万 二级 双层 Brinson 下,新能源 板块(电力 设备 / 有色 金属 锂电 / 汽车 整车) 的 AE 贡献 7-12%,行业内部 SE 贡献只有 2-4%。换句话说,大头是行业轮动,而非个股选择。2022 年下半年新能源回调,同一组产品的主动收益反转为 -5 到 -10%——再次提醒 LP:AE 主导的主动收益不是 alpha,是风险敞口。

监管口径:AMAC 中基协 私募 业绩 披露 规范 要求 量化 增强 / 行业 中性 / 风格 中性 产品在季度业绩报告里披露 行业 归因 + 风格 归因;主流 私募 信息 平台(朝阳 永续 / 私募 排排 网)按 申万 一级 + 申万 二级 标准模板生成 Brinson 表格;社保 基金 / 险资 / 私募 母 基金 (FOF) 在尽调中把"年度 SE 是否持续为正"列为硬指标。

公式探索

Formula Explorer

(w_p - w_b) * R_b + w_b * (R_p - R_b) + (w_p - w_b) * (R_p - R_b)

练习

Exercise

You are evaluating a long-only equity fund vs its benchmark for Q1 2024. The portfolio is a 沪深300 增强 fund (cn-region) using 11 申万 一级 行业. Given start-of-period sector weights w_p^i / w_b^i and Q1 sector returns R_p^i / R_b^i for the 11 sectors, do four computations and report a single table. (i) Compute per-sector AE_i = (w_p^i - w_b^i) * R_b^i. (ii) Compute per-sector SE_i = w_b^i * (R_p^i - R_b^i). (iii) Compute per-sector IE_i = (w_p^i - w_b^i) * (R_p^i - R_b^i). (iv) Sum across all 11 sectors to get total AE / SE / IE and verify the identity total_active = sum(AE) + sum(SE) + sum(IE) = R_p - R_b. Identify the top 3 contributing sectors by (AE + SE + IE) and classify the manager as stock-picker / sector-rotator / concentrated.

提示
用 numpy 把权重和收益转成一维数组,然后逐元素算三个效应;最后对 11 行业求和。AE 用基准收益、SE 用基准权重、IE 用两者偏离的乘积。
提示
分类规则:|sum(SE)| / |total_active| > 60% 是 stock-picker;|sum(AE)| / |total_active| > 60% 是 sector-rotator;|sum(IE)| / |total_active| > 30% 是 concentrated。

Brinson 的边界与 L1 / L3 / L4 衔接

L1 给出 IR 这个单数字;L2 把它的分子(主动收益)按 Brinson 拆成 AE / SE / IE。术语关联:夏普比率、信息比率、跟踪误差、贝塔 在 L1 已经定义;价值因子、动量、质量因子、规模因子、低波动因子(以及它们对应的 因子模型 / 因子暴露)在 L3 中作为因子归因 的回归变量出现。Alpha 衰减(alpha decay)在长期 Brinson 序列里表现为 SE 持续下降——CN 量化 行业 2020-2024 SE 中位数从 ~6%/年 压到 ~3%/年,部分就是行业内部 quant 信号的衰减。

行业风险归因(ex-ante 跟踪误差 / 因子风险贡献 vs 特定风险贡献)是 4.4.2 风险模型 模块的内容;Brinson 是 回报 归因,不是 风险 归因。GICS / 申万 行业 分类 的细节(申万 一级 11 / 申万 二级 37 / 申万 三级 199 行业的修订史、中证 行业 / 国证 行业 / 中信 行业 的差异)在 4.1.1 市场 与 微观 结构 数据 模块。

通向 L3 的桥

Brinson 在长 only 与基准跟踪类产品上是金标准。但当你面对一只 L/S 量化 中性 私募 — 中证500 中性 / 沪深300 中性 — 它的净 sector 权重接近 0,(wpiwbi)(w_p^i - w_b^i) 失去稳定性,Brinson 不再可读。L3 介绍 L/S 量化 的归因工具:把组合收益对一组 因子收益序列做 OLS 回归,直接读出"经理人的隐含风格暴露"和"扣完风格后还剩多少 alpha"。两类工具——长 only Brinson 与 L/S 因子回归——一起覆盖整个量化产品族;L4 再把两者合成完整流水线。