1. 风控样本分层概述

1.1 为什么需要样本分层

在信贷风控建模中,原始样本集通常是海量、非平稳、高度异质的。如果不加区分地将所有样本混合训练,模型容易学到“平均效应”,在关键子群体上表现不稳定甚至失效。样本分层(Stratification)正是为了解决这一问题——将总体按特定维度切分为若干同质子集,再分别进行特征工程、训练或评估。

核心痛点: 混合样本训练导致模型在长尾客群、新渠道、极端时段上的 AUC 下降 5%–15%,且通过率与坏账率同时上升。
问题 混合样本表现 分层后表现
时间非平稳性 模型在近期样本上 PSI > 0.25 各时段 PSI < 0.10
客群异质性 高收入与低收入群体共用同一阈值 子群体 KS 提升 0.08–0.12
渠道差异 APP 端与线下端特征分布偏移 渠道独立模型 F1 提升 10%+

1.2 分层在风控模型中的核心作用

样本分层贯穿风控建模全流程,其作用可归纳为以下四个层面:

  1. 提升特征区分度: 同一特征在不同分层中 IV(信息量)差异显著,分层后特征筛选更精准。
  2. 稳定模型性能: 分层训练使模型在时间、客群、渠道维度上的 PSI(群体稳定性指标)控制在 0.10 以内。
  3. 降低过拟合风险: 子样本内噪声更一致,模型泛化能力优于全量混合训练。
  4. 支持差异化策略: 分层后可为高坏账子群体单独设置拒绝阈值,实现精细化风控。
实操经验: 在 Spark 中,分层操作通常通过 groupBy + mapGroups 或 repartitionByRange 实现,避免 shuffle 带来的性能瓶颈。
样本分层在风控模型中的核心作用 样本分层在风控模型中的核心作用 原始混合样本 时间分层 客群分层 渠道分层 同质子样本集 → 独立特征工程 + 独立模型训练 + 独立阈值 效果:特征 IV 提升 · PSI 稳定 · 过拟合降低 · 策略精细化

1.3 常见分层维度

风控实践中,最常用的三个分层维度是 时间、客群 和 渠道。每个维度的分层逻辑、Spark 实现方式及注意事项如下:

分层维度 分层逻辑 典型切分方式 Spark 实现要点
时间 按申请/放款/逾期时间窗口划分 按月、按周、按 VINTAGE 期数 date_format + window 函数
客群 按用户属性或风险等级划分 收入区间、年龄组、信用评分段 bucketize + groupBy
渠道 按流量来源或获客方式划分 APP、H5、线下门店、第三方合作 when + otherwise 映射
注意: 分层并非越细越好。过度分层会导致子样本量不足(< 5000 条),统计意义丧失。建议每个子样本至少包含 10 倍于特征数量的样本量。
常见分层维度与 Spark 实现对照 常见分层维度与 Spark 实现对照 时间分层 按月/周/VINTAGE df.withColumn("month", date_format("dt","yyyy-MM")) 客群分层 收入/年龄/信用分 df.withColumn("bucket", bucketize("income",splits)) 渠道分层 APP/H5/线下/三方 df.withColumn("channel", when(...).otherwise(...)) 分层后 DataFrame → repartitionByRange("分层键") → 写入分区表

1.4 分层策略选择矩阵

实际项目中,三个维度往往需要组合使用。以下矩阵帮助决策何时采用单层、双层或三层分层:

场景 推荐分层策略 子样本数量 适用条件
模型冷启动 时间 + 客群 6–12 个 历史数据不足 2 年
渠道扩张期 渠道 + 时间 4–8 个 新渠道占比 > 20%
存量模型迭代 时间 + 客群 + 渠道 8–24 个 全量样本 > 500 万
快速验证 单维度(时间) 3–6 个 探索性分析阶段
Spark 性能建议: 三层组合分层时,优先使用 partitionBy 写入 Hive 分区表,后续训练时直接读取对应分区,避免重复全表扫描。