2. 信用评分模型基础:什么是信用评分卡,评分卡开发流程与常用模型

信用评分卡(Credit Scorecard)是金融风控领域最经典、最透明的量化决策工具。它将借款人的特征(如收入、负债、历史逾期次数)通过统计模型转化为一个可解释的分数,用以预测借款人未来发生违约的概率。本章将系统讲解评分卡的定义、标准开发流程以及三种核心建模算法。

核心认知: 评分卡的本质是一个“风险量化翻译器”——将复杂的非线性关系翻译成业务人员可直接理解的分数与决策规则。

2.1 什么是信用评分卡

信用评分卡通常以“分数”形式输出,分数越高代表信用风险越低。典型的评分卡具有以下特征:

  • 可解释性: 每个特征对分数的贡献是显式的,业务人员可以清楚知道“为什么扣分”。
  • 标准化: 不同借款人的分数在同一尺度上可比,便于制定统一的授信策略。
  • 稳定性: 经过严格的群体稳定性(PSI)监控,确保模型在时间推移中保持有效。
维度 说明 典型范围
分数区间 模型输出的最低分到最高分 300 – 850(FICO)或 0 – 1000
决策阈值 划分“通过/拒绝/人工审核”的分数临界点 如 600 分以下拒绝,600-650 人工审核
分数刻度 分数每增加一定单位,违约概率降低的比例 如每增加 20 分,违约概率减半
信用评分卡核心概念图 信用评分卡核心概念 输入特征 收入、负债、逾期次数 模型转换 逻辑回归 / XGBoost 输出分数 300 – 850 决策应用 通过 / 拒绝 / 人工审核 / 差异化定价 💡 评分卡的核心价值:将复杂的风险预测转化为业务人员可直接使用的分数与规则。 每个特征对分数的贡献是显式的,满足监管对模型可解释性的要求。

2.2 评分卡开发流程

一个标准评分卡项目通常包含以下五个阶段,每个阶段都有明确的交付物和质量检查点。

阶段 核心任务 关键输出 常见陷阱
1. 数据准备 数据采集、清洗、合并、缺失值处理 建模宽表(含目标变量) 样本选择偏差、时间穿越
2. 特征工程 WOE编码、IV筛选、分箱、衍生变量 特征候选集与IV排名 过拟合、特征共线性
3. 模型训练 算法选择、参数调优、样本权重 训练好的模型对象 欠采样/过采样不当
4. 模型验证 区分度(KS/AUC)、校准度、稳定性(PSI) 验证报告与模型卡 只关注AUC忽略PSI
5. 模型上线 分数映射、决策阈值设定、系统部署 线上评分服务与监控看板 线上线下分数不一致
实战建议: 数据准备阶段通常占用整个项目 60% 以上的时间。务必确保观察期(特征窗口)与表现期(标签窗口)严格对齐,避免“用未来信息预测过去”。
评分卡开发流程泳道图 评分卡开发流程泳道图 数据准备 采集·清洗·合并 特征工程 WOE·IV·分箱 模型训练 算法·调参·权重 模型验证 KS·AUC·PSI 上线 部署·监控 验证不通过则返回迭代 🔁 迭代机制:模型验证阶段如果 KS 低于 0.3 或 PSI 大于 0.1,需要返回特征工程甚至数据准备阶段重新处理。 每个阶段都应有明确的“通过/不通过”标准,避免带着问题进入下一阶段。

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。