3. KYC模型特征分布监控:连续型与离散型特征的PSI计算差异及分箱策略
在KYC(Know Your Customer)模型的持续监控中,特征分布漂移(PSI)是衡量模型稳定性的核心指标。由于连续型特征与离散型特征的数据分布形态不同,其PSI计算方式与分箱策略存在显著差异。选择错误的分箱方法会导致PSI值失真,从而引发误告警或漏告警。
核心原则:PSI的计算依赖于将特征的实际分布与期望分布划分为若干区间(分箱),然后比较每个区间内样本占比的变化。分箱策略直接决定了PSI的敏感度与可靠性。
3.1 连续型特征与离散型特征的PSI计算差异
下表从数据本质、分箱必要性、计算逻辑和典型场景四个维度,对比两类特征的PSI计算差异:
| 对比维度 | 连续型特征 | 离散型特征 |
|---|---|---|
| 数据本质 | 数值在实数范围内连续取值,如年龄、收入、交易金额 | 取值来自有限类别或有序等级,如性别、职业、信用等级 |
| 分箱必要性 | 必须分箱,否则每个唯一值样本量过少,PSI无法计算 | 通常无需额外分箱,直接以每个类别作为天然区间 |
| 计算逻辑 | 先分箱,再统计每个箱内的样本占比,最后计算PSI | 直接统计每个类别的样本占比,计算PSI;若类别过多需合并 |
| 典型场景 | 收入分布漂移、年龄结构变化、交易频次波动 | 职业构成变化、证件类型分布偏移、风险等级迁移 |
实操提示:对于离散型特征,若某个类别在期望分布中占比为0%,但在实际分布中出现,需进行平滑处理(如加1平滑或合并到邻近类别),否则PSI公式中会出现除以零的错误。
3.2 连续型特征的分箱策略:等频、等距与自定义
连续型特征的分箱是PSI计算中最关键的环节。三种主流分箱策略的对比与选择标准如下:
| 分箱策略 | 定义 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 等频分箱 | 每个箱内包含大致相同数量的样本 | 避免空箱或样本极少的箱;对长尾分布友好 | 箱边界随数据分布变化,跨时间可比性差 | 样本分布不均匀、存在极端值的特征 |
| 等距分箱 | 将数值范围等分为固定宽度的区间 | 箱边界固定,跨时间可比性强;解释性高 | 容易产生空箱或样本稀疏箱,PSI不稳定 | 分布均匀、业务含义明确的特征(如年龄) |
| 自定义分箱 | 根据业务知识或风控规则设定箱边界 | 完全贴合业务逻辑;可聚焦高风险区间 | 依赖专家经验;维护成本高 | 有明确业务阈值的特征(如收入税档) |
避坑指南:切勿在训练集和监控集上分别独立分箱。正确的做法是:基于期望分布(通常是训练集或建模样本)确定分箱边界,然后将该边界应用到实际分布(监控集)上,确保箱定义一致。
3.3 分箱策略选择流程图
下图展示了在KYC模型监控中,如何根据特征类型和分布特点选择合适的分箱策略:
3.4 分箱策略的PSI计算对比示例
以“客户年龄”这一连续型特征为例,展示三种分箱策略对PSI计算结果的影响。假设期望分布(建模集)与实际分布(监控集)的年龄数据如下:
| 分箱策略 | 箱区间 | 期望占比 | 实际占比 | PSI贡献 | 总PSI |
|---|---|---|---|---|---|
| 等距分箱 (每10岁一箱) |
18-28 | 25% | 20% | 0.011 | 0.045 |
| 28-38 | 35% | 30% | 0.008 | ||
| 38-48 | 25% | 30% | 0.010 | ||
| 48-58 | 15% | 20% | 0.016 | ||
| 等频分箱 (每箱25%样本) |
18-25 | 25% | 18% | 0.022 | 0.038 |
| 25-35 | 25% | 28% | 0.004 | ||
| 35-45 | 25% | 30% | 0.010 | ||
| 45-58 | 25% | 24% | 0.002 | ||
| 自定义分箱 (按风控规则) |
18-22(高风险) | 10% | 15% | 0.025 | 0.062 |
| 22-35(中风险) | 40% | 35% | 0.007 | ||
| 35-50(低风险) | 35% | 32% | 0.003 | ||
| 50-58(高风险) | 15% | 18% | 0.027 |
分析结论:上例中,自定义分箱的PSI最高(0.062),因为它将高风险区间(18-22岁和50-58岁)单独拆分,放大了这些区间的占比变化。等频分箱的PSI最低(0.038),因为它平滑了分布差异。在实际监控中,建议优先使用自定义分箱(当业务阈值明确时)或等距分箱(当分布均匀时),以保持PSI的跨时间可比性。
3.5 离散型特征的分箱处理与PSI计算
离散型特征的处理相对简单,但需注意以下关键点:
- 天然分箱:每个类别作为一个独立的箱,直接计算期望占比与实际占比。
- 类别合并:当类别数过多(通常超过20个)或某些类别样本占比极低(<1%)时,需将低频类别合并为“其他”类别,避免PSI被噪声主导。
- 有序离散特征:如信用等级(A、B、C、D),可保持原有顺序,但分箱时需确保等级顺序在期望和实际分布中一致。
- 零占比处理:若某个类别在期望分布中占比为0%,但在实际分布中出现,需进行平滑处理。常用方法为加1平滑:
p_smooth = (count + 1) / (total + N),其中N为类别总数。
代码示例:离散型特征PSI计算的Python实现片段
import numpy as np
def psi_discrete(expected_counts, actual_counts, categories):
"""
计算离散型特征的PSI
expected_counts: 期望分布中各类别的样本数
actual_counts: 实际分布中各类别的样本数
categories: 类别列表
"""
total_exp = sum(expected_counts)
total_act = sum(actual_counts)
psi_value = 0.0
for i, cat in enumerate(categories):
p_exp = (expected_counts[i] + 1) / (total_exp + len(categories)) # 加1平滑
p_act = (actual_counts[i] + 1) / (total_act + len(categories)) # 加1平滑
psi_value += (p_act - p_exp) * np.log(p_act / p_exp)
return psi_value
# 示例:职业类别
categories = ['学生', '白领', '蓝领', '自由职业', '其他']
expected = [2000, 5000, 3000, 1500, 500]
actual = [1800, 5200, 3100, 1600, 300]
print(f"PSI = {psi_discrete(expected, actual, categories):.4f}")
3.6 分箱策略选择总结
| 特征类型 | 推荐分箱策略 | 箱数建议 | 注意事项 |
|---|---|---|---|
| 连续型(均匀分布) | 等距分箱 | 5-10箱 | 箱边界固定,跨时间可比 |
| 连续型(长尾/偏态) | 等频分箱 | 5-10箱 | 避免空箱,但边界会变化 |
| 连续型(有业务阈值) | 自定义分箱 | 按业务规则 | 需定期复核阈值合理性 |
| 离散型(类别少) | 天然类别 | ≤20类 | 直接计算,注意零占比 |
| 离散型(类别多) | 合并低频类别 | 10-20类 | 合并后需保持业务含义 |
最终提醒:无论选择哪种分箱策略,都必须在模型上线前确定并固化分箱边界。监控过程中如需调整分箱策略,需重新计算历史PSI基线,并记录变更原因,确保监控结果的可追溯性。