You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch LSTM日股票收益预测:训练与测试损失异常咨询

损失异常的根因定位

切分逻辑错误,并非完全无数据重叠

你构建滑动时序样本后,错误使用原始收益率序列的总长度作为切分分母,而非滑动样本集的实际长度:

  • 原始序列长度记为len(data),设置滑动窗口T=10后,最终生成的特征样本总长度为len(data) - T
  • 你计算切分边界时,调用len(historical_returns)获取的是原始序列长度,而非实际特征集长度,最终导致训练集与验证集的索引边界重叠
    举个直观的数值例子:假设原始序列共1000个交易日,T=10,滑动生成的特征集实际长度为990个样本:
  • 按你的代码逻辑,训练集取前3*1000//5=600个样本,对应索引范围0-599
  • 验证集按切片规则取[-400:-200],对应索引范围590-789
  • 两个集合的重叠区间为索引590-599,共10个样本——这就是你以为没有泄漏,实际训练集已经接触过部分验证集样本的原因

初始训练损失高于验证损失的原因

你使用MSE作为损失函数,损失值和样本本身的波动方差直接正相关:

  • 标准化器仅拟合了训练集时间区间的均值、方差,后续验证、测试集的缩放值完全基于训练集的统计量计算
  • 股票收益率存在典型的波动聚集效应,如果你选取的验证集刚好落在低波动时间区间,该区间内样本的整体方差会显著低于训练集的平均水平
  • 模型随机初始化阶段,预测值与真实值的偏差天然和样本方差正相关,因此随机模型在低波动验证集上计算的损失,天然低于高波动训练集上的损失——这并非模型训练带来的差异,是两个区间本身的方差不可比导致的

训练后损失走势异常的原因

  • 上述切分重叠带来的隐性数据泄漏,会直接拉高训练集拟合效果
  • 日度股票收益率本身信噪比极低,模型在全量批量梯度下降的流程下,没有任何正则约束,会快速记住训练集内的噪声规律,自然会出现训练损失随训练持续下降、验证损失始终高于训练集的情况

修复方案
  • 修正切分逻辑,先获取滑动特征集的实际总长度,再按6:2:2比例计算切分点:
    N = len(X_historical)
    train_end = int(N * 0.6)
    val_end = int(N * 0.8)
    x_train1 = X_historical[:train_end]
    y_train1 = Y_historical[:train_end]
    x_val1 = X_historical[train_end:val_end]
    y_val1 = Y_historical[train_end:val_end]
    x_test1 = X_historical[val_end:]
    y_test1 = Y_historical[val_end:]
    
  • 切分完成后逐一检查三个集合的索引范围,确认无重叠、时间顺序连贯
  • 计算三个集合的真实值方差,排除因区间本身波动差异导致的损失绝对值不可比的问题

内容的提问来源于stack exchange,提问作者InvestingScientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 10:06:05