相对于 X_train 偏移 y_train 的 LSTM 未来步数预测

数据挖掘 Python 时间序列 lstm 预测
2022-02-23 16:48:17

我正在尝试使用移位的火车数据来预测简单的一个特征时间序列数据。源代码如下所示:

   DATE              PRICE
0  1987-05-20        18.63
1  1987-05-21        18.45
2  1987-05-22        18.55
3  1987-05-25        18.60
4  1987-05-26        18.63

带有数据链接下载的实际代码在这里提供:gist

所以主要问题是它实际上无法预测下一步。粗略地说: y_train 通过参数中定义的时间步长相对于 X_train “移动”。所以我们得到 X_train 和 y_train 是这样的:

timesteps = 5
data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
# After manipulations which you can find in gist we getting this:
X_train =
    [[ 1  2  3  4  5]
     [ 2  3  4  5  6]
     [ 3  4  5  6  7]
     [ 4  5  6  7  8]
     [ 5  6  7  8  9]
     [ 6  7  8  9 10]
     [ 7  8  9 10 11]
     [ 8  9 10 11 12]
     [ 9 10 11 12 13]
     [10 11 12 13 14]]
y_train =
    [[ 6  7  8  9 10]
     [ 7  8  9 10 11]
     [ 8  9 10 11 12]
     [ 9 10 11 12 13]
     [10 11 12 13 14]
     [11 12 13 14 15]
     [12 13 14 15 16]
     [13 14 15 16 17]
     [14 15 16 17 18]
     [15 16 17 18 19]]

因此可以公平地假设,在使用 X_train(作为输入)和 y_train(作为输出)训练 LSTM 模型之后,我们得到的模型能够提前预测 n 个时间步长。但是我遇到了一个问题,即训练模型不能预测任何东西 - 只会“复制” X_test 数据。为方便起见,我重建 X_test 数据并使用从 model.predict() 返回的 y_test 数据绘制它: X_test 和 y_test 的图

因此,为了清楚起见,这个结果还包含“数据集价格”(来自数据集 [upper_train + timesteps:] 的纯数据)。

我找不到哪里出错了(或者这种方法可能不好?)所以我将不胜感激任何帮助!

2个回答

不幸的是,这种方法本身很可能是不好的。这不是你的 LSTM 或神经网络的错。

你可能会找到很多在线教程,使用 RNN/LSTM 来预测股票价格/原油价格/比特币价格或任何价格,根据其价格历史,它们的结果几乎肯定毫无意义。

请注意,我并不是说分析市场价格是没有意义的,而是仅仅基于历史价格来预测未来价格通常是没有意义的,因为市场已经成熟并且影响其价格的最相关信息很容易获得;或者换句话说,市场是有效的。

在数据科学领域之外,有效市场假设的假设对于大多数市场并不完全正确,但其结果与大型市场的事实接近:资产价格遵循随机游走。在对未来的预测方面,价格表现为,即对明天价格的最佳预测是今天的价格。

市场是完美的,这就是模型无法预测的原因。有很多有点 LSTM 或其他更完美的算法不允许价格表现为可预测的指数(如果有一些可预测的价值,数以百万计的算法将获利,价格将再次变为不可预测的值)。

LSTM 确实可以训练并正确拟合训练数据,但这些信息对随后的测试数据没有用。

作为演示,我使用可预测的周期性信号(如窦)更改了您的输入数据,因此 LSTM 可以正确地学习以根据您的要求移动数据从过去预测未来。

sinus_input = [np.sin(2 * np.pi * i/20) for i in range(1275)]
index = [i for i in range(1250)]

sinus_data = pandas.DataFrame(list(zip(index, sinus_input)), columns =['data', 'value']) 

在此处输入图像描述

你可以从这里下载笔记本:

https://gist.github.com/m-alcu/0be57483552385ce9a2622eb103ac988