3. 模型监控指标体系:PSI、KS、AUC、Lift、Gini

额度定价PD模型上线后,必须建立一套完整的监控指标体系,以持续评估模型区分能力、排序稳定性和预测准确度。本章详细定义六大核心指标的计算逻辑与业务含义,帮助风控团队快速定位模型衰退原因。

监控频率建议:PSI 建议每周/每月计算一次;KS、AUC、Gini 建议每月计算一次;Lift 图建议每季度更新一次。模型上线初期应适当提高监控频率。

3.1 指标全景图

下表汇总了六大指标的核心用途与评价维度:

指标 英文全称 核心用途 评价维度 理想范围
PSI Population Stability Index 样本分布稳定性 稳定性 < 0.1
KS Kolmogorov-Smirnov 好坏样本区分能力 区分度 > 0.3
AUC Area Under ROC Curve 整体排序能力 排序力 > 0.75
Lift Lift Value 模型提升效果 提升度 随分箱变化
Gini Gini Coefficient 模型纯度/集中度 纯度 > 0.5
MSE/LogLoss Mean Squared Error / Log Loss 预测误差 准确度 越小越好

3.2 PSI — 群体稳定性指标

定义:PSI 衡量模型评分在时间维度上的分布偏移程度,是模型稳定性的核心监控指标。

计算逻辑:

  1. 将模型评分按等频或等距分箱(通常 10~20 箱)。
  2. 计算每个分箱在基准样本(建模样本)中的占比 \(A_i\)。
  3. 计算每个分箱在监控样本(当前样本)中的占比 \(B_i\)。
  4. 代入公式:
PSI = Σ (B_i - A_i) * ln(B_i / A_i)

判定标准:

  • PSI < 0.1:分布稳定,无需干预。
  • 0.1 ≤ PSI < 0.25:轻度偏移,需排查原因。
  • PSI ≥ 0.25:严重偏移,模型需重新训练或调整。
常见陷阱:PSI 对空箱敏感。若监控样本某分箱占比为 0,会导致 ln(0) 计算异常。建议对空箱做平滑处理(如加 0.5 或使用贝叶斯平滑)。

3.3 KS — 区分能力指标

定义:KS 统计量衡量模型对好客户与坏客户的最大区分能力,是评分卡模型最常用的区分度指标。

计算逻辑:

  1. 将模型评分按升序排列,等频分箱(通常 10~20 箱)。
  2. 计算每个分箱的累计好客户占比 \(Cum\_good_i\)。
  3. 计算每个分箱的累计坏客户占比 \(Cum\_bad_i\)。
  4. KS = max(|Cum\_good_i - Cum\_bad_i|)。
KS = max_{i=1}^{n} |Cum_good_i - Cum_bad_i|

判定标准:

  • KS > 0.5:区分能力极强,但需警惕过拟合。
  • 0.3 ≤ KS ≤ 0.5:区分能力良好。
  • 0.2 ≤ KS < 0.3:区分能力一般,需优化。
  • KS < 0.2:区分能力差,模型不可用。
业务解读:KS 值对应的分箱位置即为模型最佳切分点。例如 KS=0.45 出现在第 7 箱,说明该分数段是区分好坏客户的最优阈值。

3.4 AUC — 排序能力指标

定义:AUC 是 ROC 曲线下的面积,衡量模型对好坏客户排序的全局能力。AUC 值越大,模型将坏客户排在好客户前面的概率越高。

计算逻辑:

  1. 按模型评分从低到高排序(低分代表高风险)。
  2. 计算每个阈值下的 TPR(真正率)和 FPR(假正率)。
  3. 绘制 ROC 曲线,计算曲线下面积。
AUC = ∫_{0}^{1} TPR(FPR^{-1}(x)) dx

等价解释:AUC = P(坏客户评分 < 好客户评分),即随机抽取一对好坏客户,模型将坏客户排在好客户前面的概率。

判定标准:

  • AUC ≥ 0.9:极佳,但需验证是否过拟合。
  • 0.8 ≤ AUC < 0.9:优秀。
  • 0.75 ≤ AUC < 0.8:良好。
  • 0.7 ≤ AUC < 0.75:一般,需优化。
  • AUC < 0.7:差,模型不可用。

3.5 Lift — 提升度指标

定义:Lift 衡量模型相对于随机选择的提升效果,常用于评估模型在特定分箱(如高风险客群)中的捕获能力。

计算逻辑:

  1. 将样本按模型评分从低到高排序,等频分箱(通常 10 箱)。
  2. 计算每个分箱的坏客户占比 \(Bad\_rate_i\)。
  3. 计算整体坏客户占比 \(Overall\_bad\_rate\)。
  4. Lift_i = Bad\_rate_i / Overall\_bad\_rate。
Lift_i = Bad_rate_i / Overall_bad_rate

业务解读:

  • Lift > 1:该分箱坏客户浓度高于平均水平。
  • Lift = 1:与随机选择无差异。
  • Lift < 1:该分箱坏客户浓度低于平均水平。
应用场景:Lift 图常用于策略制定。例如,若前 2 箱 Lift 值 > 5,说明模型能有效识别高风险客群,可针对该客群设置更严格的额度定价策略。

3.6 Gini — 基尼系数

定义:Gini 系数衡量模型对好坏客户的排序纯度,与 AUC 高度相关,但更直观地反映模型对极端风险的识别能力。

计算逻辑:

  1. 按模型评分从低到高排序。
  2. 计算累计好客户占比和累计坏客户占比。
  3. 绘制 Lorenz 曲线(累计坏客户 vs 累计好客户)。
  4. Gini = 1 - 2 * Lorenz 曲线下面积。
Gini = 2 * AUC - 1

判定标准:

  • Gini ≥ 0.6:模型纯度极高。
  • 0.4 ≤ Gini < 0.6:良好。
  • 0.2 ≤ Gini < 0.4:一般。
  • Gini < 0.2:差。

3.7 指标关系与监控体系架构

下图展示了六大指标在模型监控体系中的层级关系与数据流转:

模型监控指标体系架构 模型评分数据输入 稳定性监控:PSI 区分度监控:KS / AUC / Gini 提升度监控:Lift 模型健康度综合评估 是否触发预警 / 是否需要重训 监控流程说明: 1. 先检查 PSI 确保样本分布稳定 → 2. 再检查 KS/AUC/Gini 评估区分能力 → 3. 最后用 Lift 图辅助策略制定

3.8 指标计算代码示例(Python)

以下代码展示了 PSI、KS、AUC 的核心计算逻辑:

import numpy as np
import pandas as pd
from sklearn.metrics import roc_auc_score

def calculate_psi(actual, expected, bins=10):
    """计算 PSI"""
    # 等频分箱
    actual_bins = pd.qcut(actual, q=bins, duplicates='drop')
    expected_bins = pd.qcut(expected, q=bins, duplicates='drop')
    
    actual_dist = actual_bins.value_counts(normalize=True).sort_index()
    expected_dist = expected_bins.value_counts(normalize=True).sort_index()
    
    psi = 0
    for i in range(len(actual_dist)):
        a = actual_dist.iloc[i]
        e = expected_dist.iloc[i]
        # 平滑处理
        if a == 0: a = 0.0001
        if e == 0: e = 0.0001
        psi += (a - e) * np.log(a / e)
    
    return psi

def calculate_ks(y_true, y_score):
    """计算 KS"""
    df = pd.DataFrame({'y_true': y_true, 'y_score': y_score})
    df = df.sort_values('y_score', ascending=True)
    df['cum_good'] = (df['y_true'] == 0).cumsum() / (df['y_true'] == 0).sum()
    df['cum_bad'] = (df['y_true'] == 1).cumsum() / (df['y_true'] == 1).sum()
    ks = max(abs(df['cum_good'] - df['cum_bad']))
    return ks

def calculate_auc(y_true, y_score):
    """计算 AUC"""
    return roc_auc_score(y_true, y_score)

# 示例使用
y_true = [0, 1, 0, 1, 0, 1, 0, 0, 1, 0]
y_score = [0.1, 0.4, 0.2, 0.8, 0.3, 0.7, 0.15, 0.25, 0.9, 0.05]

print(f"KS: {calculate_ks(y_true, y_score):.4f}")
print(f"AUC: {calculate_auc(y_true, y_score):.4f}")

3.9 指标联动分析

实际监控中,单一指标异常往往伴随其他指标变化。下表总结了常见联动模式:

PSI KS AUC Lift 可能原因 建议动作
↑ 升高 ↓ 下降 ↓ 下降 ↓ 下降 客群结构变化(如新客涌入) 重新校准模型或分群建模
→ 稳定 ↓ 下降 ↓ 下降 → 稳定 特征失效或变量衰减 特征工程迭代
→ 稳定 → 稳定 → 稳定 ↑ 升高 极端风险事件(如欺诈攻击) 排查异常客群,调整策略
↑ 升高 → 稳定 → 稳定 → 稳定 评分分布整体平移 检查评分卡截距项
最佳实践:建议建立监控看板,同时展示 PSI、KS、AUC 的时序趋势图。当任一指标连续 3 个月恶化时,自动触发模型重训流程。

3.10 监控报告模板

每次模型监控应输出标准化报告,包含以下核心内容:

  • 模型基本信息:模型版本、上线时间、监控周期。
  • 稳定性评估:PSI 值及分箱分布对比图。
  • 区分度评估:KS 值、AUC 值、Gini 系数及 ROC 曲线。
  • 提升度评估:Lift 图及 Top 分箱捕获率。
  • 异常分析:指标异常原因排查及建议。
  • 行动建议:是否重训、是否调整策略、是否深入分析。

通过系统化监控指标体系,风控团队可以快速定位模型衰退根因,确保额度定价模型长期稳定运行。