2. 信用风险基础:违约概率、回收率、信用利差的决定因素

信用债投资,说白了就是跟“借钱不还”的风险打交道。你想想看,买国债几乎不用担心还不上,但买企业债就得掂量掂量——这家公司会不会暴雷?万一暴雷了能拿回多少?市场又给它定价了多少“风险补偿”?

这三个问题,正好对应了信用风险的三大核心要素:违约概率(PD)回收率(RR)、以及信用利差(CS)。我个人习惯把这三点称为“信用风险三角”,搞懂它们,你就拿到了信用债投资的入门钥匙。

核心公式:预期损失 = 违约概率 × (1 - 回收率) × 风险敞口

信用利差 ≈ 预期损失 + 风险溢价 + 流动性溢价

2.1 违约概率:谁更容易“暴雷”?

违约概率,就是一家公司在未来一段时间内(比如1年)还不上钱的概率。我刚开始做信用研究时,总觉得这玩意儿是玄学,后来发现其实有章可循。

2.1.1 影响PD的核心因素

  • 财务健康度:资产负债率、利息覆盖倍数、现金流稳定性。说白了,就是看它赚的钱够不够还利息。
  • 行业周期:强周期行业(钢铁、煤炭)在经济下行时PD飙升。我记得2015年那波产能过剩,多少煤企债直接变“废纸”。
  • 公司治理:大股东掏空、财务造假、关联交易。嗯,这里要注意,有些公司财报看着漂亮,但一查实控人背景就露馅。
  • 宏观环境:利率上行、信用收缩、政策突变。比如2020年疫情初期,很多企业的PD模型直接失效。

2.1.2 量化PD的常用方法

我个人最常用的是Merton模型的简化版——把公司股权看作看涨期权,债务看作执行价。当公司资产价值低于债务时,就触发违约。

# 简化版Merton模型计算PD
import numpy as np
from scipy.stats import norm

def calc_pd(equity_value, debt_value, equity_vol, risk_free_rate, maturity=1):
    # 资产价值估算(简化处理)
    asset_value = equity_value + debt_value * 0.5
    # 违约距离
    distance_to_default = (np.log(asset_value / debt_value) + 
                          (risk_free_rate - 0.5 * equity_vol**2) * maturity) / (equity_vol * np.sqrt(maturity))
    # 违约概率
    pd = norm.cdf(-distance_to_default)
    return pd

# 示例:某公司股权市值100亿,债务50亿,波动率30%,无风险利率3%
pd_example = calc_pd(100, 50, 0.3, 0.03)
print(f"隐含违约概率: {pd_example:.2%}")

避坑指南:我曾经用Merton模型算出一只城投债PD只有0.1%,结果半年后它展期了。后来我才意识到——模型假设资产价值是连续变化的,但现实中“黑天鹅”事件会让资产价值瞬间跳崖。所以,模型输出只能当参考,不能当圣旨

2.2 回收率:暴雷后能拿回多少?

违约概率告诉你“会不会出事”,回收率告诉你“出事之后损失多大”。你想想看,同样违约,有抵押品的债和纯信用债,回收率天差地别。

2.2.1 回收率的决定因素

因素 影响方向 说明
抵押品质量 正相关 房产、设备等硬资产回收率高,无形资产几乎为零
优先级结构 正相关 有担保债 > 优先级无担保 > 次级债 > 永续债
行业特征 差异大 公用事业回收率约60%,科技公司可能只有20%
法律环境 正相关 破产制度完善的国家回收率更高

我在项目中遇到过一只地产债,抵押物是某二线城市的商业地产。当时觉得回收率至少50%,结果真违约了才发现——那栋楼根本卖不掉,最后只拿回18%。所以,抵押品的流动性比账面价值更重要

2.2.2 回收率的量化估算

业界常用历史平均法市场隐含法。我个人偏好后者——从信用违约互换(CDS)价格反推回收率。

# 从CDS价差反推回收率
def implied_recovery(cds_spread, hazard_rate, risk_free_rate):
    # 简化模型:CDS价差 ≈ (1 - RR) × 违约强度
    recovery_rate = 1 - cds_spread / hazard_rate
    return max(0, min(1, recovery_rate))

# 示例:某公司5年期CDS价差300bp,隐含违约强度4%
cds_spread = 0.03
hazard_rate = 0.04
rr = implied_recovery(cds_spread, hazard_rate, 0.03)
print(f"隐含回收率: {rr:.1%}")

注意:回收率不是固定的!同一只债在不同时间点违约,回收率可能差30个百分点。我见过最极端的案例——某公司第一次违约回收率45%,第二次违约只剩12%。所以做压力测试时,一定要给回收率加个“悲观情景”。

2.3 信用利差:市场给的“风险补偿”

信用利差,就是企业债收益率比同期限国债高出的部分。说白了,就是市场让你多赚的那点钱,用来补偿你承担的信用风险。

2.3.1 信用利差的构成

很多人以为信用利差就等于预期损失,其实不然。我拆解一下:

  • 预期损失补偿:PD × (1 - RR),这是最基础的部分
  • 风险溢价:投资者承担不确定性要求的额外回报。你想想看,如果预期损失是1%,但利差是2%,多出来的1%就是风险溢价
  • 流动性溢价:信用债流动性差,买卖价差大,这部分是补偿你“想卖时卖不掉”的风险
  • 税收因素:部分信用债有税收优惠,会影响利差

2.3.2 影响信用利差的宏观因素

因素 典型影响 我的观察
经济周期 衰退期利差走阔 2008年利差从100bp飙到600bp
货币政策 宽松时利差收窄 2020年美联储放水,利差迅速回落
市场情绪 恐慌时利差飙升 2022年理财赎回潮,信用债利差一天跳升50bp
供给冲击 新债发行量大时利差走阔 每年3-4月信用债供给高峰,利差通常承压

2.3.3 信用利差的量化分解

我个人习惯用回归分析法把利差拆成不同成分。举个例子:

# 信用利差分解(简化版)
import statsmodels.api as sm

# 假设我们有历史数据
# y: 信用利差
# X1: 违约概率(PD)
# X2: 回收率(1-RR)
# X3: 流动性指标(买卖价差)
# X4: 市场波动率(VIX)

def decompose_cs(cs_data, pd_data, lgd_data, liquidity_data, vix_data):
    X = sm.add_constant(np.column_stack([pd_data, lgd_data, liquidity_data, vix_data]))
    model = sm.OLS(cs_data, X).fit()
    return model.params

# 示例输出(假设数据)
# const: 0.5%  (基础利差)
# PD: 0.8     (每1%的PD贡献0.8%利差)
# LGD: 0.3    (每1%的LGD贡献0.3%利差)
# Liquidity: 0.4 (流动性溢价)
# VIX: 0.02   (每1单位VIX贡献0.02%利差)

实战技巧:我建议你关注利差的“异常值”。当一只债的利差远高于模型预测值时,往往意味着市场在定价一些你没看到的风险——比如大股东质押爆仓、或者行业政策突变。这时候,别急着抄底,先查查有没有隐藏的雷

2.4 知识体系总览

下面这张图,是我梳理的信用风险分析框架。你可以把它当作一个检查清单——每次分析信用债时,按这个框架过一遍,基本不会漏掉关键点。

信用风险分析框架 信用风险三角 违约概率 回收率 信用利差 影响因素 违约概率决定因素 • 财务健康度 • 行业周期 • 公司治理 • 宏观环境 • Merton模型 回收率决定因素 • 抵押品质量 • 优先级结构 • 行业特征 • 法律环境 • CDS反推法 信用利差决定因素 • 预期损失补偿 • 风险溢价 • 流动性溢价 • 经济周期 • 市场情绪 预期损失 = PD × (1 - RR) × 风险敞口

嗯,到这里信用风险的基础框架就搭好了。记住,这三个要素不是孤立的——违约概率上升时,回收率往往也会下降(因为资产贬值),信用利差则会同步走阔。做量化建模时,一定要考虑它们之间的联动关系。

核心要点回顾:

  • 违约概率看“会不会出事”,回收率看“出事损失多大”,信用利差看“市场要多少补偿”
  • 量化PD别迷信模型,要结合定性判断
  • 回收率的关键是抵押品流动性和法律保护
  • 信用利差 = 预期损失 + 风险溢价 + 流动性溢价,别只看预期损失

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