3. 样本分层理论基础:分层抽样原理、风控中的分层目标
在风控建模中,样本并非均匀分布。好坏样本比例悬殊、不同时间窗口的客群行为差异显著、不同客群的风险模式各不相同。若直接使用原始样本训练模型,模型会偏向多数类,且无法捕捉时间与客群的异质性。样本分层正是为了解决这些问题而引入的核心预处理技术。
3.1 分层抽样原理
分层抽样(Stratified Sampling)是一种概率抽样方法。其核心思想是:先将总体按某个或某几个特征划分为互不重叠的层(Stratum),然后从每一层中独立抽取样本,最终合并为总样本。
分层抽样的数学表达:
设总体被划分为 \(K\) 层,第 \(i\) 层的大小为 \(N_i\),总体大小 \(N = \sum_{i=1}^K N_i\)。
若从第 \(i\) 层中抽取 \(n_i\) 个样本,则总样本量 \(n = \sum_{i=1}^K n_i\)。
常见的分配方式包括:比例分配(\(n_i = n \times \frac{N_i}{N}\))和最优分配(考虑层内方差)。
设总体被划分为 \(K\) 层,第 \(i\) 层的大小为 \(N_i\),总体大小 \(N = \sum_{i=1}^K N_i\)。
若从第 \(i\) 层中抽取 \(n_i\) 个样本,则总样本量 \(n = \sum_{i=1}^K n_i\)。
常见的分配方式包括:比例分配(\(n_i = n \times \frac{N_i}{N}\))和最优分配(考虑层内方差)。
与简单随机抽样相比,分层抽样具有以下优势:
| 对比维度 | 简单随机抽样 | 分层抽样 |
|---|---|---|
| 样本代表性 | 依赖随机性,可能遗漏小层 | 保证每层都有样本 |
| 估计精度 | 方差较大 | 层内同质时方差显著降低 |
| 对少数类的覆盖 | 容易丢失稀有类别 | 可强制抽取少数类样本 |
| 实施复杂度 | 低 | 中等(需先定义分层变量) |
3.2 风控中的三大分层目标
在风控特征工程中,分层不是为抽样而抽样,而是为了在后续建模中控制偏差、提升泛化能力。以下三个分层目标是风控场景中最核心的维度:
3.2.1 好坏样本分层
风控数据天然存在严重的类别不平衡。好样本(正常还款)通常占 95% 以上,坏样本(逾期/违约)往往不足 5%。若不进行分层:
- 模型会倾向于将所有样本预测为“好”,获得高准确率但无实际风控价值。
- 模型无法学习到坏样本的边界特征,导致召回率极低。
分层策略:在训练集和验证集中,按好坏标签分别进行分层抽样,确保每一批数据中好坏比例保持一致(如 3:7 或 2:8)。
实践建议:分层时不要只做简单的等比例抽样。对于极度稀疏的坏样本(如低于 1%),建议采用过采样(如 SMOTE)或分层加权,在损失函数中为坏样本赋予更高权重。
3.2.2 时间窗口分层
风控模型面临的最大挑战之一是概念漂移。用户的还款能力、欺诈手段、宏观经济环境都会随时间变化。若将不同时间段的样本混在一起训练,模型会学到过时的模式。
分层策略:按时间窗口(如按月、按季度)将样本划分为不同层。常见做法包括:
- 时间序列交叉验证:以时间顺序划分训练集和测试集,保证测试集时间在训练集之后。
- 时间分层采样:在训练集内部,按时间窗口分层,确保每个 batch 都包含不同时间段的样本。
- 衰减权重:对较旧的时间窗口样本赋予较低的权重,让模型更关注近期行为。
3.2.3 客群分层
不同客群的风险模式差异巨大。例如:
- 新客 vs 老客:新客缺乏历史行为数据,老客有完整的还款记录。
- 不同产品线:现金贷、消费分期、抵押贷的风险特征完全不同。
- 不同渠道:线上申请 vs 线下推广,欺诈率差异显著。
分层策略:将客群按业务属性划分为多个子群,分别训练模型或共享底层特征但使用不同的分类头。
注意:客群分层不宜过细。若某层样本量过少(如少于 1000 条),模型无法收敛,此时应考虑合并相似客群或使用迁移学习。
3.3 分层在模型训练中的实际应用
在风控模型训练流程中,分层通常发生在以下两个阶段:
- 数据划分阶段:在将数据集拆分为训练集、验证集、测试集时,按好坏标签进行分层,确保三个集合中的好坏比例一致。
- 训练批次生成阶段:在训练过程中,按时间窗口和客群分层生成 mini-batch,避免模型在某个 batch 中只看到单一时间段的样本。
代码示例:使用 sklearn 进行分层抽样
from sklearn.model_selection import train_test_split
# 假设 X 为特征矩阵,y 为标签(0:好样本,1:坏样本)
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
stratify=y, # 按标签分层
random_state=42
)
# 验证分层效果
print("训练集好坏比例:", y_train.mean())
print("测试集好坏比例:", y_test.mean())
3.4 分层策略的选择矩阵
在实际项目中,并非所有场景都需要同时使用三个分层维度。以下矩阵帮助决策:
| 业务场景 | 好坏样本分层 | 时间窗口分层 | 客群分层 | 推荐策略 |
|---|---|---|---|---|
| 信贷审批模型(稳定客群) | ✅ 必须 | ✅ 建议 | ❌ 可选 | 好坏分层 + 时间窗口分层 |
| 反欺诈模型(快速变化) | ✅ 必须 | ✅ 必须 | ✅ 建议 | 三层全量分层 |
| 存量客户提额模型 | ✅ 必须 | ❌ 可选 | ✅ 必须 | 好坏分层 + 客群分层 |
| 新客冷启动模型 | ✅ 必须 | ❌ 可选 | ❌ 可选 | 好坏分层 + 过采样 |
核心原则:分层不是越细越好。每增加一个分层维度,样本量会被切分得更碎。当某层样本量低于 500 时,应考虑合并或使用分层权重替代硬切分。