4. 数据准备与特征监控
信贷模型上线后,监控看板最容易犯的错误,是只盯模型分数和通过率,却忽略了“喂给模型的数据是否还和训练时一样”。数据准备与特征监控是模型监控的第一道防线:数据质量决定结论是否可信,特征分布漂移决定模型是否还适用,缺失值与异常值决定风险是否被掩盖,而特征稳定性指标(CSI)则把这些变化压缩成一个可排序、可告警的量化信号。
一、核心原理:从“数据体检”到“特征体检”
数据质量检查关注的是数据本身是否完整、合规、可计算,例如主键重复、字段类型错误、枚举值越界、时间戳乱序、金额为负等。特征分布漂移检测关注的是特征取值分布是否发生统计意义上的变化,例如收入分布整体下移、多头查询次数右移。缺失值与异常值监控是漂移检测的细化:缺失率突增往往意味着上游采集或加工链路故障,异常值比例上升则可能意味着欺诈行为或数据污染。CSI(Characteristic Stability Index)则把“当前分布”与“基准分布”的差异量化为一个数值,便于跨特征比较和分层告警。
二、方法流程:四步闭环
- 建立基准:以训练集或最近一个稳定窗口作为基准分布,保存每个特征的分箱边界、缺失率、均值、标准差、分位数等。
- 例行检查:每日/每周跑数据质量规则与特征统计,输出缺失率、异常值比例、PSI/CSI等指标。
- 分层告警:按特征重要性和业务敏感度设置阈值,例如核心特征CSI>0.1预警、>0.25告警;缺失率环比上升超过50%触发告警。
- 归因与复盘:定位是上游数据问题、业务策略变化还是真实风险迁移,决定修复数据、重训模型还是调整策略。
三、CSI计算与解读:把“漂移”变成可排序的数字
CSI的计算与PSI类似,核心是分箱后比较基准分布与当前分布的占比差异。常用公式为:CSI = Σ (当前占比 - 基准占比) × ln(当前占比 / 基准占比)。分箱可采用等频、等距或基于业务含义的切分。计算时需注意:分箱边界必须固定为基准边界,否则每次重新分箱会导致指标不可比;占比为0时需做平滑处理,避免除零或无穷大。
import numpy as np
import pandas as pd
def calc_csi(base, curr, bins=10, eps=1e-6):
# 基于基准数据确定分箱边界
_, edges = pd.qcut(base, q=bins, retbins=True, duplicates='drop')
edges[0], edges[-1] = -np.inf, np.inf
base_pct = pd.cut(base, bins=edges).value_counts(normalize=True).sort_index()
curr_pct = pd.cut(curr, bins=edges).value_counts(normalize=True).sort_index()
base_pct = base_pct.clip(lower=eps)
curr_pct = curr_pct.clip(lower=eps)
csi = ((curr_pct - base_pct) * np.log(curr_pct / base_pct)).sum()
return round(csi, 4)
# 示例:收入特征CSI
base_income = np.random.normal(8000, 2000, 10000)
curr_income = np.random.normal(7200, 2200, 10000)
print("收入特征CSI:", calc_csi(base_income, curr_income))
解读CSI时不能只看数值,还要结合特征重要性和业务含义。通常可参考:CSI<0.1表示分布稳定;0.1~0.25表示轻微漂移,需关注;>0.25表示显著漂移,应触发告警并排查原因。但阈值并非绝对,核心特征即使CSI为0.12也可能需要立即处理,而次要特征CSI为0.3可能仅需记录观察。
| 监控项 | 常用指标 | 建议阈值/动作 | 典型原因 |
|---|---|---|---|
| 数据质量 | 主键重复率、字段空值率、类型错误数 | 重复率>0.1%告警;空值率突增50%告警 | 上游重复推送、采集失败 |
| 缺失值 | 缺失率、环比变化 | 核心特征缺失率>5%预警,>10%告警 | 接口变更、字段未回填 |
| 异常值 | 超出3σ比例、负值比例 | 异常比例>1%预警,>3%告警 | 欺诈攻击、单位错误 |
| 特征稳定性 | CSI、PSI | CSI>0.1预警,>0.25告警 | 客群迁移、策略调整 |
四、案例与误区复盘
某消费信贷模型在监控中发现“近30天多头查询次数”CSI从0.05升至0.31,同时缺失率从2%升至9%。初步排查发现,上游数据供应商接口变更导致部分查询记录未返回,缺失值被填充为0,造成分布左移。若只看模型AUC,可能因缺失填充而暂时稳定,但实际风险已被掩盖。修复数据链路后,CSI回落至0.08,缺失率恢复至2.5%。这个案例说明:CSI必须与缺失值、异常值监控联动解读,单独看任何一个指标都可能误判。
数据准备与特征监控不是一次性任务,而是伴随模型全生命周期的例行工作。只有把数据质量、缺失值、异常值和CSI放在同一套监控体系中,才能让信贷模型看板真正具备“早发现、早归因、早处置”的能力。