2. 信用评分模型基础:什么是信用评分卡,评分卡开发流程与常用模型
信用评分卡(Credit Scorecard)是金融风控领域最经典、最透明的量化决策工具。它将借款人的特征(如收入、负债、历史逾期次数)通过统计模型转化为一个可解释的分数,用以预测借款人未来发生违约的概率。本章将系统讲解评分卡的定义、标准开发流程以及三种核心建模算法。
核心认知: 评分卡的本质是一个“风险量化翻译器”——将复杂的非线性关系翻译成业务人员可直接理解的分数与决策规则。
2.1 什么是信用评分卡
信用评分卡通常以“分数”形式输出,分数越高代表信用风险越低。典型的评分卡具有以下特征:
- 可解释性: 每个特征对分数的贡献是显式的,业务人员可以清楚知道“为什么扣分”。
- 标准化: 不同借款人的分数在同一尺度上可比,便于制定统一的授信策略。
- 稳定性: 经过严格的群体稳定性(PSI)监控,确保模型在时间推移中保持有效。
| 维度 | 说明 | 典型范围 |
|---|---|---|
| 分数区间 | 模型输出的最低分到最高分 | 300 – 850(FICO)或 0 – 1000 |
| 决策阈值 | 划分“通过/拒绝/人工审核”的分数临界点 | 如 600 分以下拒绝,600-650 人工审核 |
| 分数刻度 | 分数每增加一定单位,违约概率降低的比例 | 如每增加 20 分,违约概率减半 |
2.2 评分卡开发流程
一个标准评分卡项目通常包含以下五个阶段,每个阶段都有明确的交付物和质量检查点。
| 阶段 | 核心任务 | 关键输出 | 常见陷阱 |
|---|---|---|---|
| 1. 数据准备 | 数据采集、清洗、合并、缺失值处理 | 建模宽表(含目标变量) | 样本选择偏差、时间穿越 |
| 2. 特征工程 | WOE编码、IV筛选、分箱、衍生变量 | 特征候选集与IV排名 | 过拟合、特征共线性 |
| 3. 模型训练 | 算法选择、参数调优、样本权重 | 训练好的模型对象 | 欠采样/过采样不当 |
| 4. 模型验证 | 区分度(KS/AUC)、校准度、稳定性(PSI) | 验证报告与模型卡 | 只关注AUC忽略PSI |
| 5. 模型上线 | 分数映射、决策阈值设定、系统部署 | 线上评分服务与监控看板 | 线上线下分数不一致 |
实战建议: 数据准备阶段通常占用整个项目 60% 以上的时间。务必确保观察期(特征窗口)与表现期(标签窗口)严格对齐,避免“用未来信息预测过去”。
2.3 常用模型算法
在评分卡开发中,不同算法各有优劣。以下对比三种最常用的模型:
| 算法 | 核心原理 | 优势 | 劣势 | 典型应用场景 |
|---|---|---|---|---|
| 逻辑回归 | Sigmoid 函数将线性组合映射到 [0,1] 概率 | 可解释性极强,训练快速,成熟稳定 | 难以自动处理非线性与特征交互 | 传统评分卡、监管报送模型 |
| 决策树 | 基于信息增益/基尼系数递归划分样本空间 | 规则直观,可处理缺失值,无需特征缩放 | 容易过拟合,单棵树稳定性差 | 快速规则提取、特征重要性排序 |
| XGBoost | 梯度提升框架,集成多棵决策树 | 预测精度高,内置正则化,支持自定义损失 | 可解释性弱,调参复杂,资源消耗大 | 高精度风控模型、复杂欺诈检测 |
⚠️ 算法选择原则: 对于需要向监管机构解释的评分卡,优先选择逻辑回归;对于追求极致区分度的内部风控模型,可以选用 XGBoost。实践中常采用“逻辑回归 + XGBoost”双轨策略,兼顾可解释性与精度。
2.3.1 逻辑回归评分卡示例
逻辑回归评分卡的核心是将模型系数转换为整数分数。以下是一个简化的分数映射代码示例:
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
# 假设已经完成WOE编码,X_woe为特征矩阵,y为标签
model = LogisticRegression(C=1.0, solver='liblinear')
model.fit(X_woe, y)
# 分数映射参数
base_score = 600 # 基础分
pdo = 20 # 分数每增加20分,违约概率减半
odds_0 = 50 # 基础好坏比
# 计算每个特征的分数贡献
factor = pdo / np.log(2)
intercept_score = base_score - factor * np.log(odds_0)
coef_scores = factor * model.coef_[0]
print(f"截距项分数贡献: {intercept_score:.2f}")
for i, col in enumerate(X_woe.columns):
print(f"特征 {col} 的系数分数: {coef_scores[i]:.2f}")
2.3.2 XGBoost 模型训练要点
使用 XGBoost 构建评分卡时,需要特别注意样本不平衡与早停策略:
import xgboost as xgb
from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 设置样本权重处理不平衡
scale_pos_weight = (y_train == 0).sum() / (y_train == 1).sum()
model_xgb = xgb.XGBClassifier(
n_estimators=500,
max_depth=4,
learning_rate=0.05,
scale_pos_weight=scale_pos_weight,
eval_metric='auc',
early_stopping_rounds=50,
random_state=42
)
model_xgb.fit(
X_train, y_train,
eval_set=[(X_val, y_val)],
verbose=False
)
print(f"最佳迭代轮数: {model_xgb.best_iteration}")
print(f"验证集AUC: {model_xgb.best_score:.4f}")
关键指标速查:
- KS(Kolmogorov-Smirnov): 衡量模型区分好坏客户的能力,通常要求 > 0.3。
- AUC(Area Under Curve): 综合评估模型排序能力,通常要求 > 0.75。
- PSI(Population Stability Index): 衡量模型分数分布随时间的变化,通常要求 < 0.1。