1. 风控样本分层概述
1.1 为什么需要样本分层
在信贷风控建模中,原始样本集通常是海量、非平稳、高度异质的。如果不加区分地将所有样本混合训练,模型容易学到“平均效应”,在关键子群体上表现不稳定甚至失效。样本分层(Stratification)正是为了解决这一问题——将总体按特定维度切分为若干同质子集,再分别进行特征工程、训练或评估。
核心痛点: 混合样本训练导致模型在长尾客群、新渠道、极端时段上的 AUC 下降 5%–15%,且通过率与坏账率同时上升。
| 问题 | 混合样本表现 | 分层后表现 |
|---|---|---|
| 时间非平稳性 | 模型在近期样本上 PSI > 0.25 | 各时段 PSI < 0.10 |
| 客群异质性 | 高收入与低收入群体共用同一阈值 | 子群体 KS 提升 0.08–0.12 |
| 渠道差异 | APP 端与线下端特征分布偏移 | 渠道独立模型 F1 提升 10%+ |
1.2 分层在风控模型中的核心作用
样本分层贯穿风控建模全流程,其作用可归纳为以下四个层面:
- 提升特征区分度: 同一特征在不同分层中 IV(信息量)差异显著,分层后特征筛选更精准。
- 稳定模型性能: 分层训练使模型在时间、客群、渠道维度上的 PSI(群体稳定性指标)控制在 0.10 以内。
- 降低过拟合风险: 子样本内噪声更一致,模型泛化能力优于全量混合训练。
- 支持差异化策略: 分层后可为高坏账子群体单独设置拒绝阈值,实现精细化风控。
实操经验: 在 Spark 中,分层操作通常通过
groupBy + mapGroups 或 repartitionByRange 实现,避免 shuffle 带来的性能瓶颈。
1.3 常见分层维度
风控实践中,最常用的三个分层维度是 时间、客群 和 渠道。每个维度的分层逻辑、Spark 实现方式及注意事项如下:
| 分层维度 | 分层逻辑 | 典型切分方式 | Spark 实现要点 |
|---|---|---|---|
| 时间 | 按申请/放款/逾期时间窗口划分 | 按月、按周、按 VINTAGE 期数 | date_format + window 函数 |
| 客群 | 按用户属性或风险等级划分 | 收入区间、年龄组、信用评分段 | bucketize + groupBy |
| 渠道 | 按流量来源或获客方式划分 | APP、H5、线下门店、第三方合作 | when + otherwise 映射 |
注意: 分层并非越细越好。过度分层会导致子样本量不足(< 5000 条),统计意义丧失。建议每个子样本至少包含 10 倍于特征数量的样本量。
1.4 分层策略选择矩阵
实际项目中,三个维度往往需要组合使用。以下矩阵帮助决策何时采用单层、双层或三层分层:
| 场景 | 推荐分层策略 | 子样本数量 | 适用条件 |
|---|---|---|---|
| 模型冷启动 | 时间 + 客群 | 6–12 个 | 历史数据不足 2 年 |
| 渠道扩张期 | 渠道 + 时间 | 4–8 个 | 新渠道占比 > 20% |
| 存量模型迭代 | 时间 + 客群 + 渠道 | 8–24 个 | 全量样本 > 500 万 |
| 快速验证 | 单维度(时间) | 3–6 个 | 探索性分析阶段 |
Spark 性能建议: 三层组合分层时,优先使用
partitionBy 写入 Hive 分区表,后续训练时直接读取对应分区,避免重复全表扫描。