3. 样本切分基础:训练集、验证集、测试集的定义与在定价模型中的特殊意义

在金融风控定价模型中,样本切分不仅是机器学习流程的标准动作,更直接决定了额度定价策略的泛化能力与业务稳健性。本节将系统梳理三组数据集的定义,并重点剖析它们在定价场景下的特殊约束。

3.1 三组数据集的标准定义

数据集 核心用途 在定价模型中的角色
训练集 模型参数学习与特征权重拟合 学习“历史额度-违约”映射关系,形成初始定价函数
验证集 超参数调优、早停(Early Stopping)与模型选择 防止定价模型过拟合历史样本,控制额度弹性区间
测试集 最终泛化能力评估,不参与任何训练决策 模拟未来客群分布,验证定价策略的稳健性与收益表现
关键原则:测试集必须严格隔离,在模型开发全生命周期中仅使用一次。任何基于测试集结果的“反向调参”都会导致信息泄露,使模型评估失效。

3.2 定价模型中的特殊意义

与分类或回归任务不同,额度定价模型对样本切分有额外的业务约束:

  • 时间序列敏感性:定价模型依赖客群在不同时间窗口的还款表现,随机切分可能破坏时间因果结构,导致未来数据“泄露”到训练集。
  • 额度干预偏差:历史额度本身是模型决策的结果,若直接使用全量历史样本,训练集中会包含“被干预后的表现”,产生选择性偏差。
  • 样本权重差异:不同额度区间的客群违约率差异巨大,简单随机切分可能导致验证集或测试集中高风险样本比例失真。
业务警示:在定价模型中,测试集不仅要评估预测误差(如RMSE),还必须评估业务指标——例如不同额度区间的坏账率、通过率与预期收益。仅看AUC或KS往往掩盖定价策略的局部失效。

3.3 样本切分流程与数据隔离策略

下图展示了定价模型中推荐的样本切分流程,强调时间轴对齐与额度干预隔离:

定价模型样本切分流程与数据隔离策略 原始历史样本 按时间排序 过滤额度干预样本(保留自然表现) 训练集 60% 早期样本 验证集 20% 中期样本 测试集 20% 最新样本 说明:按时间顺序切分,避免未来信息泄露;过滤额度干预样本,减少选择性偏差

3.4 常见切分方法对比

切分方法 适用场景 定价模型风险
随机切分 独立同分布数据,无时间依赖 高:破坏时间因果,低估未来坏账
时间序列切分 信贷、交易、时序行为数据 低:保持时间顺序,评估更真实
分层切分 样本分布极度不均衡 中:需确保额度区间分层合理
分组切分 同一客户多次借贷 中:需按客户ID分组,防止数据泄露
常见陷阱:在定价模型中,切勿使用随机切分处理包含时间戳的样本。例如,用2023年的数据训练,用2022年的数据测试,模型会“看到”未来信息,导致测试集AUC虚高,上线后实际效果大幅下降。

3.5 定价模型切分实战建议

  1. 优先使用时间序列切分:按申请时间或观察期结束时间排序,前60%为训练集,中间20%为验证集,最后20%为测试集。
  2. 过滤额度干预样本:在切分前,剔除历史额度被人为调整超过一定阈值(如20%)的样本,保留自然审批通过的客群。
  3. 验证集用于早停与调参:在LightGBM中设置 early_stopping_rounds,以验证集上的业务指标(如预期收益)为监控目标。
  4. 测试集保留业务分层:在测试集上按额度区间分层计算坏账率与收益率,确保模型在不同额度段表现均衡。
# 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额度定价中,坚持时间序列切分、过滤干预样本、按业务指标评估测试集,是保证模型上线后稳定盈利的基础。