股票预测:GRU 模型预测相同的给定值而不是未来的股票价格
Posted
技术标签:
【中文标题】股票预测:GRU 模型预测相同的给定值而不是未来的股票价格【英文标题】:stock prediction : GRU model predicting same given values instead of future stock price 【发布时间】:2019-03-17 15:35:10 【问题描述】:我只是从 kaggle post 测试这个模型这个模型假设从给定的一组最后的股票预测提前 1 天。如您所见,在调整了一些参数后,我得到了令人惊讶的好结果。 均方误差为 5.193。所以总体而言,它看起来很擅长预测未来的股票,对吧?好吧,当我仔细查看结果时,结果很糟糕。
如您所见,此模型正在预测给定股票的最后价值,即我们当前的最后一只股票。 所以我确实将预测调整到了后退一步.. 所以现在您可以清楚地看到该模型预测的是退一步或最后的股票奖励,而不是未来的股票预测。
这是我的训练数据
# So for each element of training set, we have 30 previous training set elements
X_train = []
y_train = []
previous = 30
for i in range(previous,len(training_set_scaled)):
X_train.append(training_set_scaled[i-previous:i,0])
y_train.append(training_set_scaled[i,0])
X_train, y_train = np.array(X_train), np.array(y_train)
print(X_train[-1],y_train[-1])
这是我的模型
# The GRU architecture
regressorGRU = Sequential()
# First GRU layer with Dropout regularisation
regressorGRU.add(GRU(units=50, return_sequences=True, input_shape=(X_train.shape[1],1)))
regressorGRU.add(Dropout(0.2))
# Second GRU layer
regressorGRU.add(GRU(units=50, return_sequences=True))
regressorGRU.add(Dropout(0.2))
# Third GRU layer
regressorGRU.add(GRU(units=50, return_sequences=True))
regressorGRU.add(Dropout(0.2))
# Fourth GRU layer
regressorGRU.add(GRU(units=50))
regressorGRU.add(Dropout(0.2))
# The output layer
regressorGRU.add(Dense(units=1))
# Compiling the RNN
regressorGRU.compile(optimizer='adam',loss='mean_squared_error')
# Fitting to the training set
regressorGRU.fit(X_train,y_train,epochs=50,batch_size=32)
here 是我的完整代码,您也可以在 google colab
运行此代码。
所以我的问题是它背后的原因是什么?我做错了什么有什么建议吗?
【问题讨论】:
你是如何处理这个问题的? 我仍在努力寻找答案,但从post 你可以看到序列生成部分的一些更新,但我还没有尝试过。 【参考方案1】:实际上,回归是一个众所周知的问题。由于回归器的任务是最小化错误,它通过从您输入到回归器的特征中选择最接近的值来保护它的任务。在时间序列问题中尤其如此。
1) 切勿给出您希望模型预测的未处理收盘价,尤其是在时间序列回归问题中。更一般地说,永远不要给回归器提供一些关于标签可能是什么的直接数字直觉的特征。
2)如果您不确定模型是否像您的案例一样复制,请务必将原始测试集和您的预测绘制在一起,以直观地分析情况。此外,如果可以,请在实时数据上对您的模型进行模拟,以观察您的模型预测是否具有相同的性能。
3)我建议您应用二元分类而不是回归。
我近一年来一直在紧张地研究金融信号预测,请不要犹豫,询问更多。
玩得开心。
【讨论】:
嘿,感谢您的详细回放,现在按照您的回答,我将使用二进制分类。让我们看看它的表现如何。编辑:我也在考虑做多序列预测是个好主意吗? 您不仅应该提供最后一个样本,还应该提供一个将最后 n 个样本作为一个输入的时间序列窗口。例如;如果要预测时间 t+1 的上/下波动,请将 t, t-1, t-2,....,t-29 的特征作为单个样本提供给模型的每个点,以获得更大的图案。如果这就是你的意思,那就完全去做。但是,如果您的意思是不仅要预测 t+1,还要预测 t+2 等等,那是危险的;你应该拿出一些聪明的东西。 @UgurMULUK,我也在处理类似的问题,可以看看这里***.com/questions/52252442/…【参考方案2】:在我看来,这是因为您的损失函数是均方误差。最小化此误差的最佳方法是使用先前的值作为当前步骤的估计值(特别是如果步骤就在附近)。
如果您尝试预测样本之间的差异,您将开始清楚地看到模型的局限性。
我目前在尝试使用时间序列进行预测时遇到了类似的问题。我还没有找到解决方案,但正如其他人指出的那样,我正在努力提取特征。
【讨论】:
以上是关于股票预测:GRU 模型预测相同的给定值而不是未来的股票价格的主要内容,如果未能解决你的问题,请参考以下文章
DL之GRU:基于2022年6月最新上证指数数据集结合Pytorch框架利用GRU算法预测最新股票上证指数实现回归预测