策略收益归因基础:Brinson归因模型、多期归因、交互效应处理

做量化交易这些年,我见过太多人盯着净值曲线傻乐。

“这个月赚了8个点,牛逼!”

然后呢?

赚在哪?亏在哪?是选股选对了,还是运气好踩中了行业风口?

一问三不知。

说白了,归因分析就是给你的收益做“尸检”。你得知道每一分钱是怎么来的,才能知道下次怎么复制它。

Brinson归因模型:最经典的收益拆解框架

Brinson模型最早是给公募基金用的,但放在量化策略里一样好使。它的核心逻辑很简单:

超额收益 = 资产配置贡献 + 个股选择贡献 + 交互效应

我习惯用个例子来理解。假设基准是沪深300,你的策略是“超配白酒,低配银行”。

  • 资产配置贡献:你赌对了行业权重。白酒涨了10%,银行跌了2%,你多配白酒就赚了。
  • 个股选择贡献:在白酒行业里,你选的茅台涨了15%,而行业平均只涨了10%。这是你的选股能力。
  • 交互效应:这两件事的“化学反应”。你既超配了白酒,又选对了茅台里的好股票。

公式长这样:

# 单期Brinson归因
def brinson_decomposition(portfolio_weight, benchmark_weight, 
                          portfolio_return, benchmark_return):
    """
    portfolio_weight: 策略在各行业的权重
    benchmark_weight: 基准在各行业的权重
    portfolio_return: 策略在各行业的收益率
    benchmark_return: 基准在各行业的收益率
    """
    # 资产配置效应
    allocation = (portfolio_weight - benchmark_weight) * benchmark_return
    
    # 个股选择效应
    selection = benchmark_weight * (portfolio_return - benchmark_return)
    
    # 交互效应
    interaction = (portfolio_weight - benchmark_weight) * \
                  (portfolio_return - benchmark_return)
    
    return allocation, selection, interaction

嗯,这里要注意:交互效应经常被新手忽略。我曾经见过一个策略,明明选股和配置都做得不错,但交互效应是负的,最后超额收益被吃掉一大块。为什么?因为你在超配的行业里选错了股票,或者在低配的行业里选对了股票——这两种情况都会产生负的交互效应。

多期归因:别被单期数据骗了

单期归因有个大坑:它假设每期的权重和收益是独立的

但现实不是这样的。你上个月赚了钱,这个月可能调仓了。上个月超配的行业,这个月可能已经卖掉了。单期归因没法告诉你“调仓行为”本身创造了多少价值。

多期归因要解决的就是这个问题。常用的方法有两种:

方法 核心思想 我踩过的坑
算术链接法 把每期的超额收益简单相加 忽略了复利效应,长期误差会累积
几何链接法 用乘法链接各期收益 计算复杂,但更符合实际

我个人更推荐几何链接法。虽然算起来麻烦点,但结果更靠谱。

# 多期几何链接归因
def geometric_attribution(period_allocations, period_selections, 
                          period_interactions):
    """
    将多期的归因结果进行几何链接
    """
    import numpy as np
    
    total_allocation = np.prod(1 + period_allocations) - 1
    total_selection = np.prod(1 + period_selections) - 1
    total_interaction = np.prod(1 + period_interactions) - 1
    
    # 注意:这里不能简单相加,需要做交叉项处理
    total_excess = (1 + total_allocation) * \
                   (1 + total_selection) * \
                   (1 + total_interaction) - 1
    
    return total_allocation, total_selection, total_interaction, total_excess
避坑指南
我曾经在实盘回测中只用算术链接法,结果发现归因出来的超额收益和实际收益对不上。查了两天才发现是复利效应导致的误差。从那以后,我坚持用几何链接法,或者至少做一次交叉验证。

交互效应处理:最容易被误解的部分

交互效应到底是什么?

说白了,就是你的配置决策和选股决策之间的“协同作用”

举个例子:

  • 你超配了科技行业(配置决策)
  • 你在科技行业里选了英伟达(选股决策)
  • 结果英伟达涨了50%,科技行业只涨了20%

这时候交互效应就是正的。因为你既赌对了行业,又赌对了股票。

但反过来:

  • 你超配了科技行业
  • 你在科技行业里选了个垃圾股,只涨了5%
  • 科技行业涨了20%

交互效应就是负的。你选股能力拖了配置的后腿。

怎么处理?我建议把交互效应单独拎出来看,不要合并到配置或选股里。很多教材会教你“把交互效应按比例分摊到配置和选股里”,但我不这么干。

我的习惯
交互效应单独列一栏。如果它长期为正,说明你的配置和选股是“共振”的,策略逻辑自洽。如果长期为负,说明你的配置和选股在打架——比如你超配了某个行业,但选的股票却是这个行业里最差的。这时候需要反思策略逻辑。

知识体系总览

下面这张图是我自己梳理的归因框架,你想想看,是不是这个理:

策略收益归因分析框架 策略总收益 基准收益 超额收益 资产配置效应 (行业权重偏离) 个股选择效应 (行业内选股能力) 交互效应 (配置×选股协同) 多期链接处理(几何链接法) 归因诊断报告

实战中的几个要点

最后分享几个我在实战中总结的经验:

  1. 别只看单期。单期归因波动很大,尤其是高频策略。至少看一个完整调仓周期的数据。
  2. 交互效应不是噪音。很多人觉得交互效应是“残差”,直接忽略。但它在某些策略里占比很高,比如行业轮动+精选个股的策略。
  3. 归因频率要和调仓频率匹配。日频调仓的策略,用周度归因就够了。月频调仓的策略,用季度归因。频率太高全是噪音。
  4. 基准选择很重要。用沪深300还是中证500?用等权还是市值加权?基准选错了,归因结果全是错的。
核心一句话
归因不是为了证明你牛逼,而是为了找到你策略里真正赚钱的那个“因子”。如果归因结果告诉你“选股贡献最大”,那你就该去优化选股模块。如果告诉你“配置贡献最大”,那你就该去研究行业轮动。

嗯,今天就聊到这。归因分析是个越挖越深的东西,后面我们还会聊到更细的因子归因和机器学习归因方法。到时候再细说。


公众号:蓝海资料掘金营,微信deep3321