4、Campisi模型基础:债券归因的独特逻辑、久期归因、利差归因、择时归因
聊到债券归因,很多人第一反应就是「算久期、算凸性」。嗯,这没错,但不够。
股票归因可以靠Barra模型,拆行业、拆风格因子。债券呢?债券的收益来源跟股票完全不一样。你想想看,债券的收益大头其实来自票息和利率变动,而不是什么「成长因子」或「价值因子」。
Campisi模型,就是专门为债券量身定做的归因框架。我个人习惯把它叫做「债券归因的教科书式解法」。今天我们就把它拆开揉碎了讲清楚。
4.1 债券归因的独特逻辑
股票归因和债券归因,底层逻辑完全不同。
股票收益主要来自价格变动,而价格变动又来自公司基本面、市场情绪、行业轮动这些。债券呢?债券有明确的票息,有到期日,有信用评级。它的收益来源更「结构化」。
Campisi模型抓住了这个本质。它把债券的超额收益拆成三块:
- 久期归因:你赌对了利率方向吗?
- 利差归因:你选对了信用债吗?
- 择时归因:你踩对了买卖时点吗?
说白了,Campisi模型就是问三个问题:「利率变了吗?」「信用利差变了吗?」「你操作对了吗?」
4.2 久期归因:利率变动的「放大器」
久期归因,是Campisi模型里最基础、也最直观的一块。
它的逻辑很简单:如果基准利率变了,你的组合因为久期配置不同,会比基准多赚或少赚多少?
公式长这样:
久期归因 = (组合久期 - 基准久期) × (-基准利率变动)
举个例子:
- 组合久期 5.0,基准久期 4.0
- 基准利率下降 0.5%
- 久期归因 = (5.0 - 4.0) × (-(-0.5%)) = 1.0 × 0.5% = 0.5%
这意味着,因为你的组合比基准「更长久期」,在利率下行时,你多赚了0.5%。
我曾经踩过一个坑:2019年某次归因分析,久期归因显示组合跑赢基准0.3%,但实际超额收益是负的。后来发现,问题出在凸性上——利率波动太大,久期近似失效了。从那以后,我每次做久期归因都会顺手算一下凸性贡献。
4.3 利差归因:信用债的「超额密码」
利差归因,说白了就是回答一个问题:你选的信用债,到底有没有给你带来超额收益?
利差归因可以进一步拆成两块:
- 信用利差变动归因:整个信用债市场利差变了,你因为配置了信用债,多赚或少赚了多少。
- 个券选择归因:在同类信用债里,你选的个券表现比同类好还是差。
公式上:
利差归因 = 组合信用利差暴露 × (-信用利差变动) + 个券选择残差
你想想看,如果整个市场信用利差收窄了50bp,你组合里信用债配得比基准多,那你就赚了。但如果你的个券踩雷了,信用利差反而走阔,那这部分收益就会被吃掉。
4.4 择时归因:你的「操作」值多少钱?
择时归因,是Campisi模型里最「性感」的一块。它衡量的是:你在不同时间点上的操作,到底创造了多少价值?
择时归因通常包含三个维度:
| 择时类型 | 含义 | 典型场景 |
|---|---|---|
| 久期择时 | 主动调整组合久期,赌利率方向 | 预期降息,拉长久期 |
| 期限结构择时 | 在利率曲线不同期限上做配置 | 做陡曲线:买短卖长 |
| 信用择时 | 主动调整信用债仓位 | 经济复苏期,加仓高收益债 |
择时归因的计算,核心是「持仓变动 × 后续收益」的逻辑。你上个月加仓了长久期债,这个月利率果然下了,那这部分收益就算作你的择时能力。
4.5 一个完整的Campisi归因案例
光讲理论不过瘾,我们看个实际案例。
假设某债券组合,月度超额收益为1.2%。基准是国债指数。我们跑一下Campisi归因:
# 伪代码示例:Campisi归因计算
def campisi_attribution(portfolio, benchmark, rate_change, spread_change):
# 久期归因
dur_attr = (portfolio.duration - benchmark.duration) * (-rate_change)
# 利差归因
spread_attr = portfolio.credit_spread_exposure * (-spread_change)
# 择时归因(简化版)
timing_attr = portfolio.timing_score * 0.01 # 假设择时评分
total_excess = dur_attr + spread_attr + timing_attr
return total_excess
# 假设数据
result = campisi_attribution(
portfolio={'duration': 4.5, 'credit_spread_exposure': 0.3, 'timing_score': 0.8},
benchmark={'duration': 3.8},
rate_change=-0.4, # 利率下行40bp
spread_change=-0.2 # 信用利差收窄20bp
)
print(f"久期归因: {0.28:.2%}")
print(f"利差归因: {0.06:.2%}")
print(f"择时归因: {0.80:.2%}")
print(f"总超额收益: {1.14:.2%}")
结果解读:
- 久期归因贡献了0.28%——因为组合久期比基准长,利率下行受益
- 利差归因贡献了0.06%——信用利差收窄,组合有信用债暴露
- 择时归因贡献了0.80%——基金经理的主动操作创造了主要价值
4.6 避坑指南
做Campisi归因这几年,我踩过不少坑。挑几个典型的说说:
- 数据不同频:我曾经用日频的利率数据和周频的持仓数据做归因,结果对不上。后来统一用日频,问题解决。
- 忽略凸性:利率波动大的时候,久期归因误差很大。建议加上凸性调整项。
- 利差数据「脏」:信用利差数据来源不同,结果可能差很多。我习惯用同一家数据商的利差曲线,保持一致性。
- 择时归因过度拟合:择时归因很容易「做出」漂亮数字。要小心——真正的择时能力需要长期验证,一个月的数据说明不了什么。
嗯,Campisi模型的内容就这些。它不复杂,但很实用。你只要把久期、利差、择时这三块拆清楚,债券归因的基本功就算打牢了。
公众号:蓝海资料掘金营,微信deep3321