第四章 迁移矩阵的构建方法

好,咱们进入正题。

迁移矩阵怎么来的?说白了,就是把「借款人从A状态跑到B状态」的概率给算出来。我刚开始做这块时,以为直接数一数就行了,结果发现坑不少。今天我把四种主流方法掰开揉碎讲清楚。

4.1 历史数据法:最朴素的做法

这个方法最简单。你拿过去几年的评级数据,统计每个评级有多少客户,下一年变成了什么评级。

举个例子:

  • 年初有100个AAA客户
  • 到了年底,95个还是AAA,3个掉到AA,1个掉到A,1个违约
  • 那AAA→AAA的概率就是95%,AAA→AA是3%,以此类推

公式长这样:

P(i→j) = N(i→j) / N(i)

其中N(i)是期初i评级的客户数,N(i→j)是期末变成j评级的数量。

⚠️ 注意: 这个方法有个致命缺陷——它假设客户在期内不变化。如果客户年中评级变了,你算出来的概率就偏了。我曾在某银行项目里吃过这个亏,后来改用cohort法才纠正过来。

4.2 Cohort法:按队列分组

Cohort法,也叫「静态池法」。它把客户按某个时间点分组,然后观察这个组在未来一段时间的表现。

我个人习惯用季度作为观察窗口。为什么?因为年度太粗,月度太细(数据噪音大)。

具体步骤:

  1. 把客户按评级分组(比如2023Q1的AAA组)
  2. 观察这个组在2023Q2、Q3、Q4的评级变化
  3. 计算每个时间窗口的迁移概率
  4. 最后取平均

这样做的好处是:你避免了「期内多次迁移」的干扰。每个客户只在一个cohort里出现一次。

💡 关键点: Cohort法算出来的矩阵是「条件概率」——给定期初状态,期末状态的概率。它不假设迁移发生在哪个时点。

4.3 持续时间法(Duration Method)

这个方法更精细。它不只看「期初→期末」,而是把每次评级变动都当作一个事件来处理。

你想想看:一个客户可能在一年内从AAA掉到AA,再掉到A。历史法只记录最终状态,但Duration法会记录两次迁移。

核心思路:

  • 把评级迁移看作一个连续时间过程
  • 用生存分析(Survival Analysis)来估计迁移强度
  • 迁移强度λ(i→j)表示单位时间内从i跳到j的概率

我记得在某次做压力测试时,监管要求我们考虑「瞬时迁移概率」。历史法算不出来,只能用Duration法。

公式长这样:

λ(i→j) = 迁移事件数 / 总暴露时间

总暴露时间就是所有客户在i评级停留的天数之和。

🔧 实用技巧: 如果你用Python做,可以用lifelines库里的Cox模型来估计迁移强度。我一般会先做Kaplan-Meier曲线看看数据形态。

4.4 多期迁移矩阵的推导

单期矩阵有了,那两年、三年的矩阵怎么算?

最简单的方法:矩阵乘法。

假设一年期迁移矩阵是M,那两年期就是M²,三年期就是M³。前提是——迁移过程是马尔可夫的,也就是未来只取决于当前状态,跟过去无关。

但现实往往不是这样。我遇到过的情况是:刚降级的客户,短期内再降级的概率更高。这叫「评级动量效应」。

所以,更靠谱的做法是:

  1. 直接用历史数据算多期矩阵(比如直接算两年期的)
  2. 或者用Duration法模拟出多期路径
  3. 再或者用蒙特卡洛模拟

我个人推荐第二种。因为直接算多期矩阵,数据量往往不够(两年内评级没变的客户太多)。

⚠️ 避坑指南: 我曾经直接用M²算三年期矩阵,结果违约概率被严重低估。后来发现是因为违约是吸收态——一旦违约就不会回来。M²假设所有状态都能互相转换,这不对。你需要把违约行和列单独处理。

知识体系总览

下面这张图,我把四种方法的关系画出来了:

迁移矩阵构建方法体系 迁移矩阵 历史数据法 简单直接,有偏 Cohort法 分组观察,稳健 Duration法 连续时间,精细 多期推导 矩阵乘法/模拟 精度递增 → 数据需求递增 → 🌟 我的推荐路径 数据少 → 历史数据法 数据够 → Cohort法 → 多期推导 要精细 → Duration法 + 蒙特卡洛

四种方法对比

方法 数据需求 精度 适用场景 我踩过的坑
历史数据法 快速估算 期内迁移被忽略
Cohort法 常规评级分析 窗口期选择影响结果
Duration法 压力测试、定价 计算量大,需小心右删失
多期推导 依赖基础矩阵 中高 长期预测 马尔可夫假设常不成立
💡 我的建议: 如果你刚开始做迁移矩阵,先用Cohort法。它平衡了精度和复杂度。等业务要求更精细了,再上Duration法。别一上来就搞复杂的,容易把自己绕进去。

好了,这四种方法够你应付大部分场景了。记住一点:没有完美的模型,只有合适的模型。根据你的数据量和业务需求来选,别为了炫技而用复杂方法。

专注资料整理