第四章:收益率曲线构建方法

收益率曲线这东西,说白了就是市场的“体温计”。你想想看,不同期限的债券收益率摆在一起,能告诉你市场对未来利率怎么看、对经济前景怎么想。但问题是——这些收益率不是现成的,你得自己“造”出来。

我个人习惯把收益率曲线构建分成四类方法:Bootstrapping、Nelson-Siegel、Svensson、样条插值。每种方法都有自己的脾气,咱们一个一个聊。

收益率曲线构建方法 Bootstrapping 从零息债券推导 Nelson-Siegel 参数化模型 Svensson Nelson-Siegel扩展 样条插值 分段多项式拟合 ✅ 精确匹配市场数据 ✅ 平滑、参数少 ✅ 双驼峰拟合 ✅ 局部灵活性强 应用场景:债券定价 · 利率衍生品估值 · 风险管理 · 货币政策分析

4.1 Bootstrapping方法

Bootstrapping,中文叫“自举法”。名字挺唬人,其实逻辑很简单——从已知的附息债券价格,一步步倒推出零息收益率。

我在项目中遇到过不少新手,上来就问:“老师,为什么不用直接到期的收益率?” 嗯,问题在于市场上真正零息的债券很少,大部分是附息债。你得把利息剥离掉,才能得到纯纯的折现因子。

核心思路:

短端收益率已知 → 用短端折现长端的第一笔现金流 → 解出长端收益率 → 依次迭代

举个例子。假设市场上有三只国债:

期限 票面利率 价格(面值100)
1年 0% 97.5
2年 4% 101.2
3年 5% 103.8

第一步,1年期零息收益率直接算:

r1 = (100 / 97.5)^(1/1) - 1 = 2.564%

第二步,2年期附息债。每年付息4元,第一笔利息用r1折现:

4 / (1 + 2.564%) + (100 + 4) / (1 + r2)^2 = 101.2
解出 r2 = 3.128%

第三步,3年期同理,用r1和r2折现前两笔利息,解出r3。

我的经验:Bootstrapping最怕数据缺失。如果某个期限没有对应债券,你就得插值。我曾经因为1.5年期数据缺失,硬是用线性插值补了一个,结果曲线在1.5年处出现“折角”,看着就别扭。

注意:Bootstrapping要求债券的现金流日期对齐。如果付息日不一致,你得先做日期调整。别小看这个细节,差一天可能差好几个BP。

4.2 Nelson-Siegel模型

Bootstrapping虽然精确,但有个毛病——它只给你离散的点。你想想看,如果我要一个2.37年期的收益率,怎么办?插值?那插出来的东西靠谱吗?

Nelson-Siegel模型就是来解决这个问题的。它用一个简洁的数学公式,把整条收益率曲线“捏”出来。

公式长这样:

r(t) = β0 + β1 * [1 - exp(-t/τ)] / (t/τ) + β2 * [ [1 - exp(-t/τ)] / (t/τ) - exp(-t/τ) ]

看着复杂?我拆开给你看:

  • β0:长期利率水平,决定了曲线右端的高度
  • β1:短期利率偏离,决定了曲线左端的斜率
  • β2:中期曲率,决定了曲线中间是凸还是凹
  • τ:衰减速度,控制曲线从短期到长期的过渡快慢

我个人习惯用Nelson-Siegel做“快速扫描”。比如早上开盘前,拿最近10只活跃券的价格,跑一遍优化,5秒钟就能得到一条平滑的曲线。虽然拟合精度不如Bootstrapping,但胜在快、稳。

避坑指南:我曾经遇到一个案例——用Nelson-Siegel拟合超长期国债(30年+),结果β0一直收敛不到合理值。后来发现,30年以上的债券流动性太差,报价本身就有问题。记住:模型再牛,也救不了垃圾数据。

4.3 Svensson模型

Svensson是Nelson-Siegel的升级版。它多加了两个参数,专门用来处理“双驼峰”形状的收益率曲线。

什么时候会出现双驼峰?我告诉你——经济复苏初期,或者货币政策预期混乱的时候。比如2020年疫情后,短端被央行压着,长端因为通胀预期飙升,中间段又因为复苏不确定性,结果曲线就扭成了“S”形。

Svensson的公式在Nelson-Siegel基础上加了一项:

r(t) = β0 + β1 * [1 - exp(-t/τ1)] / (t/τ1) + β2 * [ [1 - exp(-t/τ1)] / (t/τ1) - exp(-t/τ1) ] 
       + β3 * [ [1 - exp(-t/τ2)] / (t/τ2) - exp(-t/τ2) ]

多出来的β3和τ2,就是用来捕捉第二个“驼峰”的。

参数 含义 典型范围
β0 长期利率 2%~5%
β1 短期偏离 -3%~3%
β2 第一曲率 -5%~5%
β3 第二曲率 -3%~3%
τ1, τ2 衰减速度 0.5~10

我的建议:Svensson参数多,拟合时容易过拟合。我一般会加一个正则化项,让β3尽量小——除非数据真的强烈支持双驼峰。否则,你拟合出来的曲线可能“扭”得跟麻花似的,看着就不对劲。

4.4 样条插值法

样条插值,说白了就是“分段拟合”。把收益率曲线切成几段,每段用一个低阶多项式去拟合,然后在连接点保证平滑。

常用的有三次样条(Cubic Spline)和B样条(B-Spline)。我个人更偏爱B样条,因为它局部控制能力强——你改一个点的数据,不会影响整条曲线。

样条插值的步骤:

  1. 选择节点(knots)——通常放在1年、3年、5年、10年、30年
  2. 在每个区间内拟合三次多项式
  3. 在节点处保证函数值、一阶导数、二阶导数连续
  4. 用最小二乘法求解所有系数
# Python伪代码示例
import numpy as np
from scipy.interpolate import CubicSpline

# 已知期限和收益率
maturities = np.array([1, 2, 3, 5, 7, 10, 30])
yields = np.array([2.5, 2.8, 3.0, 3.2, 3.3, 3.5, 3.8])

# 三次样条插值
cs = CubicSpline(maturities, yields, bc_type='natural')

# 预测2.5年收益率
yield_2_5 = cs(2.5)
print(f"2.5年收益率: {yield_2_5:.2f}%")

注意:样条插值在端点处容易“翘尾巴”。尤其是30年以上的部分,如果数据稀疏,样条可能会给出离谱的预测。我曾经见过一个模型,30年收益率3.8%,样条插到40年直接飙到6%——这明显不合理。解决办法是加一个“自然边界条件”,强制二阶导数为零。

4.5 方法对比与选择

说了这么多,到底该用哪个?我列个表给你参考:

方法 优点 缺点 适用场景
Bootstrapping 精确匹配市场数据 离散点、依赖数据完整性 定价、套利分析
Nelson-Siegel 平滑、参数少、计算快 无法拟合双驼峰 快速扫描、宏观分析
Svensson 能拟合复杂形状 参数多、易过拟合 货币政策分析、复杂曲线
样条插值 局部灵活、精度高 端点不稳定、节点选择敏感 精细定价、风险管理

我个人习惯是:做交易决策时用Bootstrapping+样条插值组合,确保精度;做策略研究时用Nelson-Siegel或Svensson,追求平滑和可解释性。

最后说一句:没有完美的模型,只有合适的模型。你想想看,如果市场流动性极差,报价都失真,你用再复杂的模型也是白搭。做固收交易,第一课永远是——尊重数据,敬畏市场。

专注资料整理