✅ 方法一:固定比例按时间划分(推荐)
比如你有 N
条时间序列样本,按比例切分(例如 80% 训练,20% 测试):
pythonCopyEdit# 假设 X 是 (num_samples, window_size, feature_dim)
num_samples = X_tensor.shape[0]
train_size = int(num_samples * 0.8)
X_train = X_tensor[:train_size]
y_train = y_tensor[:train_size]
X_test = X_tensor[train_size:]
y_test = y_tensor[train_size:]
✅ 保持了时间的因果性,训练集早于测试集。
✅ 方法二:滑动预测 + 留一法(适合在线预测)
每次训练一个滑动窗口,测试的是窗口后面的数据点(适合逐步更新模型)。
例如:
textCopyEdit训练用 X[:t],测试 X[t]
然后滑动到 t+1,再训练 X[:t+1],测试 X[t+1]
这个适合模拟真实交易环境,但对训练时间要求较高。
✅ 方法三:多步预测场景下使用验证集
如果你要做 多步预测(multi-step forecasting),可以考虑:
pythonCopyEdit- 训练集:前 70%
- 验证集:中间 10%
- 测试集:最后 20%
📊 可视化划分建议
举例说明(假设你有 500 个样本):
pythonCopyEdit# 500 个 log return 样本
train: 0 ~ 399
test: 400 ~ 499
在时间序列预测(尤其是像股价预测这种任务)中,没有绝对最好的数据划分方法,取决于你的目标。以下是三种方法的适用场景和对比:
✅ 方法一:固定比例按时间划分(推荐作为 baseline)
特点 | 描述 |
---|---|
✅ 简单可靠 | 训练集是历史,测试集是将来 |
✅ 可重复评估 | 一次训练、一次测试,适合构建 baseline |
❌ 不反映未来持续变化 | 适合数据稳定但不适合快速变化的市场 |
📌 适合:
- 快速搭建预测模型;
- 模拟“只看过去预测未来”;
- 用于第一次调试模型结构和学习过程。
✅ 方法二:滑动窗口 / 增量训练(模拟实时预测)
特点 | 描述 |
---|---|
✅ 拟合真实应用 | 每预测一步,用历史更新模型; |
✅ 测试更稳健 | 每个时间点都能测试一次; |
❌ 训练成本高 | 要反复训练,时间消耗大; |
❌ 实现复杂 | 需要多次训练、模型缓存等机制; |
📌 适合:
- 实盘预测 / 在线学习;
- 构建滚动回测系统;
- 模拟策略运行。
✅ 方法三:训练-验证-测试三段法(用于调参)
特点 | 描述 |
---|---|
✅ 支持调参 | 验证集可用于 early stopping 和超参选择; |
✅ 模拟部署 | 最终用测试集评估已选好模型; |
❌ 占用数据多 | 三段分割导致有效训练数据少; |
📌 适合:
- 需要调节超参数(如 Transformer 的层数、head 数);
- 用验证集控制过拟合(early stopping);
- 构建精细实验设计。
✅ 总结推荐:
你的目的 | 推荐方法 |
---|---|
搭建原型 / baseline | ✅ 方法一:按时间比例划分 |
模拟实时预测 | ✅ 方法二:滑动窗口 |
需要调参 / 正式建模 | ✅ 方法三:三段法 |
💡建议:先用方法一开发 &调试模型,性能差不多时再尝试方法二模拟真实环境。