股票数据如何分训练集和测试集

Posted by:

|

On:

|

✅ 方法一:固定比例按时间划分(推荐)

比如你有 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✅ 方法一:按时间比例划分
模拟实时预测✅ 方法二:滑动窗口
需要调参 / 正式建模✅ 方法三:三段法

💡建议:先用方法一开发 &调试模型,性能差不多时再尝试方法二模拟真实环境。