halo 的技术博客

返回

一个投资级债券为什么比同期限国债收益率高 100 个基点?教科书的第一反应:因为它有违约风险,市场要求补偿。但如果你真把这 100 个基点全当成「违约补偿」,用评级对应的年违约概率反推,你会发现反推出来的违约概率比真实违约概率高好几倍。这说明利差里藏着别的东西

结论先放这:投资级信用利差的绝大部分不是违约补偿,而是流动性溢价与风险厌恶溢价。在本文用真实计算造出的(评级 × 时间)面板里,平静期 BBB 利差约 95bps,其中违约补偿只占约 22bps(23%),流动性溢价约 41bps、风险厌恶溢价约 32bps——非违约成分合计占 77%;越往高评级走,这个占比越高,AAA 的非违约成分甚至达到 97%。危机期非违约成分占比还会进一步上升。换句话说,信用利差不是违约概率的温度计,它是一个混了「怕违约、怕卖不掉、怕别人砸盘」三种情绪的复合指标。附完整 Python 与四个真实计算的分解图(高阶)。

BBB 信用利差的三因子分解:观测利差 = 违约补偿 + 流动性溢价 + 风险厌恶溢价,危机期非违约两块明显放大

一、利差到底是什么:一个可加的分解框架#

最干净的分解思路,是把观测利差 sts_t(信用债收益率减同期限无风险利率)写成三段之和:

st=stdefault+stliq+strisks_t = s^{\text{default}}_t + s^{\text{liq}}_t + s^{\text{risk}}_t
  • 违约补偿 sdefaults^{\text{default}}:持有期内预期信用损失 (1R)PD(1-R)\cdot \mathrm{PD}RR 是违约回收率,PD 是年违约概率。这是唯一「真和违约有关」的部分。
  • 流动性溢价 sliqs^{\text{liq}}:债券不好卖、买卖价差大、急用钱时折价出的成本。它和违约概率几乎无关,只和二级市场的厚度有关。
  • 风险厌恶溢价 srisks^{\text{risk}}:投资者在恐慌期整体要求更高的风险补偿(类似 VIX 驱动的股债联动溢价),对所有信用债普涨普跌。

为什么这个分解重要?因为只有第一段能被拿去反推违约概率。如果你把整段利差当违约补偿,就等于默认后两块为零——而它们往往占大头。

我们用一个受控的合成面板把这三块分别造出来,每一块都来自显式公式(不是黑箱),这样可以精确知道「每一分钱利差是哪里来的」:

注意 LIQ_MULT / RA_MULT 的设计:同一段非违约溢价,对不同评级放大的倍数不同。高评级债(AAA/AA)极度好卖、又被视为避险资产,所以流动性溢价与风险溢价本来就薄;低评级债(BB/B)本来就难出手、危机时又最先被抛,所以这两块被显著放大。这让利差对评级严格单调,且危机期整体抬高——这正是真实信用市场的样子。

二、平静期各评级的分解:违约补偿只是「零头」#

把第 90 个月(平静期)的六档评级利差拆开,得到的横向对比非常能说明问题:

平静期各评级利差分解:违约补偿占比随评级下降而上升,投资级非违约成分普遍 77%–97%

各档的观测利差与三段构成(真实计算):

评级违约补偿流动性溢价风险厌恶溢价观测利差非违约占比
AAA~1bps~13~132796.6%
AA~3~17~173692.0%
A~10~25~235882.2%
BBB~22~41~329576.9%
BB~99~78~5523253.5%
B~390~129~7159134.0%

最反直觉的一行是 AAA:利差只有 27bps,但其中违约补偿约 1bps——96.6% 付的是流动性与风险厌恶,不是违约。AAA 几乎不会违约,市场也知道,所以那 1bp 就够了;你买 AAA 多付的 26bps,买的是「随时能卖、危机时不慌」。

而到 B 档,违约补偿终于成了主角(390 / 591 ≈ 66%)。这给出一条清晰的规律:评级越差,利差越「诚实」地反映违约;评级越好,利差越是一本「流动性+情绪」的账。这也是为什么用投资级利差反推违约概率会系统性高估——你量的是情绪,却当成概率。

三、把利差全当违约补偿,会高估违约概率多少倍#

反推公式很简单:如果假设「整段利差都是违约补偿」,那隐含违约概率

PDimpl=st(1R)×104\mathrm{PD}^{\text{impl}} = \frac{s_t}{(1-R)\times 10^4}

我们拿平静期各档的真实利差反推,和评级基线真实 PD 对比(对数坐标):

隐含 PD vs 真实 PD:投资级红点远高于 45° 虚线,说明把利差全当违约补偿会大幅高估违约概率

  • BBB:真实 PD 40bps,隐含 PD ≈ 173bps,高估 4.3 倍
  • AAA:真实 PD 2bps,隐含 PD ≈ 60bps,高估约 30 倍

这不是模型 bug,是定义错误:你让「流动性+风险厌恶」两块替「违约」背了锅。水平线的长度(隐含值 − 真实值)就是被错算成违约的非违约成分。实务含义很直接:信用债的相对价值判断,不能只看利差高低,还要看「利差里有多少是情绪」。危机期情绪块暴涨,利差走阔可能和违约概率几乎无关——这正是 2008/2020 信用利差飙到历史极值、但实际违约率远没到那个量级的原因。

四、危机期非违约成分占比更高:一张热力图#

把「非违约成分占比」按(评级 × 三种市场状态)画成热力图,规律更刺眼:

非违约成分占比热力图:投资级在危机期非违约占比普遍 94%–99%,高收益债也升到 72%–86%

状态AAAABBBBBB
平静期96.6%82.2%76.9%53.5%34.0%
2008 危机99.4%96.2%94.9%86.5%74.2%
2020 危机99.3%95.8%94.4%85.3%72.3%

越低评级,非违约占比在危机里涨得越多(B 从 34% 涨到 72%–74%)。直觉是:危机时所有人抢着卖信用债,越是难卖的低评级债,流动性溢价被逼得越狠;同时风险厌恶溢价对所有信用债普涨。所以危机期利差的「信息含量」最低——它主要说的是「市场在逃」,而不是「这家公司要违约了」。

五、怎么用:把利差拆开再做决策#

对量化研究者,这个分解框架有三条直接用途:

  1. 相对价值:两只同评级债,利差差 30bps,先看谁的流动性/风险块更厚。如果差的全在情绪块,那是交易摩擦不是 alpha;如果差在「市场额外给的违约补偿」,才是真信号。
  2. 危机择时:监控非违约两块的总量。当流动性+风险溢价占比突破历史 95 分位、而违约补偿几乎没动,说明是「市场恐慌」不是「基本面恶化」,往往接近信用利差的顶部。
  3. 风险预算:你的信用组合回撤,有多少来自真实信用事件、多少来自流动性挤兑?拆开才知道该加对冲还是该扛。

最后给一个诚实的边界:本文用合成面板是因为真实逐券利差的三因子不可观测(流动性、风险厌恶没有干净代理变量),我们给的是结构与数量级正确的受控演示,不是对某只真实债券的点估计。真实世界里常用 CDS-现金债基差、Amihud 非流动性、VIX/信用利差期权隐含波动率去分别逼近这三块——但「利差 ≠ 违约概率」这个核心结论,在任何数据下都成立。

# 把任意观测利差按本文框架拆成三块(需先估计 liq_mult / ra_mult)
def decompose(s_obs, pd, rec, illiq, risk, lm, rm, kL=40.0, kRA=35.0):
    s_def = (1 - rec) * pd * 1e4
    s_liq = kL * illiq * lm
    s_ra  = kRA * risk * rm
    s_def_impl = s_obs - s_liq - s_ra   # 残差即「无法被非违约解释」的违约补偿
    return dict(default=s_def, liq=s_liq, risk=s_ra, default_implied=max(s_def_impl, 0.0))

# 示例:BBB 平静期
out = decompose(95.4, 0.0040, 0.45, illiq_t[90], risk_t[90], 1.0, 1.0)
print({k: round(v, 1) for k, v in out.items()})
# {'default': 22.0, 'liq': 41.0, 'risk': 32.4, 'default_implied': 22.0}
python

把利差拆开看,你会发现信用债研究八成的工作量,其实是在区分「怕违约」和「怕卖不掉、怕别人砸盘」——而后者,才是利差大部分时候在说的故事。

信用利差分解:违约补偿、流动性溢价与风险厌恶各占多少
https://blog.halo26812.eu.org/blog/credit-spread-decomposition-default-liquidity
Author halo
Published at 2026年8月27日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨