3. 随机切分(Random Split):基本原理与适用场景
随机切分(Random Split)是机器学习中最基础、最常用的数据划分方法。其核心思想是:在保证样本独立同分布的前提下,通过完全随机的抽样方式,将原始数据集划分为训练集和测试集(或验证集)。在 LightGBM 的额度策略建模中,随机切分通常作为默认的基线切分方案。
3.1 基本原理
随机切分的操作流程可以概括为以下三个步骤:
- 设定比例:根据业务需求和数据量,确定训练集与测试集的划分比例。常见比例为 80/20 或 70/30。
- 随机抽样:使用随机数生成器(如 numpy.random 或 sklearn 的 train_test_split)对样本索引进行无放回随机打乱。
- 分配数据:按照设定比例,将打乱后的前 N 个样本分配给训练集,剩余样本分配给测试集。
关键假设:随机切分有效的前提是原始数据已经满足独立同分布(i.i.d.)条件,且样本之间不存在时间顺序、群体结构或空间相关性。
以下 SVG 展示了随机切分的基本流程:
3.2 适用场景
随机切分并非万能,它在以下场景中表现最佳:
| 场景类型 | 具体描述 | 推荐度 |
|---|---|---|
| 数据量充足 | 样本量在 10 万以上,随机抽样能保证训练集和测试集分布一致 | ★★★★★ |
| 无时间依赖 | 样本之间不存在时间先后顺序,如静态客户画像数据 | ★★★★★ |
| 无群体结构 | 样本之间相互独立,不存在同一用户多次出现或组内相关性 | ★★★★☆ |
| 基线模型验证 | 作为模型初期的快速验证,评估特征有效性 | ★★★★★ |
| 类别均衡 | 目标变量分布相对均衡,无需特殊处理 | ★★★★☆ |
3.3 代码实现示例
在 Python 中使用 LightGBM 进行随机切分的标准代码:
import numpy as np
import lightgbm as lgb
from sklearn.model_selection import train_test_split
# 假设 X 为特征矩阵,y 为目标变量
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2, # 测试集占比 20%
random_state=42, # 固定随机种子,保证结果可复现
shuffle=True, # 先打乱再切分
stratify=None # 不进行分层抽样(默认)
)
# 创建 LightGBM 数据集
lgb_train = lgb.Dataset(X_train, y_train)
lgb_test = lgb.Dataset(X_test, y_test, reference=lgb_train)
# 训练参数
params = {
'objective': 'binary',
'metric': 'auc',
'boosting_type': 'gbdt',
'num_leaves': 31,
'learning_rate': 0.05,
'verbose': -1
}
# 训练模型
model = lgb.train(
params,
lgb_train,
valid_sets=[lgb_test],
num_boost_round=100,
callbacks=[lgb.early_stopping(10)]
)
实践建议:在额度策略建模中,建议始终设置
random_state 参数。这不仅能保证每次运行结果一致,也便于团队协作时复现模型效果。推荐使用 42、2024 或业务相关的固定数字。
3.4 随机切分的优势与局限
为了帮助您在实际项目中做出合理选择,下表总结了随机切分的主要优缺点:
| 维度 | 优势 | 局限 |
|---|---|---|
| 实现成本 | 代码简单,一行 train_test_split 即可完成 |
无法处理复杂的数据结构(如时间序列、分组数据) |
| 计算效率 | O(n) 时间复杂度,适合大规模数据 | 对极端不平衡数据可能产生分布偏移 |
| 评估可靠性 | 在大样本下能提供无偏的模型性能估计 | 小样本下(< 1 万)方差较大,单次切分结果不稳定 |
| 业务适配性 | 适合离线评估、特征筛选、超参数调优 | 不适合模拟线上真实数据分布变化(如时间漂移) |
3.5 在额度策略中的典型应用
在额度策略建模中,随机切分通常用于以下两个阶段:
- 特征工程验证阶段:快速评估新构造的特征是否对模型有正向贡献,此时使用随机切分可以快速迭代。
- 模型基线建立:在项目初期,使用随机切分建立 AUC、KS 等指标的基线值,后续再使用更复杂的切分方法进行优化。
注意:如果您的额度策略数据包含同一客户多次申请记录(即存在客户级别的重复样本),请务必先按客户 ID 去重或使用分组切分,否则随机切分会导致严重的数据泄露,使模型评估结果虚高。