3. 样本切分基础:训练集、验证集、测试集的定义与在定价模型中的特殊意义
在金融风控定价模型中,样本切分不仅是机器学习流程的标准动作,更直接决定了额度定价策略的泛化能力与业务稳健性。本节将系统梳理三组数据集的定义,并重点剖析它们在定价场景下的特殊约束。
3.1 三组数据集的标准定义
| 数据集 | 核心用途 | 在定价模型中的角色 |
|---|---|---|
| 训练集 | 模型参数学习与特征权重拟合 | 学习“历史额度-违约”映射关系,形成初始定价函数 |
| 验证集 | 超参数调优、早停(Early Stopping)与模型选择 | 防止定价模型过拟合历史样本,控制额度弹性区间 |
| 测试集 | 最终泛化能力评估,不参与任何训练决策 | 模拟未来客群分布,验证定价策略的稳健性与收益表现 |
关键原则:测试集必须严格隔离,在模型开发全生命周期中仅使用一次。任何基于测试集结果的“反向调参”都会导致信息泄露,使模型评估失效。
3.2 定价模型中的特殊意义
与分类或回归任务不同,额度定价模型对样本切分有额外的业务约束:
- 时间序列敏感性:定价模型依赖客群在不同时间窗口的还款表现,随机切分可能破坏时间因果结构,导致未来数据“泄露”到训练集。
- 额度干预偏差:历史额度本身是模型决策的结果,若直接使用全量历史样本,训练集中会包含“被干预后的表现”,产生选择性偏差。
- 样本权重差异:不同额度区间的客群违约率差异巨大,简单随机切分可能导致验证集或测试集中高风险样本比例失真。
业务警示:在定价模型中,测试集不仅要评估预测误差(如RMSE),还必须评估业务指标——例如不同额度区间的坏账率、通过率与预期收益。仅看AUC或KS往往掩盖定价策略的局部失效。
3.3 样本切分流程与数据隔离策略
下图展示了定价模型中推荐的样本切分流程,强调时间轴对齐与额度干预隔离:
3.4 常见切分方法对比
| 切分方法 | 适用场景 | 定价模型风险 |
|---|---|---|
| 随机切分 | 独立同分布数据,无时间依赖 | 高:破坏时间因果,低估未来坏账 |
| 时间序列切分 | 信贷、交易、时序行为数据 | 低:保持时间顺序,评估更真实 |
| 分层切分 | 样本分布极度不均衡 | 中:需确保额度区间分层合理 |
| 分组切分 | 同一客户多次借贷 | 中:需按客户ID分组,防止数据泄露 |
常见陷阱:在定价模型中,切勿使用随机切分处理包含时间戳的样本。例如,用2023年的数据训练,用2022年的数据测试,模型会“看到”未来信息,导致测试集AUC虚高,上线后实际效果大幅下降。
3.5 定价模型切分实战建议
- 优先使用时间序列切分:按申请时间或观察期结束时间排序,前60%为训练集,中间20%为验证集,最后20%为测试集。
- 过滤额度干预样本:在切分前,剔除历史额度被人为调整超过一定阈值(如20%)的样本,保留自然审批通过的客群。
- 验证集用于早停与调参:在LightGBM中设置
early_stopping_rounds,以验证集上的业务指标(如预期收益)为监控目标。 - 测试集保留业务分层:在测试集上按额度区间分层计算坏账率与收益率,确保模型在不同额度段表现均衡。
# LightGBM 时间序列切分示例
import pandas as pd
from sklearn.model_selection import train_test_split
# 假设 df 包含 'apply_date' 列
df_sorted = df.sort_values('apply_date').reset_index(drop=True)
# 按时间顺序切分
train_end = int(len(df_sorted) * 0.6)
val_end = int(len(df_sorted) * 0.8)
train = df_sorted.iloc[:train_end]
val = df_sorted.iloc[train_end:val_end]
test = df_sorted.iloc[val_end:]
print(f"训练集样本数: {len(train)}")
print(f"验证集样本数: {len(val)}")
print(f"测试集样本数: {len(test)}")
核心结论:样本切分是定价模型成败的第一道防线。在LightGBM额度定价中,坚持时间序列切分、过滤干预样本、按业务指标评估测试集,是保证模型上线后稳定盈利的基础。