2. 信用评分模型基础:逻辑回归与评分卡转换原理
信用评分卡(Scorecard)是金融风控领域最成熟、最可解释的模型形式之一。其核心思想是将用户的原始特征(如收入、负债比、逾期次数)通过 特征分箱 → WOE 编码 → 逻辑回归 → 分数映射 的流水线,转化为一个直观的整数分数。本章从数学原理和工程实现两个维度拆解这一过程。
📌 学习目标:掌握逻辑回归输出概率与评分卡分数的转换公式;理解特征分箱与 WOE 编码的单调性约束;能够手动计算刻度参数(Scale, Offset)。
2.1 逻辑回归与评分卡转换原理
逻辑回归(Logistic Regression)输出的是样本属于“坏客户”的概率 \( p \)。评分卡转换的核心是将 \( p \) 映射为整数分数,同时满足:分数越高,风险越低;分数每增加一定分值(PDO),坏账率翻倍。
2.1.1 从概率到分数的线性变换
设逻辑回归的线性部分为:
logit(p) = ln(p / (1 - p)) = β₀ + β₁·x₁ + ... + βₙ·xₙ
评分卡标准映射公式:
Score = Offset - Scale × logit(p)
其中:
- Offset(偏移量):基准分数,通常对应某个特定 odds(好坏比)
- Scale(刻度):每增加一个 PDO(Points to Double the Odds),分数变化量
- PDO:好坏比翻倍时分数增加的固定点数
给定两个已知条件即可解出 Offset 和 Scale:
| 已知条件 | 含义 | 典型值 |
|---|---|---|
| 基准 odds = 1:1 时的分数 | 好坏比相等时的基准分 | 600 分 |
| PDO | odds 翻倍时增加的分数 | 20 分 |
# 参数求解示例
import numpy as np
base_odds = 1.0 # 好坏比 1:1
base_score = 600.0 # 基准分数
pdo = 20.0 # 翻倍点数
# 解方程:
# base_score = Offset - Scale * ln(base_odds)
# base_score + pdo = Offset - Scale * ln(2 * base_odds)
# 相减得:pdo = Scale * ln(2) → Scale = pdo / ln(2)
scale = pdo / np.log(2) # ≈ 28.85
offset = base_score + scale * np.log(base_odds) # = 600.0
print(f"Scale = {scale:.4f}, Offset = {offset:.4f}")
# 输出: Scale = 28.8539, Offset = 600.0000
💡 工程提示:Offset 和 Scale 一旦确定,整个评分卡的所有特征分箱分数都通过
Score = Offset - Scale × (β₀ + Σβᵢ·WOEᵢ) 计算。Offset 和 Scale 是全局参数,不随样本变化。
2.2 特征分箱与 WOE 编码
原始连续特征(如年龄、收入)不能直接进入逻辑回归,必须先进行 分箱(Binning),然后计算每个分箱的 WOE(Weight of Evidence,证据权重) 替代原始值。分箱和 WOE 编码是评分卡可解释性的基石。
2.2.1 特征分箱原则
- 单调性:坏账率随分箱顺序单调递增或递减,保证业务逻辑合理。
- 足够样本:每个分箱至少包含 5% 的样本,避免统计不稳定。
- 业务可解释:分箱边界尽量取整(如年龄 25、35、45),便于业务人员理解。
2.2.2 WOE 编码公式
WOEᵢ = ln( (坏样本占比ᵢ) / (好样本占比ᵢ) )
= ln( (Badᵢ / Bad_total) / (Goodᵢ / Good_total) )
其中:
- Badᵢ:第 i 个分箱中的坏客户数
- Goodᵢ:第 i 个分箱中的好客户数
- Bad_total:全部坏客户数
- Good_total:全部好客户数
WOE 的正负含义:
- WOE > 0:该分箱中坏样本占比 < 好样本占比,风险较低。
- WOE < 0:该分箱中坏样本占比 > 好样本占比,风险较高。
- WOE = 0:该分箱好坏比例与整体一致,无区分能力。
2.2.3 IV 值(Information Value)
IV 用于衡量特征对好坏客户的区分能力:
IV = Σ ( (Badᵢ/Bad_total - Goodᵢ/Good_total) × WOEᵢ )
| IV 范围 | 预测能力 | 工程建议 |
|---|---|---|
| < 0.02 | 无预测能力 | 剔除该特征 |
| 0.02 ~ 0.10 | 弱预测能力 | 谨慎使用 |
| 0.10 ~ 0.30 | 中等预测能力 | 推荐保留 |
| > 0.30 | 强预测能力 | 核心特征 |
⚠️ 避坑指南:IV 值过高(>0.50)可能暗示特征与目标存在过度相关性,甚至包含未来信息(如“当前逾期天数”对“未来是否违约”的预测)。务必进行特征穿越检验。
2.3 评分卡刻度(Scale)与分数映射公式
评分卡刻度是连接逻辑回归系数与最终分数的桥梁。每个特征分箱的分数由该分箱的 WOE 值和逻辑回归系数共同决定。
2.3.1 单个分箱的分数计算
Scoreᵢⱼ = -Scale × βᵢ × WOEᵢⱼ + (Offset / n_features)
其中:
- βᵢ:第 i 个特征的逻辑回归系数
- WOEᵢⱼ:第 i 个特征第 j 个分箱的 WOE 值
- n_features:参与建模的特征总数
- Offset / n_features:将基准分数均匀分配到每个特征
2.3.2 最终评分卡分数
Total Score = Offset + Σᵢ Scoreᵢⱼ
= Offset - Scale × (β₀ + Σᵢ βᵢ × WOEᵢⱼ)
2.3.3 刻度参数计算示例
| 参数 | 符号 | 计算公式 | 示例值 |
|---|---|---|---|
| 刻度因子 | Scale | PDO / ln(2) | 20 / 0.6931 ≈ 28.85 |
| 偏移量 | Offset | 基准分数 + Scale × ln(基准 odds) | 600 + 28.85 × 0 = 600 |
| 特征分数 | Scoreᵢⱼ | -Scale × βᵢ × WOEᵢⱼ | -28.85 × 0.35 × (-0.35) ≈ 3.53 |
🔧 工程实现要点:
- Offset 和 Scale 在模型训练完成后一次性计算,作为全局配置存储。
- 每个特征分箱的分数可以预计算并缓存,API 运行时只需查表求和,避免实时计算 logit。
- 分数通常取整为整数,便于业务人员解读(如 650 分 vs 652.34 分)。
2.4 完整评分卡示例
以下是一个包含两个特征的简化评分卡:
| 特征 | 分箱 | WOE | 系数 β | 分数贡献 |
|---|---|---|---|---|
| 年龄 | ≤ 25 | -0.35 | 0.35 | 3.53 |
| 26-45 | 0.08 | 0.35 | -0.81 | |
| ≥ 46 | 0.42 | 0.35 | -4.24 | |
| 负债比 | ≤ 30% | 0.50 | 0.50 | -7.21 |
| > 30% | -0.60 | 0.50 | 8.66 | |
| Offset | 600.00 | |||
| 总分 | 600 + 3.53 - 0.81 - 4.24 - 7.21 + 8.66 = 599.93 ≈ 600 | |||
💡 低延迟优化提示:在 API 发布阶段,评分卡分数计算可以完全转化为 查表 + 整数加法,避免浮点运算和 log 计算。将每个分箱的分数预计算为整数,运行时根据用户特征命中分箱,累加 Offset 即可得到最终分数。单次评分耗时可控制在 1μs 以内。