数据拆分
方法概述
数据拆分是将整体数据集按一定规则划分为若干子集的操作,常用于机器学习建模前将数据划分为训练集、验证集与测试集。本工具支持三种拆分方式:按比例拆分(随机划分训练/验证/测试集,可两段或三段)、分层拆分(按指定类别列在各类别内按比例抽取以保持类别分布)与按组拆分(根据分组列,将指定的组划入训练集,其余组划入测试集,保持组内数据完整)。设置固定随机种子可保证结果可复现。适用于模型训练数据准备、交叉验证前的样本划分以及按用户/日期分组的场景评估。
本工具提供以下核心能力:
- 支持按比例拆分,训练集、验证集、测试集比例可调(可两段或三段)。
- 支持分层拆分,按指定类别列保持各子集类别分布与总体一致。
- 支持按组拆分,按分组列划分组,保持组内数据完整。
- 支持设置随机种子,保证拆分结果可复现。
- 训练集、验证集、测试集分别预览并输出各类别分布对比。
- 自动生成拆分摘要,含拆分方式、总样本量与各子集行数。
- 集成 AI 智能分析,评估拆分配置与类别平衡情况。
- 可分别下载训练集、验证集、测试集(CSV/Excel)与分析报告(HTML)。
计算步骤
1. 数据加载与预处理
- 文件读取:支持 CSV 和 Excel 格式,文件大小不超过 5MB。
- 缺失值识别:自动将常见缺失符号转换为缺失标记
NA。 - 列类型智能转换:字符型列中超过 80% 的值可转为数值时自动转为数值列。
- 空行/空列清理:删除完全为空的行和列。
2. 按比例(随机)拆分
设定训练集比例 \(p_{tr}\) 与验证集比例 \(p_{va}\),测试集比例取 \(p_{te} = 1 - p_{tr} - p_{va}\)。若 \(p_{tr} + p_{va} \ge 1\),则验证集比例置 0,此时退化为两段拆分。各子集大小: \[ n_{tr} = \lfloor n \cdot p_{tr} \rfloor, \quad n_{va} = \lfloor n \cdot p_{va} \rfloor, \quad n_{te} = n - n_{tr} - n_{va} \] 对全部行生成随机排列后,按上述数量依次划分给训练集、验证集与测试集。
3. 分层拆分
当指定分层列时,在各类别内单独按比例抽取,以保持分层变量的类别分布在各子集中一致。设第 \(j\) 类样本量为 \(N_j\),则该类在训练、验证、测试集的数量分别为: \[ n_{tr,j} = \lfloor N_j \cdot p_{tr} \rfloor, \quad n_{va,j} = \lfloor N_j \cdot p_{va} \rfloor, \quad n_{te,j} = N_j - n_{tr,j} - n_{va,j} \] 适用于类别不平衡的目标变量,避免训练/测试集中某一类缺失或比例偏离。
4. 按组拆分
根据分组列(如用户ID、门店、日期),由用户指定划入训练集的组集合 \(G_{tr}\),测试集取其余组 \(G_{te} = G \setminus G_{tr}\)。训练样本为第 \(i\) 行满足 \(g_i \in G_{tr}\) 的集合,测试样本为 \(g_i \in G_{te}\) 的集合。同一组的所有行保持在同一子集中,避免信息泄漏。
5. 结果组织与摘要
拆分结果按训练集、验证集、测试集三个子集分别展示,自动生成拆分摘要并输出总样本量与各子集行数;分层拆分时还输出分层列在各子集的类别分布对比。小数位数设置控制预览表格中数值的显示精度,不影响底层数据。
6. AI 智能分析
基于拆分方式、总样本量与各子集行数等信息,调用大语言模型评估拆分比例与方式的合理性,并给出训练集不平衡等问题的处理建议。
7. 结果导出
- 分别下载训练集、验证集、测试集的数据(CSV 或 Excel 格式)。
- 下载包含拆分摘要与各子集前 10 行预览的 HTML 报告。
案例分析
案例背景:某信用评分项目共有 1000 条样本,目标变量「违约」类别分布为:是(100 条)、否(900 条)。为保证建模评估可信,采用分层拆分划分为训练集 70%、验证集 15%、测试集 15%,并期望各子集中「违约=是」的比例与总体保持一致。
原始数据(示例):
| 客户ID | 收入(元/月) | 信用分 | 违约 |
|---|---|---|---|
| C001 | 8500 | 720 | 是 |
| C002 | 12000 | 780 | 否 |
| C003 | 6000 | 640 | 是 |
| C004 | 15000 | 810 | 否 |
| … | … | … | … |
处理过程:
- 数据加载:上传 CSV 文件。
- 拆分方式:按比例拆分。
- 参数设置:训练集比例 0.7,验证集比例 0.15,随机种子 123。
- 分层列:违约。
- 执行拆分:在「违约=是」「违约=否」两类内分别按比例随机划分。
拆分结果(示例):
| 子集 | 行数 | 违约=是 | 违约=否 | 违约=是占比 |
|---|---|---|---|---|
| 训练集 | 700 | 70 | 630 | 10% |
| 验证集 | 150 | 15 | 135 | 10% |
| 测试集 | 150 | 15 | 135 | 10% |
结论:在本示例数据范围内,通过分层拆分,违约=是的样本比例在训练、验证、测试三个子集中均约为 10%,与总体分布一致;相比之下,若随机拆分可能使某个子集的违约样本比例出现波动。
常见问题
Q1: 训练集、验证集、测试集的比例如何设置?
A: 常见组合如 70%/15%/15% 或 60%/20%/20%,可根据样本量调整。数据量大可适当减少训练集比例,小样本可加大训练集比例。
Q2: 分层拆分与按比例拆分的区别?
A: 按比例拆分对全部样本统一随机划分;分层拆分在目标类别的每个类别内分别按比例划分,能保持各子集的类别分布与总体接近,适合类别不平衡的场景。
Q3: 按组拆分适用于什么情况?
A: 当数据存在自然分组(如同一用户的多条记录)且不希望同一组的数据同时出现在训练集与测试集时,按组拆分可避免信息泄漏,保证组内数据完整。
Q4: 随机种子的作用是什么?
A: 设置固定随机种子可保证同一数据与参数下拆分结果一致,便于复现与对比实验。
Q5: 拆分后可以用哪些子集做什么?
A: 训练集用于拟合模型,验证集用于调参与选择模型,测试集用于最终性能评估;三段划分完成后即可接入下游建模流程。
Q6: 按组拆分时有验证集吗?
A: 按组拆分模式划分为训练集与测试集两组,不额外生成验证集;如需验证集,可结合按比例(分层)拆分或采用交叉验证等方法。
平台功能
- 数据输入:支持 CSV、Excel 格式(不超过 5MB),自动识别缺失值并转换数值列。
- 按比例拆分:训练集比例(0.1-0.9)与验证集比例(0-0.5)可调,测试集比例自动取余。
- 分层拆分:可选分层列,保持各类别在各子集中的比例分布。
- 按组拆分:选择分组列并勾选划入训练集的组,其余组自动进入测试集。
- 结果展示:
- 训练集(绿色标注)、验证集(橙色标注)、测试集(红色标注)分别预览。
- 拆分摘要(方式、总样本量、各子集行数)与分层列分布对比。
- AI 智能分析:评估拆分比例与方式并提供训练集不平衡处理建议(每日限 3 次,需配置 API 密钥)。
- 报告下载:支持分别下载训练集、验证集、测试集(CSV/Excel)及含摘要与各子集预览的 HTML 报告。
使用建议
- 按任务确定拆分方式:常规建模用按比例拆分;类别不平衡时优先考虑分层拆分;按用户、门店等分组的数据用按组拆分。
- 合理选择比例:测试集过小评估不稳定,验证集过大浪费训练样本,建议结合样本量在三段间取平衡。
- 分层列选目标变量:分层列通常为模型的目标类别列,以保持各子集中目标类别分布接近总体。
- 记录随机种子:固定种子便于复现;若需更稳健的评估,可组合交叉验证等方法。
- 检查分布对比:拆分后核对分层列在各子集的占比,确认与总体分布一致。
- AI 分析辅助:配置 API 密钥后,可用 AI 分析评估拆分配置并识别潜在的类别不平衡风险。
平台界面

平台界面包含:数据上传区、拆分方式选择区(按比例/按组)、训练/验证集比例与随机种子设置、分层列或分组列及训练组勾选区、训练集/验证集/测试集分块预览、拆分摘要与分布对比、AI 分析模块与结果下载区
参考文献
- Kohavi, R. (1995). A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection. Proceedings of the 14th International Joint Conference on Artificial Intelligence (IJCAI), 1137-1143.
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning (2nd ed.). Springer.