LSTM RNN 的有趣结果:训练和验证数据的滞后结果

Interesting results from LSTM RNN : lagged results for train and validation data

作为 RNN/LSTM(无状态)的介绍,我正在训练一个包含 200 天以前数据 (X) 序列的模型,包括每日价格变化、每日交易量变化等,以及labels/Y 我有 4 个月内从当前价格到当前价格的价格变化百分比。基本上我想估计市场方向,不是100%准确。但是我得到了一些奇怪的结果...

然后当我用训练数据测试我的模型时,我注意到模型的输出与实际数据相比非常合适,它只是滞后 正好 4个月:

当我将数据移动 4 个月时,您会发现它非常适合。

我显然可以理解为什么训练数据会非常接近,因为它在训练期间已经看到了所有数据 - 但为什么滞后 4 个月?

它对验证数据做同样的事情(注意我用红框突出显示的区域以供将来参考):

时移:

它不像您期望的那样像训练数据那样贴身,但仍然 符合我的喜好 - 我只是不认为它可以是这样的准确(以红色矩形中的小光点为例)。我认为该模型充当了一个朴素的预测器,我只是无法计算 how/why 它可能正在做。

为了从验证数据生成此输出,我输入了一个包含 200 个时间步长的序列,但数据序列中没有任何内容说明 4 个月内的价格变化百分比 - 它完全断开连接,所以它是怎么回事所以准确吗? 4 个月的滞后显然是另一个指标,表明这里有些不对劲,我不知道如何解释,但我怀疑两者是相关的。

好的,我意识到我的错误;我使用模型生成预测线的方式很天真。对于上图中的每个日期,我都从模型中获取输出,然后将预测的百分比变化应用于该日期的实际价格——这将给出 4 个月后的预测价格。

考虑到市场通常在 4 个月内仅在 0-3%(正负)的范围内移动,这意味着我的预测总是会密切反映当前价格,只是 4 个月延迟。

所以在每个日期,预测的输出都会被重新调整,所以模型线永远不会偏离实际;它会是一样的,但在 0-3%(正负)的范围内。

真的,图表并不重要,它也不能反映我使用输出的方式,所以我将放弃尝试获得视觉表示,并专注于寻找降低验证损失的不同指标。

我试图根据一些一般的基本概念来解释观察结果:

  1. 如果您不提供时间滞后的 X 输入数据集(滞后的 t-k,其中 k 是时间步长),那么基本上您将使用今天的收盘价来预测 LSTM同样是今天的收盘价……在训练阶段。该模型将(过度拟合)并且表现得与已知的答案完全一样(数据泄漏)

  2. 如果Y是预测的百分比变化(即X * (1 + Y%) = 4个月的未来价格),则预测的现值Yvalue实际上只是Y对未来进行贴现% 所以预测值会有 4 个月的偏移