3. 随机划分法:使用 sklearn 的 train_test_split 进行简单随机划分
随机划分法(Simple Random Split)是信用额度定价建模中最基础、最常用的数据划分策略。其核心思想是将原始数据集按照指定的比例,完全随机地拆分为训练集和测试集,不引入任何排序或分层约束。在 Python 生态中,sklearn.model_selection.train_test_split 是执行该操作的标准工具。
3.1 核心原理与适用边界
随机划分法假设样本是独立同分布的,且数据量足够大时,随机抽样能保证训练集与测试集在统计分布上趋于一致。但在信用额度定价场景中,该方法的有效性取决于以下条件:
| 条件 | 说明 | 对信用额度定价的影响 |
|---|---|---|
| 样本量充足 | 通常要求总样本量 > 10,000 条 | 大样本下随机波动小,训练/测试分布更接近 |
| 目标变量分布均衡 | 违约/正常客户比例不过度倾斜(如 1:9 以内) | 避免测试集中出现极端类别缺失 |
| 无强时间依赖 | 样本采集时间跨度短,或业务策略未发生重大变化 | 防止时间漂移导致训练集与测试集分布不一致 |
| 无群体结构 | 同一客户不重复出现,或重复样本可独立处理 | 避免信息泄露(同一客户出现在训练和测试集) |
适用场景速查: 随机划分法最适合 初期探索性建模、基线模型建立、以及 数据量 > 50,000 且违约率 > 5% 的信用额度定价任务。当数据量较小或类别极度不平衡时,应优先考虑分层抽样(第4章)。
3.2 代码示例:标准实现流程
以下代码展示了使用 train_test_split 进行信用额度定价数据划分的完整流程,包含特征矩阵与目标变量的拆分、随机种子设置、以及划分后的维度验证。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
# 模拟信用额度定价数据:10000 样本,20 个特征,违约率约 10%
X, y = make_classification(
n_samples=10000,
n_features=20,
n_informative=15,
n_redundant=3,
n_clusters_per_class=1,
weights=[0.9, 0.1], # 90% 正常,10% 违约
random_state=42
)
# 将特征矩阵转为 DataFrame 便于查看
feature_names = [f'feature_{i}' for i in range(20)]
X_df = pd.DataFrame(X, columns=feature_names)
y_series = pd.Series(y, name='default_flag')
# 随机划分:70% 训练集,30% 测试集
X_train, X_test, y_train, y_test = train_test_split(
X_df,
y_series,
test_size=0.3, # 测试集比例
random_state=2024, # 固定随机种子,保证结果可复现
shuffle=True # 默认 True,打乱数据顺序
)
# 输出划分结果
print(f"总样本量: {len(X_df)}")
print(f"训练集样本量: {len(X_train)} ({len(X_train)/len(X_df)*100:.1f}%)")
print(f"测试集样本量: {len(X_test)} ({len(X_test)/len(X_df)*100:.1f}%)")
print(f"\n训练集违约率: {y_train.mean():.4f}")
print(f"测试集违约率: {y_test.mean():.4f}")
关键参数说明:
•
•
•
•
test_size:测试集比例,常用 0.2~0.4。信用额度定价中推荐 0.3,兼顾模型训练充分性与评估稳定性。•
random_state:随机种子,必须固定。不同种子会导致划分结果不同,影响模型评估的可复现性。•
shuffle:是否打乱数据。默认 True,防止原始数据中的顺序偏差(如按时间排序导致的分布偏移)。
3.3 随机划分的潜在风险与避坑指南
尽管 train_test_split 使用简单,但在信用额度定价的实际业务中,以下三个陷阱需要特别警惕:
- 陷阱一:信息泄露 — 如果同一客户在数据集中出现多次(如分期还款记录),随机划分可能将该客户的部分记录分入训练集、部分分入测试集,导致模型"提前看到"该客户的还款行为。解决方案:先按客户 ID 去重或分组,再进行划分。
- 陷阱二:时间穿越 — 信用额度定价通常依赖历史表现数据。如果数据包含时间戳,随机划分可能将较早的样本分入测试集、较晚的样本分入训练集,造成模型用"未来数据"预测"过去"。解决方案:改用时间序列划分(第5章)。
- 陷阱三:小样本下的分布偏移 — 当总样本量 < 5,000 时,随机划分可能导致训练集与测试集的违约率相差超过 2 个百分点,直接影响额度定价模型的校准。解决方案:使用分层随机划分(第4章)或交叉验证。
⚠️ 业务警示: 在信用额度定价模型中,测试集用于模拟"未来未知客户"的信用表现。如果随机划分导致测试集违约率与训练集偏差超过 1.5 个百分点,建议检查数据是否存在时间趋势或群体结构,并考虑更稳健的划分策略。
3.4 随机划分流程可视化
下图展示了随机划分法在信用额度定价数据上的完整流程,从原始数据集到训练集与测试集的生成,以及后续的模型训练与评估链路。
3.5 随机划分 vs 其他划分方法:快速对比
为了帮助你在信用额度定价项目中快速选择合适的划分策略,下表将随机划分法与后续章节将介绍的分层划分、时间序列划分进行对比:
| 对比维度 | 随机划分(本章) | 分层随机划分(第4章) | 时间序列划分(第5章) |
|---|---|---|---|
| 划分依据 | 完全随机 | 按目标变量比例分层 | 按时间顺序 |
| 训练/测试分布一致性 | 大样本下较好 | 小样本下也能保证 | 模拟真实时间漂移 |
| 代码复杂度 | 低(1行代码) | 中(需指定分层列) | 中高(需排序+索引) |
| 信用额度定价推荐度 | ★★★☆☆(基线模型) | ★★★★★(推荐首选) | ★★★★☆(有时序特征时) |
| 典型应用阶段 | 快速原型、特征筛选 | 正式建模、额度校准 | 贷后监控、滚动模型 |
实践建议: 在信用额度定价的初始探索阶段,使用随机划分法快速建立基线模型;进入正式建模后,切换到分层随机划分以保证测试集能代表各类客户;如果数据包含明确的时间戳(如申请日期、放款日期),务必增加时间序列划分作为稳健性检验。