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年雷曼倒闭,按正态分布算,几亿年才发生一次。但现实呢?
2.1.2 条件概率与贝叶斯
贝叶斯定理在信用风控里太有用了。你想想,你有一个先验的违约概率(比如基于评级),然后你收到了新的信息(比如公司财报变差、行业利空),你怎么更新你的判断?
公式很简单:
P(违约 | 新信息) = P(新信息 | 违约) * P(违约) / P(新信息)
我曾在做信用债预警系统时,用贝叶斯框架把多个信号(杠杆率变化、利息覆盖倍数、舆情评分)融合成一个动态违约概率。效果比单因子模型好得多。
2.2 线性代数基础:高维风险的骨架
线性代数,很多人觉得抽象。其实它就是研究「空间」和「变换」的学问。在债券风控里,你的组合可能有几百只债券,每只债券有几十个风险因子。这就是一个高维空间。你怎么降维?怎么找主成分?怎么算协方差?全得靠线性代数。
2.2.1 向量与矩阵:组合的数学表达
把你的债券组合想象成一个向量。每只债券的权重就是向量的分量。收益率曲线上的关键期限点(1Y, 2Y, 5Y, 10Y)构成另一个向量。这两个向量怎么相互作用?通过矩阵乘法。
举个例子,计算组合的久期:
组合久期 = 权重向量^T * 各债券久期向量
就这么简单。但如果你要算组合的凸性,那就是一个矩阵运算了。
2.2.2 协方差矩阵:风险的联动
债券之间不是独立的。国债和信用债会联动,不同评级的信用债也会联动。协方差矩阵就是描述这种联动关系的工具。
我建议你记住这个公式:
组合方差 = w^T * Σ * w
其中w是权重向量,Σ是协方差矩阵。这个公式是马科维茨均值-方差模型的核心。我在做债券组合优化时,每次调整权重,都要重新算一遍这个值。算得多了,你会发现,协方差矩阵的稳定性是个大问题。历史数据算出来的协方差,未来可能完全变样。
2.2.3 特征分解与PCA
收益率曲线有多个期限点,但它们不是独立的。你会发现,1Y和2Y的变动高度相关,5Y和10Y也是。主成分分析(PCA)就是用来提取这些「共同因子」的。
我做过一个研究,用PCA分解中国国债收益率曲线。结果发现,第一个主成分(水平因子)解释了超过80%的方差,第二个主成分(斜率因子)解释了约12%。也就是说,你只需要两个因子,就能描述整条曲线的大部分变动。
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天的收益率变动。
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计算到压力测试,从信用评分到组合优化。到时候你会发现,今天打的基础,全都能派上用场。