信用风险建模 — 风控科学基础
信用风险建模 — 风控科学基础
系列:高频交易与风控科学基础 · Part B · 第 4 篇
定位:金融架构师/PM 必须掌握的信用风险建模科学
前置:已完成风控引擎系统设计(FIN-DESIGN-03)+ 信贷系统设计(FIN-DESIGN-04)
目标:不需要自己训练模型,但需要能评审建模方案、设计系统架构、理解监管要求
日期:2026-04-13
一、核心概念与直觉
1.1 信用风险是什么
一句话:借出去的钱收不回来的风险。
更精确地说,信用风险是交易对手未能按照合同约定履行义务(还款、交割、担保)的可能性及由此造成的损失。它是银行面临的最大风险类型,通常占银行总风险资本的 60-80%。
类比理解:
你把 100 万借给 10 个人:
├── 9 个人按时还了 → 你收回 90 万 + 利息
├── 1 个人违约了 → 你只收回了 40 万(抵押物变卖)
│
├── 违约概率 PD = 1/10 = 10%
├── 违约损失率 LGD = (100-40)/100 = 60%
├── 违约风险暴露 EAD = 100 万
│
└── 预期损失 EL = PD × LGD × EAD = 10% × 60% × 100 万 = 6 万
1.2 信用风险的三个维度
| 维度 | 全称 | 含义 | 直觉 |
|---|---|---|---|
| PD | Probability of Default | 借款人违约的概率 | "这个人会不会赖账?" |
| LGD | Loss Given Default | 违约后损失的比例 | "赖账了能追回多少?" |
| EAD | Exposure at Default | 违约时的风险暴露金额 | "赖账时还欠多少钱?" |
三者的关系:
预期损失 EL = PD × LGD × EAD
这就是银行需要计提的"拨备"(贷款损失准备金)
利润 = 利息收入 - 资金成本 - 运营成本 - 预期损失 - 资本成本
1.3 为什么 PM/架构师需要懂
| 场景 | 不懂的后果 | 懂了的优势 |
|---|---|---|
| 评审模型方案 | 只看 AUC,忽略稳定性和可解释性 | 能质疑"你的 PSI 多少?WOE 是否单调?" |
| 设计评分系统架构 | 把评分卡当黑箱调用 | 理解特征计算→评分→决策的全链路 |
| 理解监管要求 | 被监管问住 | 知道 Basel 对 IRB 方法的具体要求 |
| 与建模团队沟通 | 听不懂"分箱""穿越""过拟合" | 对齐语言,做出正确的架构决策 |
| 系统容量规划 | 不知道模型推理的计算量 | 精准评估特征计算和评分服务的资源需求 |
二、评分卡方法论
面试高频指数:★★★★★
评分卡是信用风险建模中最经典、最实用、面试最高频的知识点。
2.1 逻辑回归为什么是评分卡首选
在所有机器学习算法中,逻辑回归(Logistic Regression)至今仍是信用评分卡的绝对主力。原因:
| 特性 | 逻辑回归 | XGBoost | 深度学习 |
|---|---|---|---|
| 可解释性 | 每个变量有明确系数和方向 | 需要 SHAP/LIME 辅助 | 黑箱 |
| 单调性 | WOE 编码后天然保证 | 无法保证 | 无法保证 |
| 稳定性 | 不容易过拟合 | 容易过拟合 | 极易过拟合 |
| 监管友好 | 完全满足 | 部分满足 | 不满足 |
| 计算效率 | 毫秒级 | 毫秒级 | 较慢 |
| 样本要求 | 中等 | 较多 | 大量 |
监管的核心要求:模型必须可解释。当模型拒绝一个客户时,银行必须能说清楚"因为你的 X、Y、Z 指标不达标"。逻辑回归的系数天然提供了这种解释。
逻辑回归的数学形式:
P(违约) = 1 / (1 + e^(-z))
其中:z = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ
β₀ = 截距
βᵢ = 第 i 个变量的回归系数
xᵢ = 第 i 个变量的值(经过 WOE 编码)
2.2 WOE (Weight of Evidence) 编码
核心中的核心,面试必考。
2.2.1 什么是 WOE
WOE 是一种将分类变量和连续变量都转换为"证据权重"的编码方式。它来源于信息论,衡量的是一个分箱中"好客户"和"坏客户"的分布差异。
WOE_i = ln(好客户占比_i / 坏客户占比_i)
其中:
好客户占比_i = 第 i 箱的好客户数 / 总好客户数
坏客户占比_i = 第 i 箱的坏客户数 / 总坏客户数
直觉理解:
WOE > 0 → 这个分箱好人多于坏人 → "正面证据"
WOE = 0 → 好人坏人比例与总体一致 → "无证据"
WOE < 0 → 这个分箱坏人多于好人 → "负面证据"
2.2.2 完整的计算示例
假设有 1000 个客户,其中 800 个好客户(未违约),200 个坏客户(违约)。按年龄分箱后:
年龄分箱 好客户 坏客户 好占比 坏占比 WOE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18-25岁 80 60 80/800=0.100 60/200=0.300 ln(0.100/0.300) = -1.099
26-35岁 200 60 200/800=0.250 60/200=0.300 ln(0.250/0.300) = -0.182
36-45岁 240 40 240/800=0.300 40/200=0.200 ln(0.300/0.200) = +0.405
46-55岁 200 30 200/800=0.250 30/200=0.150 ln(0.250/0.150) = +0.511
56岁以上 80 10 80/800=0.100 10/200=0.050 ln(0.100/0.050) = +0.693
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
合计 800 200 1.000 1.000
解读:
- 18-25 岁 WOE = -1.099 → 这个年龄段坏客户比例远高于平均,信用风险高
- 56 岁以上 WOE = +0.693 → 这个年龄段好客户比例高,信用风险低
- WOE 从低到高单调递增 → 年龄越大越安全(在这个例子中)
2.2.3 WOE 编码的五大优点
优点 1:自动处理缺失值
├── 缺失值单独成一个分箱
├── 缺失值也有自己的 WOE 值
└── 不需要额外的缺失值填充策略
优点 2:保证单调性
├── 分箱后可以手动调整确保 WOE 单调
├── 单调性意味着"变量越大(或越小),风险越高(或越低)"
└── 这是监管对评分卡的基本要求
优点 3:消除量纲差异
├── 所有变量都被转换为 WOE 值(对数尺度)
├── 不需要标准化或归一化
└── 不同变量之间直接可比
优点 4:自动处理异常值
├── 极端值被归入最高/最低分箱
├── WOE 值是分箱级别的
└── 个别异常值不影响结果
优点 5:提升逻辑回归性能
├── WOE 本身就是对数odds的差异
├── 与逻辑回归的 log-odds 天然契合
└── 数学上可以证明,WOE编码后逻辑回归等价于朴素贝叶斯
2.3 IV (Information Value) — 特征筛选
IV 衡量一个变量对区分好坏客户的信息量,是评分卡开发中最重要的特征筛选指标。
2.3.1 公式
IV = Σ (好占比_i - 坏占比_i) × WOE_i
展开:
IV = Σ (好占比_i - 坏占比_i) × ln(好占比_i / 坏占比_i)
沿用上面的年龄例子:
分箱 好占比 坏占比 差值 WOE 贡献
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18-25岁 0.100 0.300 -0.200 -1.099 0.220
26-35岁 0.250 0.300 -0.050 -0.182 0.009
36-45岁 0.300 0.200 0.100 0.405 0.041
46-55岁 0.250 0.150 0.100 0.511 0.051
56岁以上 0.100 0.050 0.050 0.693 0.035
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IV总计 = 0.356
年龄的 IV = 0.356,属于"强预测力"变量。
2.3.2 IV 判断标准
| IV 范围 | 预测力 | 决策 |
|---|---|---|
| < 0.02 | 无预测力 | 剔除 |
| 0.02 - 0.10 | 弱 | 谨慎使用 |
| 0.10 - 0.30 | 中等 | 优先选入 |
| 0.30 - 0.50 | 强 | 选入但注意过拟合 |
| > 0.50 | 过强 | 可能存在信息泄露/过拟合,必须排查 |
面试陷阱:IV > 0.5 不一定是好事!可能意味着:
- 该变量本身就是目标变量的近似(如"是否逾期过"用来预测"是否会逾期")
- 存在特征穿越(使用了未来信息)
- 样本选择偏差导致的虚假相关
2.3.3 IV 与信息增益的关系
IV 本质上是 KL 散度(Kullback-Leibler Divergence)的对称版本:
KL(好||坏) = Σ 好占比_i × ln(好占比_i / 坏占比_i) → 不对称
KL(坏||好) = Σ 坏占比_i × ln(坏占比_i / 好占比_i) → 不对称
IV = KL(好||坏) + KL(坏||好) → 对称的"距离"
信息增益(Information Gain)衡量的是分箱后目标变量熵的减少量,与 IV 高度正相关,但 IV 的优势在于:
- 数值直觉更好(有明确的阈值标准)
- 与 WOE 天然配合
- 在信用风险领域更通用
2.4 分箱策略 (Binning)
分箱是 WOE 编码的前提。好的分箱直接决定评分卡的质量。
2.4.1 分箱方法
| 方法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 等频分箱 | 每箱样本数相同 | 简单、每箱样本充足 | 不考虑目标变量 |
| 等距分箱 | 每箱区间宽度相同 | 简单、可解释 | 可能某些箱样本极少 |
| 卡方分箱 (ChiMerge) | 合并卡方值最小的相邻箱 | 考虑目标变量 | 容易过拟合 |
| MDLP | 最小描述长度原则 | 自动确定箱数 | 实现较复杂 |
| 最优分箱 (决策树) | 用决策树分裂点作为分箱边界 | 最大化信息增益 | 需要后处理保证单调 |
2.4.2 分箱原则
原则 1:每箱样本 > 5%
├── 保证统计显著性
├── 样本太少的箱 WOE 不稳定
└── 与邻近箱合并
原则 2:WOE 单调
├── 单调递增或单调递减
├── 非单调时需要合并箱
└── 这是监管的强制要求(确保逻辑合理)
原则 3:箱数 3-8 个
├── 太少 → 信息损失大
├── 太多 → 过拟合风险
└── 实践中 4-6 箱最常见
原则 4:相邻箱 WOE 差异足够大
├── 差异太小 → 合并
├── 经验阈值:|ΔWOE| > 0.05
└── 合并后重新计算 WOE
原则 5:特殊值单独成箱
├── 缺失值 → 单独一箱
├── 0 值(如果有特殊业务含义) → 单独一箱
└── 异常值 → 归入最高/最低箱
2.5 评分映射
逻辑回归的输出是概率值 P(违约),但最终呈现给业务和客户的是一个"分数"。需要做映射。
2.5.1 映射公式
Score = A - B × ln(odds)
其中:
odds = P(违约) / P(不违约) = P / (1-P)
ln(odds) = β₀ + β₁×WOE₁ + β₂×WOE₂ + ... + βₙ×WOEₙ
A = 基准分 + PDO × ln(基准odds) / ln(2)
B = PDO / ln(2)
2.5.2 标准评分卡参数
行业惯例:
基准分 = 600 分(当 odds = 50:1 时,即 PD = 1/51 ≈ 2%)
PDO = 20(Points to Double the Odds,odds 翻倍时分数减少 20)
代入公式:
B = 20 / ln(2) = 28.85
A = 600 + 28.85 × ln(50) = 600 + 112.88 = 712.88
验证:
- odds = 50:1 → Score = 712.88 - 28.85 × ln(50) = 712.88 - 112.88 = 600 ✓
- odds = 100:1 → Score = 712.88 - 28.85 × ln(100) = 712.88 - 132.88 = 580
(odds 翻倍,分数降低 20) ✓
- odds = 25:1 → Score = 712.88 - 28.85 × ln(25) = 712.88 - 92.88 = 620
(odds 减半,分数增加 20) ✓
2.5.3 评分 → PD 的映射
Score → odds → PD
odds = e^((A - Score) / B)
PD = odds / (1 + odds)
示例(基准分 600,PDO=20):
Score=600 → odds=50 → PD=1.96%
Score=620 → odds=25 → PD=3.85%
Score=580 → odds=100 → PD=0.99%
Score=700 → odds=1.62 → PD=38.2%
Score=500 → odds=1543 → PD=0.065%
业务含义:分数越高,PD 越低,信用越好。一般 600 分以上通过,500 以下拒绝,中间人审。
2.6 完整的评分卡开发流程
┌──────────────────────────────────────────────────────────┐
│ 评分卡开发全流程 │
├──────────────────────────────────────────────────────────┤
│ │
│ ① 数据准备 │
│ ├── 定义样本窗口 │
│ │ ├── 观察期(Observation Window):收集特征的时间段 │
│ │ ├── 表现期(Performance Window):观察违约的时间段 │
│ │ └── 样本期(Sample Window):观察期结束点 │
│ │ │
│ │ 示例: │
│ │ 观察期 ────────►│ 表现期 ────────────► │
│ │ 2024.01-2024.06 │ 2024.07-2025.06 │
│ │ 收集特征数据 │ 观察是否违约(12个月) │
│ │ │
│ ├── 排除样本 │
│ │ ├── 已拒绝的客户(拒绝推断 Reject Inference) │
│ │ ├── 政策性拒绝(如黑名单) │
│ │ └── 表现期不足的客户 │
│ │ │
│ └── 定义好坏标签 │
│ ├── 好客户:从未逾期 或 最大逾期 < 30天 │
│ ├── 坏客户:曾经逾期 ≥ 90天(M3+) │
│ └── 灰色客户:30-89天逾期,通常排除 │
│ │
│ ② 探索性分析(EDA) │
│ ├── 好坏客户分布 │
│ ├── 各变量的缺失率统计 │
│ ├── 各变量的分布(直方图/箱线图) │
│ └── 好坏客户在各变量上的差异 │
│ │
│ ③ 变量筛选(四步法) │
│ ├── Step 1:缺失率 > 70% 的变量剔除 │
│ ├── Step 2:IV < 0.02 的变量剔除 │
│ ├── Step 3:高相关变量(|r| > 0.7)保留 IV 高的 │
│ └── Step 4:VIF > 10 的变量逐步剔除 │
│ │
│ ④ WOE 转换 │
│ ├── 对每个入选变量进行分箱 │
│ ├── 计算每箱的 WOE 值 │
│ ├── 检查 WOE 单调性,不单调则合并箱 │
│ └── 将原始值替换为 WOE 值 │
│ │
│ ⑤ 逻辑回归训练 │
│ ├── 训练集/测试集/验证集 = 60/20/20 │
│ ├── 时间切分(不是随机切分!) │
│ ├── 拟合逻辑回归,得到系数 β │
│ └── 检查系数方向是否合理(不合理则排查) │
│ │
│ ⑥ 评分映射 │
│ ├── 确定基准分和 PDO │
│ ├── 计算 A 和 B │
│ ├── 将每个变量的每个分箱映射为分值 │
│ └── 总分 = 基准分 + 各变量分值之和 │
│ │
│ ⑦ 模型验证 │
│ ├── 区分度:KS > 0.20 / AUC > 0.70 │
│ ├── 校准度:预测 PD vs 实际违约率 │
│ ├── 排序性:Lift 曲线 │
│ ├── 稳定性:PSI < 0.10(训练集 vs 测试集) │
│ └── 交叉验证:5-fold 结果一致性 │
│ │
│ ⑧ 模型部署 │
│ ├── 评分卡编码为规则引擎可执行的格式 │
│ ├── 影子模式运行 2-4 周 │
│ ├── 与现有模型 A/B 对比 │
│ └── 灰度上线 │
│ │
│ ⑨ 模型监控 │
│ ├── PSI(Population Stability Index) │
│ │ ├── PSI < 0.10 → 稳定 │
│ │ ├── 0.10-0.25 → 需要关注 │
│ │ └── > 0.25 → 需要重新开发 │
│ ├── CSI(Characteristic Stability Index) │
│ │ └── 监控每个变量的分布变化 │
│ ├── KS/AUC 趋势 │
│ │ └── 月度计算,持续下降则触发重建 │
│ └── Vintage 分析 │
│ └── 按放款月份跟踪后续违约率演变 │
│ │
└──────────────────────────────────────────────────────────┘
面试关键点:时间切分而不是随机切分!信用风险有强烈的时间效应(经济周期),随机切分会导致数据泄露,模型在测试集上表现虚高。
三、A卡/B卡/C卡
信用风险管理贯穿贷款生命周期的每个阶段,对应三种评分卡:
3.1 A卡 (Application Scorecard) — 申请评分
触发时机:客户提交贷款申请时
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
输入数据:
├── 申请信息:年龄/学历/职业/收入/住房
├── 征信数据:历史违约/负债/查询次数
├── 外部数据:运营商/社保/公积金
└── 设备数据:设备指纹/IP/位置
输出:
├── 信用评分(300-900 分)
└── 决策建议:
├── Score > 650 → 自动通过
├── 550 < Score < 650 → 人工审核
└── Score < 550 → 自动拒绝
特点:
├── 冷启动问题:新客户没有行为数据
├── 数据有限:只有申请时点的信息
├── 对外部数据依赖强:征信是核心
└── 拒绝推断问题:被拒绝的客户无法观察表现
拒绝推断(Reject Inference):
这是 A 卡开发中的经典难题。被拒绝的客户无法观察到"如果放贷了会不会违约",这造成了样本选择偏差。
常用方法:
├── 简单分配法:假设所有拒绝客户都是坏客户 → 太悲观
├── 外推法:用现有模型给拒绝客户评分 → 循环论证
├── 模糊增强法:按概率分配好坏标签 → 中庸方案
└── 实际做法:定期做 RCT(随机批准一小部分拒绝客户)→ 最科学但成本高
3.2 B卡 (Behavioral Scorecard) — 行为评分
触发时机:贷后持续监控,通常月度更新
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
输入数据:
├── 还款行为:是否按时还款/最低还款/提前还款
├── 用信行为:额度使用率/取现频率/消费类别
├── 账户变动:余额变化/新开卡/销户
└── 交易行为:交易时间/金额/频率模式
输出:
├── 行为评分(动态更新)
└── 决策建议:
├── 高分 → 提额/交叉销售/利率优惠
├── 中分 → 维持现状
└── 低分 → 降额/冻结/预催收
特点:
├── 数据丰富:有 3-12 个月的行为数据
├── 预测力更强:行为比申请信息更有预测力
├── 动态调整:评分随行为变化而变化
└── 样本充足:不存在拒绝推断问题
常见 B 卡变量:
├── M1-M12 各月还款情况(按时/最低/逾期/未还)
├── 最近 3 个月平均额度使用率
├── 最近 6 个月逾期次数
├── 还款金额/账单金额比值趋势
├── 取现笔数/消费笔数比值
└── 还款日距账单日的天数(越早还越好)
3.3 C卡 (Collection Scorecard) — 催收评分
触发时机:客户逾期后
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
输入数据:
├── 逾期信息:逾期天数/逾期金额/历史逾期
├── 联系情况:是否接电话/是否承诺还款
├── 还款能力:收入/负债/资产
└── 还款意愿:沟通态度/是否主动联系
输出:
├── 催收优先级评分
└── 催收策略分配:
├── 高回收概率 → IVR 自动语音提醒
├── 中回收概率 → 人工电话催收
├── 低回收概率 → 委外催收/法催
└── 极低回收概率 → 核销准备
特点:
├── 样本量少:逾期客户占比小
├── 时效性强:越早催收效果越好
├── 策略差异大:不同阶段催收手段不同
└── 成本约束:催收成本不能超过预期回收
3.4 A/B/C 卡对比
| 维度 | A 卡 | B 卡 | C 卡 |
|---|---|---|---|
| 阶段 | 贷前 | 贷中 | 贷后 |
| 频率 | 一次性 | 月度 | 逾期后 |
| 数据 | 申请+征信 | 行为数据 | 催收数据 |
| 预测力 | KS 0.25-0.40 | KS 0.40-0.60 | KS 0.30-0.45 |
| 目标 | 准入/定价 | 预警/调额 | 催收策略 |
| 样本 | 有偏(拒绝推断) | 充足 | 较少 |
| 更新频率 | 年度重建 | 半年重建 | 季度重建 |
四、PD-LGD-EAD 框架
4.1 PD (Probability of Default)
4.1.1 期限结构
1 年 PD:最常用,Basel 标准计量周期
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
未来 12 个月内违约的概率
多年 PD(Term Structure):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第 1 年 PD = 2%
第 2 年 PD = 3%(条件:第 1 年未违约)
第 3 年 PD = 4%
累计 PD(3年) = 1 - (1-2%)(1-3%)(1-4%) = 1 - 0.9118 = 8.82%
Lifetime PD:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
贷款存续期内的累计违约概率
IFRS9(ECL 模型)要求对减值资产计算 Lifetime PD
4.1.2 TTC vs PIT
| 类型 | 全称 | 含义 | 用途 |
|---|---|---|---|
| TTC | Through-the-Cycle | 穿越周期的平均 PD | Basel 资本计量 |
| PIT | Point-in-Time | 当前时点的 PD | IFRS9 拨备计量 |
直觉理解:
├── TTC PD:无论经济好坏,这个客户的"长期平均"违约率是多少
├── PIT PD:在当前经济环境下,这个客户未来 12 个月的违约率是多少
│
├── 经济繁荣时:PIT PD < TTC PD
├── 经济衰退时:PIT PD > TTC PD
│
└── TTC 更稳定,PIT 更敏感
4.1.3 迁移矩阵
迁移矩阵描述客户从一个信用等级迁移到另一个等级的概率。
评级 → AAA AA A BBB BB 违约
评级 ↓
AAA 90.0% 8.0% 1.5% 0.3% 0.1% 0.1%
AA 1.0% 88.0% 8.0% 2.0% 0.5% 0.5%
A 0.1% 2.0% 87.0% 8.0% 2.0% 0.9%
BBB 0.0% 0.3% 4.0% 84.0% 8.0% 3.7%
BB 0.0% 0.1% 0.5% 6.0% 78.0% 15.4%
应用:
├── 读法:BBB 级客户有 3.7% 的概率在 1 年内违约
├── 多年 PD:对迁移矩阵做矩阵乘法(M^n 得到 n 年迁移概率)
├── 信用组合管理:预测组合质量变化
└── 压力测试:在压力情景下调整迁移概率
4.2 LGD (Loss Given Default)
LGD = 1 - 回收率 (Recovery Rate)
4.2.1 影响因素
| 因素 | 影响方向 | 说明 |
|---|---|---|
| 抵押物类型 | 有抵押 → LGD 低 | 房产 20-30% / 车辆 30-50% / 信用 60-80% |
| 抵押物价值波动 | 房价下跌 → LGD 升高 | 2008 年金融危机的教训 |
| 债务优先级 | 优先级高 → LGD 低 | 优先债 vs 次级债 vs 股权 |
| 催收效率 | 催收好 → LGD 低 | 内部催收 vs 委外 vs 法催 |
| 经济周期 | 衰退 → LGD 升高 | Downturn LGD 概念 |
| 行业 | 重资产行业 → LGD 低 | 有形资产可变卖 |
| 地区 | 司法效率高 → LGD 低 | 法律执行环境差异 |
4.2.2 Downturn LGD
Basel 要求使用"经济下行期的 LGD",而不是历史平均 LGD。
为什么?
├── 经济下行时,违约数量增加
├── 同时,抵押物价值下降
├── 催收效率也下降(催收资源不够)
├── 导致 LGD 显著高于平常
│
├── 历史平均 LGD:35%
├── Downturn LGD:可能达到 50-60%
│
└── 如果用平均 LGD 计算资本,会严重低估风险
4.3 EAD (Exposure at Default)
4.3.1 表内与表外
表内资产(已提用的贷款):
EAD = 当前余额
└── 直观,就是现在欠多少钱
表外资产(未使用的额度、担保等):
EAD = 当前余额 + CCF × 未使用额度
CCF (Credit Conversion Factor):
├── 含义:违约前客户会把多少未使用额度用掉
├── 直觉:客户在违约前往往会"把能借的都借了"
│
├── 监管标准法 CCF 值:
│ ├── 不可撤销承诺:75%
│ ├── 有条件可撤销:0-20%
│ └── 信用证/保函:20-50%
│
└── 内部估计法:用历史数据统计实际 CCF
4.3.2 CCF 估计示例
客户 A:信用卡额度 10 万,当前余额 3 万
├── 未使用额度 = 10 - 3 = 7 万
├── 假设 CCF = 60%(信用卡经验值较高)
├── EAD = 3 + 0.6 × 7 = 7.2 万
│
└── 含义:如果这个客户违约,预计他违约时会欠 7.2 万
(因为他在违约前很可能把剩余额度用掉大部分)
4.4 预期损失与非预期损失
预期损失 EL = PD × LGD × EAD
├── 这是"平均"会损失多少
├── 银行用拨备(贷款损失准备金)覆盖
└── 反映在利率定价中(利率 > 资金成本 + 运营成本 + EL)
非预期损失 UL = f(PD, LGD, EAD, 相关性)
├── 这是损失偏离平均值的幅度
├── 银行用资本(自有资金)覆盖
└── 这就是"资本充足率"的来源
极端损失(压力损失)
├── 超出非预期损失的部分
├── 靠压力测试评估
└── 需要应急资本缓冲
直觉类比:
你开一家保险公司:
├── 预期赔付 = 保费定价的基础(你知道平均要赔多少)
├── 非预期赔付 = 你的储备金要准备的额度(万一某年赔得特别多)
└── 极端赔付 = 再保险覆盖的部分(比如百年一遇的大灾)
五、Basel 框架与压力测试
5.1 Basel III 核心思想
Basel 协议是银行业监管的全球标准,核心目标是确保银行持有足够的资本来覆盖风险。
三大支柱:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
支柱一:最低资本要求
├── 信用风险资本
├── 市场风险资本
├── 操作风险资本
└── 资本充足率 = 资本 / 风险加权资产 ≥ 8%
支柱二:监管审查
├── 监管机构对银行风险管理的评估
├── ICAAP(内部资本充足性评估程序)
└── 压力测试要求
支柱三:市场纪律
├── 信息披露要求
├── 风险信息透明化
└── 市场参与者监督
5.2 标准法 vs IRB 方法
| 维度 | 标准法 (SA) | 初级 IRB (F-IRB) | 高级 IRB (A-IRB) |
|---|---|---|---|
| PD | 监管指定(按外部评级) | 银行自估 | 银行自估 |
| LGD | 监管指定(45%/75%) | 监管指定 | 银行自估 |
| EAD | 监管指定(CCF 固定) | 监管指定 | 银行自估 |
| 资本节约 | 最少 | 中等 | 最多 |
| 实施难度 | 低 | 中 | 高 |
| 数据要求 | 低 | 中(PD 需 5 年) | 高(LGD/EAD 需 7 年) |
架构师需要知道的:如果银行要从标准法迁移到 IRB,需要建设完整的 PD/LGD/EAD 模型体系,以及配套的数据仓库、模型管理平台、报表系统。这是一个持续 2-3 年的大型项目。
5.3 资本充足率
资本充足率 = 资本 / 风险加权资产 (RWA)
Basel III 要求:
├── 核心一级资本充足率 ≥ 4.5%
├── 一级资本充足率 ≥ 6.0%
├── 总资本充足率 ≥ 8.0%
│
├── 储备资本缓冲 (Conservation Buffer):+2.5%
├── 逆周期资本缓冲 (Countercyclical Buffer):0-2.5%
├── 系统重要性银行附加资本 (G-SIB/D-SIB):+1-3.5%
│
└── 实际要求:大型银行通常需要 13-15% 的总资本充足率
RWA 计算(标准法简化示例):
├── 政府债券:RW = 0%(零风险权重)
├── 银行同业:RW = 20-50%
├── 优质房贷:RW = 35%
├── 一般企业贷:RW = 100%
├── 逾期贷款:RW = 150%
│
└── RWA = Σ (贷款金额 × 风险权重)
5.4 压力测试
5.4.1 情景设计
| 情景 | GDP 增长 | 失业率 | 房价变化 | 说明 |
|---|---|---|---|---|
| 基准 | +5.0% | 5.0% | +3% | 正常经济环境 |
| 轻度 | +2.0% | 7.0% | -5% | 经济放缓 |
| 中度 | 0% | 9.0% | -15% | 经济衰退 |
| 重度 | -3.0% | 12.0% | -30% | 严重衰退(类 2008) |
| 极端 | -6.0% | 15.0% | -50% | 大萧条级别 |
5.4.2 压力传导链
宏观经济恶化
│
▼
PD 上升(失业→还不起钱)
LGD 上升(房价跌→抵押物缩水)
│
▼
预期损失 EL 大幅增加
│
▼
拨备不足 → 需要补提拨备 → 利润下降
│
▼
资本充足率下降(分子减少 + 分母 RWA 增加)
│
▼
是否仍满足监管要求?
├── 是 → 通过压力测试
└── 否 → 需要补充资本/缩减资产/停止分红
5.4.3 逆向压力测试
正向压力测试:给定情景 → 计算损失
逆向压力测试:给定损失 → 反推需要什么情景
示例:
├── "什么经济条件下,我们的资本充足率会跌破 8%?"
├── 反推得到:GDP 需要下跌 4.5%,失业率达到 11%
├── 然后评估:这种情景在未来 1 年内的发生概率有多大?
│
└── 价值:识别银行的"死亡线",提前准备应急方案
六、机器学习在信用风险中的应用
6.1 XGBoost/LightGBM vs 逻辑回归
| 维度 | 逻辑回归 | XGBoost/LightGBM |
|---|---|---|
| AUC/KS | 0.70-0.80 | 0.75-0.85(通常高 3-5%) |
| 可解释性 | 系数直接解释 | 需要 SHAP/LIME |
| 特征工程 | 需要大量手工(WOE/分箱) | 自动发现交互特征 |
| 过拟合 | 不易 | 需要调参控制 |
| 训练速度 | 快 | 较快 |
| 单调性 | WOE 保证 | 需要约束 |
| 监管接受度 | 完全接受 | 有条件接受 |
实际做法(业界主流):
方案 1:逻辑回归主模型 + XGBoost 挑战模型
├── 主模型用逻辑回归,满足监管
├── XGBoost 作为 Challenger,对比性能差异
└── 如果差异大,分析 XGBoost 发现了哪些逻辑回归遗漏的特征交互
方案 2:XGBoost 筛选特征 → 逻辑回归建模
├── 用 XGBoost 的 feature importance 初步筛选
├── 然后用筛选出的特征做 WOE+逻辑回归
└── 兼顾性能和可解释性
方案 3:可解释的梯度提升(前沿方向)
├── EBM(Explainable Boosting Machine)
├── 单特征和双特征交互的加法模型
├── 兼顾了性能和可解释性
└── 微软 InterpretML 库
6.2 SHAP/LIME 增加可解释性
当使用复杂模型时,SHAP 和 LIME 提供了事后解释的能力。
SHAP(SHapley Additive exPlanations):
├── 基于博弈论的 Shapley 值
├── 每个特征对预测的贡献值
├── 全局解释(特征重要性排序)
├── 局部解释(单个客户为什么被拒绝)
│
│ 示例:客户 A 被拒绝,SHAP 解释:
│ ├── 收入低:-0.15(最大负面因素)
│ ├── 多头借贷:-0.12
│ ├── 年龄:+0.05(正面因素)
│ ├── 有房产:+0.08
│ └── 最终预测:基准 + 各因素 = 拒绝
│
└── 监管价值:能回答"为什么拒绝这个客户"
LIME(Local Interpretable Model-agnostic Explanations):
├── 在预测点附近拟合一个线性模型
├── 用局部线性模型近似复杂模型的行为
├── 比 SHAP 更快,但理论基础不如 SHAP 严谨
└── 适用于需要快速解释的在线场景
6.3 深度学习的有限应用
深度学习在信用风险的表格数据上并不占优。但在以下场景有价值:
场景 1:非结构化数据
├── 文本数据:贷款申请描述、催收通话记录
├── 用 BERT/GPT 提取文本特征
└── 作为评分卡的辅助输入
场景 2:在线行为序列
├── 用户在 APP 上的操作序列
├── 浏览→点击→停留→退出 的时序模式
├── LSTM/Transformer 建模
└── 识别异常行为模式
场景 3:图像数据
├── 证件照 OCR + 活体检测
├── 营业执照真伪检测
└── CNN 处理
注意:这些都是作为辅助特征输入评分卡,而不是替代评分卡。
七、工程落地要点
7.1 评分卡系统架构
┌─────────────────────────────────────────────────────────┐
│ 评分卡系统架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ 数据层 特征层 评分层 决策层 │
│ │
│ ┌─────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │征信 │──→ │特征 │──→ │评分 │──→│决策 │ │
│ │数据 │ │计算 │ │引擎 │ │引擎 │ │
│ └─────┘ │引擎 │ │ │ │ │ │
│ ┌─────┐ │ │ │ 评分卡 │ │ 策略 │ │
│ │申请 │──→│ │ │ 配置 │ │ 配置 │ │
│ │数据 │ │ │ │ │ │ │ │
│ └─────┘ └──────┘ └──────┘ └──────┘ │
│ ┌─────┐ │ │ │ │
│ │行为 │────────┘ │ │ │
│ │数据 │ ▼ ▼ │
│ └─────┘ ┌──────────────────┐ │
│ │ 监控 & 报表 │ │
│ │ PSI/CSI/KS/AUC │ │
│ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
关键设计决策:
├── 特征计算引擎:实时(<50ms)vs 准实时(<5min)vs 离线(T+1)
│ ├── A 卡特征:大部分准实时即可(征信查询 2-5 秒)
│ ├── B 卡特征:离线批量计算,每日更新
│ └── 实时特征:仅少量关键指标(如当日申请次数)
│
├── 评分引擎:
│ ├── 评分卡配置化:分箱边界+WOE 值+系数存储在配置中
│ ├── 多版本并存:Champion 模型 + 1-2 个 Challenger
│ └── 热更新:新评分卡上线不需要重启服务
│
└── 决策引擎:
├── 策略编排:评分 → 策略分支 → 准入/定价/额度
├── 与风控引擎(FIN-DESIGN-03)集成
└── 策略灰度:新策略按比例切流量
7.2 模型版本管理 (Champion-Challenger)
Champion-Challenger 框架:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Champion(冠军模型):
├── 当前生产环境使用的模型
├── 所有客户使用该模型决策
└── 经过充分验证和监管审批
Challenger(挑战者模型):
├── 新开发的候选模型
├── 影子模式:计算评分但不参与决策
├── A/B 测试:小流量(5-10%)使用新模型决策
└── 对比指标:AUC/KS/PSI/业务指标(通过率/坏账率)
切换决策:
├── Challenger 在影子模式下稳定运行 4-8 周
├── 各项指标持续优于 Champion
├── 通过模型委员会评审
├── 获得监管审批(如果是重大变更)
├── 灰度切换:10% → 30% → 50% → 100%
└── 保留回滚能力(至少保留 2 个历史版本)
7.3 模型监控报表
| 报表 | 频率 | 内容 | 触发线 |
|---|---|---|---|
| PSI 报告 | 月度 | 评分分布稳定性 | PSI > 0.10 预警,> 0.25 重建 |
| CSI 报告 | 月度 | 每个变量的分布稳定性 | 单变量 CSI > 0.25 排查 |
| KS/AUC 趋势 | 月度 | 模型区分度变化 | KS 连续 3 月下降 > 5% |
| Vintage 分析 | 月度 | 按放款月份跟踪违约率 | 某月份违约率异常偏高 |
| Lift 报告 | 季度 | 分段通过率和坏账率 | Lift 比率下降 |
| 拒绝分析 | 季度 | 被拒客户的特征分析 | 拒绝率异常变化 |
| 完整验证 | 年度 | 全面回测 + 基准测试 | 年度必做 |
7.4 与已有系统设计的关联
与 FIN-DESIGN-03(风控引擎)的关系:
├── 评分卡是风控引擎的"一个决策节点"
├── 风控引擎编排:规则检查 → 名单过滤 → 评分卡 → ML 模型 → 最终决策
├── 评分卡的特征计算复用风控引擎的特征存储
└── 模型版本管理可以复用风控引擎的灰度发布机制
与 FIN-DESIGN-04(信贷系统)的关系:
├── A 卡嵌入信贷审批流程
├── B 卡驱动贷后管理(调额/预警)
├── C 卡驱动催收策略
├── 评分结果影响额度计算和利率定价
└── Vintage 分析数据来自信贷系统的还款记录
八、常见误区
误区 1:"AUC 越高越好"
真相:稳定性比 AUC 更重要
原因:
├── AUC 从 0.72 提到 0.75,可能只是过拟合了
├── 如果 PSI 从 0.05 变成 0.20,说明模型不稳定
├── 不稳定的模型上线后会快速失效
│
├── 评分卡的本质是"排序"而非"精确预测"
│ ├── 只要好客户的评分 > 坏客户的评分,就足够了
│ └── PD 的绝对值可以通过校准调整
│
└── 实际优先级:稳定性 > 区分度 > 精确度
误区 2:"特征越多越好"
真相:多重共线性会导致系数不稳定
问题:
├── 高度相关的变量(如月收入和年收入)会导致系数符号翻转
├── 系数不稳定意味着评分卡不可解释
├── "收入越高,信用越差" → 监管不会接受
│
解决:
├── VIF (方差膨胀因子) > 10 则剔除
├── 相关系数 |r| > 0.7 保留 IV 高的
└── 最终入模变量通常 8-15 个
误区 3:"机器学习能替代评分卡"
真相:监管不允许黑箱模型作为主模型
现状:
├── 中国银保监会:核心信用决策模型必须可解释
├── 欧盟 GDPR/AI Act:算法决策需要可解释性
├── 美国 ECOA/FCRA:拒贷必须提供具体原因
│
├── XGBoost+SHAP 可以作为辅助模型
├── 但主力模型仍是逻辑回归评分卡
└── 未来可能放松,但短期不会
误区 4:"WOE 编码是多此一举"
真相:WOE 解决了很多工程和统计问题
如果不用 WOE:
├── 连续变量需要标准化/归一化 → 上线后需要维护均值和标准差
├── 分类变量需要 One-Hot → 维度爆炸,稀疏矩阵
├── 缺失值需要单独处理 → 增加代码复杂度
├── 异常值会影响系数 → 需要单独处理
├── 无法保证单调性 → 可能出现不可解释的评分卡
│
用了 WOE:
├── 所有变量统一为连续值 → 简化工程
├── 缺失值自动处理 → 减少 bug
├── 异常值被分箱吸收 → 鲁棒性强
├── 单调性可控 → 监管友好
└── 与逻辑回归数学契合 → 性能最优
误区 5:"模型只需要看离线指标"
真相:线上表现可能与离线完全不同
常见原因:
├── 特征穿越:训练时用了未来信息(如"是否逾期"预测"是否逾期")
├── 样本偏差:训练集只包含通过审批的客户(幸存者偏差)
├── 数据延迟:线上特征更新不及时,与训练时不一致
├── 特征加工差异:线上实时计算 vs 离线批量计算的逻辑不一致
│
预防措施:
├── 影子模式:先跑 2-4 周,对比线上线下评分一致性
├── 特征一致性检查:线上 vs 离线特征值的 PSI
├── 回灌测试:用线上实际特征重新跑模型,对比结果
└── 监控报表:上线后持续监控各项指标
九、面试高频问题与答案
Q1:评分卡开发中最重要的环节是什么?
答:样本定义和变量筛选,而不是模型训练本身。
理由:
├── 样本窗口定义错误 → 整个模型方向错误
│ ├── 表现期太短 → 还没到逾期高发期就截断了
│ ├── 表现期太长 → 模型时效性差
│ └── 观察期选择不当 → 特征穿越
│
├── 变量筛选决定了模型的上限
│ ├── 好的变量比好的算法更重要
│ └── 逻辑回归在好变量上的表现 > XGBoost 在差变量上的表现
│
└── 模型训练只是"技术活"
├── 逻辑回归几行代码就搞定
└── 真正的价值在数据理解和业务判断
Q2:PSI 升高了怎么办?
答:分四步处理。
Step 1:定位是哪些变量的分布变了(看 CSI)
Step 2:判断是真实变化还是数据质量问题
├── 数据源变更(如某外部数据停供) → 修数据
├── 业务策略变化(如放宽了准入标准) → 分析影响
└── 市场环境变化(如经济下行) → 考虑重建模型
Step 3:评估影响
├── PSI < 0.10 → 继续监控
├── 0.10-0.25 → 评估 KS/AUC 是否也下降
└── > 0.25 → 启动模型重建
Step 4:制定行动计划
├── 短期:调整策略阈值补偿模型衰减
├── 中期:用新数据重新训练
└── 长期:建立模型自动化重训机制
十、延伸阅读
书籍
| 书名 | 作者 | 特点 |
|---|---|---|
| 《Credit Risk Scorecards》 | Naeem Siddiqi | 评分卡开发圣经,实操性极强 |
| 《Credit Risk Analytics》 | Bart Baesens | 学术性强,覆盖全面 |
| 《Intelligence Credit Scoring》 | Naeem Siddiqi | 评分卡+机器学习融合 |
| 《Measuring Credit Risk》 | Arnaud de Servigny | PD/LGD/EAD 框架详解 |
监管文件
| 文件 | 用途 |
|---|---|
| Basel III Framework (BCBS) | 全球银行资本监管标准 |
| 银保监会《商业银行信用风险内部评级体系监管指引》 | 中国 IRB 实施指南 |
| EBA Guidelines on PD/LGD estimation | 欧洲 PD/LGD 估计标准 |
| IFRS9 Financial Instruments | 预期信用损失(ECL)会计准则 |
工具与平台
| 工具 | 用途 |
|---|---|
| Scorecard (Python) | 评分卡开发包(WOE/IV/分箱) |
| toad (蚂蚁金服开源) | 评分卡全流程工具 |
| OptBinning | 最优分箱 |
| SHAP | 模型可解释性 |
| MLflow | 模型版本管理与追踪 |
十一、本篇总结
信用风险建模的核心知识体系:
信用风险建模
│
┌──────────────┼──────────────┐
│ │ │
评分卡 PD-LGD-EAD Basel框架
│ │ │
┌─────┼─────┐ ┌───┼───┐ ┌────┼────┐
│ │ │ │ │ │ │ │ │
WOE/IV 分箱 映射 PD LGD EAD 资本 压力 IRB
│ │ │ │ │ │ 充足率 测试 方法
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
逻辑回归 EL = PD×LGD×EAD
│
A卡/B卡/C卡
│
全生命周期风控
作为架构师/PM,你需要:
├── ✅ 能讲清 WOE/IV 的计算和业务含义
├── ✅ 能评审评分卡开发方案(样本/变量/验证)
├── ✅ 能设计评分系统的技术架构
├── ✅ 理解 Basel 对模型的要求
├── ✅ 能与建模团队用同一种语言沟通
│
├── ❌ 不需要自己跑回归
├── ❌ 不需要自己调参数
└── ❌ 不需要推导数学公式