2. 量化风控基础:概率论与数理统计回顾、线性代数基础、时间序列分析入门

各位同学,欢迎来到第二章。

说实话,很多做债券风控的朋友,一听到数学就头疼。我当年刚入行时也一样,觉得搞金融嘛,懂点宏观、懂点信用就够了。直到我第一次用VaR模型算出来的结果跟实际亏损差了十万八千里……嗯,那次之后我才明白,数学不是用来装点门面的,它是你的防弹衣。

这一章,我们不搞天书推导。我会把概率、线代、时间序列这三块,跟债券风控的实际场景串起来讲。你想想看,你每天面对的是收益率曲线、利差、违约概率,这些东西背后全是数学。躲不掉的,不如把它变成你的武器。

核心观点:量化风控的本质,是用数学语言描述不确定性。概率论描述风险的大小,线性代数描述风险的维度,时间序列描述风险的演变。

2.1 概率论与数理统计:风险的第一把尺子

概率论,说白了就是研究「不确定性」的学问。债券市场里,没有什么是确定的。发行人会违约吗?利率会上升吗?信用利差会走阔吗?这些问题,都需要用概率来回答。

2.1.1 随机变量与分布

我个人习惯把随机变量分成两类:离散型和连续型。在债券风控里,违约事件是离散的——要么违约(1),要么不违约(0)。而收益率、利差这些,是连续的。

举个例子。你持有一支信用债,它的违约概率是2%。这2%怎么来的?可能是基于历史评级迁移矩阵算出来的。我曾在项目中用Moody's的年度违约率数据,拟合出不同评级债券的违约分布。你会发现,BBB级和BB级的违约概率,差了不止一个数量级。

评级 1年违约概率(历史均值) 分布类型
AAA 0.01% 极左偏
AA 0.03% 左偏
A 0.08% 近似正态
BBB 0.30% 右偏
BB 1.20% 厚尾

这里要注意,正态分布在金融里被用得太滥了。债券收益率的变化,尤其是信用债,往往有厚尾特征。什么意思?就是极端事件发生的概率,比正态分布预测的要高得多。2008年雷曼倒闭,按正态分布算,几亿年才发生一次。但现实呢?

避坑指南:我曾经用正态分布去拟合高收益债的日收益率,结果VaR模型严重低估了尾部风险。后来改用t分布或GARCH模型,才勉强靠谱。记住,债券市场不是高斯的世界。

2.1.2 条件概率与贝叶斯

贝叶斯定理在信用风控里太有用了。你想想,你有一个先验的违约概率(比如基于评级),然后你收到了新的信息(比如公司财报变差、行业利空),你怎么更新你的判断?

公式很简单:

P(违约 | 新信息) = P(新信息 | 违约) * P(违约) / P(新信息)

我曾在做信用债预警系统时,用贝叶斯框架把多个信号(杠杆率变化、利息覆盖倍数、舆情评分)融合成一个动态违约概率。效果比单因子模型好得多。

2.2 线性代数基础:高维风险的骨架

线性代数,很多人觉得抽象。其实它就是研究「空间」和「变换」的学问。在债券风控里,你的组合可能有几百只债券,每只债券有几十个风险因子。这就是一个高维空间。你怎么降维?怎么找主成分?怎么算协方差?全得靠线性代数。

2.2.1 向量与矩阵:组合的数学表达

把你的债券组合想象成一个向量。每只债券的权重就是向量的分量。收益率曲线上的关键期限点(1Y, 2Y, 5Y, 10Y)构成另一个向量。这两个向量怎么相互作用?通过矩阵乘法。

举个例子,计算组合的久期:

组合久期 = 权重向量^T * 各债券久期向量

就这么简单。但如果你要算组合的凸性,那就是一个矩阵运算了。

2.2.2 协方差矩阵:风险的联动

债券之间不是独立的。国债和信用债会联动,不同评级的信用债也会联动。协方差矩阵就是描述这种联动关系的工具。

我建议你记住这个公式:

组合方差 = w^T * Σ * w

其中w是权重向量,Σ是协方差矩阵。这个公式是马科维茨均值-方差模型的核心。我在做债券组合优化时,每次调整权重,都要重新算一遍这个值。算得多了,你会发现,协方差矩阵的稳定性是个大问题。历史数据算出来的协方差,未来可能完全变样。

实战技巧:我个人习惯用指数加权移动平均(EWMA)来估计协方差矩阵,给近期的数据更高的权重。这样能更快地捕捉市场结构的变化。GARCH模型也可以,但计算量更大。

2.2.3 特征分解与PCA

收益率曲线有多个期限点,但它们不是独立的。你会发现,1Y和2Y的变动高度相关,5Y和10Y也是。主成分分析(PCA)就是用来提取这些「共同因子」的。

我做过一个研究,用PCA分解中国国债收益率曲线。结果发现,第一个主成分(水平因子)解释了超过80%的方差,第二个主成分(斜率因子)解释了约12%。也就是说,你只需要两个因子,就能描述整条曲线的大部分变动。

债券量化风控知识体系(第二章) 概率论与数理统计 线性代数基础 时间序列分析 随机变量与分布 条件概率与贝叶斯 厚尾分布与VaR 向量与矩阵运算 协方差矩阵 特征分解与PCA 平稳性与单位根 ARIMA模型 GARCH与波动率 债券量化风控模型

2.3 时间序列分析入门:风险的脉搏

债券数据,本质上都是时间序列。收益率每天在变,利差每天在变,违约率每年更新。你怎么从这些历史数据里提取规律?怎么预测未来?这就是时间序列分析要解决的问题。

2.3.1 平稳性:一切分析的前提

平稳性,说白了就是数据的统计性质(均值、方差)不随时间变化。如果数据不平稳,你做的回归、预测全是假的。

我遇到过最典型的坑:直接用非平稳的利率序列做回归,结果R²高达0.9,但其实是伪回归。两个完全不相关的随机游走序列,也能跑出高R²。你想想看,这有多危险。

怎么检验平稳性?ADF检验是最常用的。原假设是「存在单位根」(即不平稳)。p值小于0.05,才能拒绝原假设,认为序列平稳。

# Python示例:ADF检验
from statsmodels.tsa.stattools import adfuller
import numpy as np

# 模拟一个随机游走(非平稳)
np.random.seed(42)
random_walk = np.cumsum(np.random.randn(1000))

# ADF检验
result = adfuller(random_walk)
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
# p值通常大于0.05,说明非平稳

# 一阶差分后
diff_series = np.diff(random_walk)
result_diff = adfuller(diff_series)
print(f'差分后p值: {result_diff[1]:.4f}')
# p值通常小于0.05,说明平稳

2.3.2 ARIMA模型:经典的时间序列工具

ARIMA模型,全称是自回归积分滑动平均模型。名字听着吓人,其实逻辑很简单:

  • AR(自回归):用过去的值预测现在的值。比如今天的利率跟昨天的利率有关。
  • I(积分):对非平稳序列做差分,让它变平稳。
  • MA(滑动平均):用过去的预测误差来修正现在的预测。

我在做国债收益率预测时,ARIMA(1,1,1)经常是起点。但说实话,ARIMA对线性关系捕捉得不错,遇到结构性突变(比如央行突然加息)就抓瞎了。所以它更适合做短期预测,比如未来1-5天的收益率变动。

个人经验:用ARIMA之前,一定要先做季节性和趋势分解。债券收益率往往有日历效应(比如月末、季末的资金面紧张),这些成分不剔除,模型会误判。

2.3.3 GARCH模型:波动率的建模

债券市场有个特点:波动率会聚集。平静期波动小,动荡期波动大。GARCH模型就是用来捕捉这种「波动率聚集」效应的。

我记得2013年钱荒期间,银行间市场隔夜回购利率的波动率飙升了10倍以上。如果用恒定波动率的模型去算VaR,那简直是自杀。GARCH模型能动态调整波动率估计,在市场动荡时自动放大风险敞口。

一个简单的GARCH(1,1)模型:

σ²_t = ω + α * ε²_{t-1} + β * σ²_{t-1}

其中σ²_t是当期方差,ε²_{t-1}是上一期的残差平方(代表新信息),σ²_{t-1}是上一期的方差(代表旧信息)。α+β越接近1,波动率的持续性越强。

2.3.4 协整:债券利差的秘密

协整这个概念,在债券配对交易里特别重要。两支信用债的利差,可能各自是非平稳的,但它们的线性组合却是平稳的。这说明它们之间存在长期均衡关系。

我曾在做信用债利差套利时,用协整检验筛选配对。找到协整关系的债券对,当利差偏离均值超过2个标准差时,做多被低估的、做空被高估的,等待均值回归。这个策略在2016-2017年效果不错,但2018年信用违约潮后就失效了——因为市场结构变了。

重要提醒:协整关系不是永恒的。它依赖于市场结构和投资者行为。一旦出现系统性风险(比如评级下调潮、行业政策突变),协整关系可能瞬间破裂。做策略时一定要设止损。

好了,这一章的内容就到这里。概率论、线性代数、时间序列,这三块是量化风控的三大支柱。你不需要成为数学家,但你需要理解它们的核心思想,知道什么时候该用什么工具。下一章,我们会把这些工具真正用到债券风控场景中——从VaR计算到压力测试,从信用评分到组合优化。到时候你会发现,今天打的基础,全都能派上用场。


专注资料整理