通过 LSTM 进行库存预测

数据挖掘 深度学习 rnn lstm
2021-09-24 23:39:11

在此处输入图像描述

蓝色:训练损失
黑色:验证损失

如果建模给了我这样的情节,那意味着什么?是否过拟合?我应该如何让它变得更好?

代码如下:

classifier = Sequential()
classifier.add(LSTM(
    input_dim=72,
    output_dim=50,
    return_sequences=True))
classifier.add(Dropout(0.20))

classifier.add(LSTM(
    100,
    return_sequences=False))
classifier.add(Dropout(0.20))

classifier.add(Dense(
    output_dim=1))
classifier.add(Activation('relu'))
classifier.compile(loss='mse', optimizer='rmsprop')

X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))

#classifier.fit(X_train, y_train, batch_size = 10, nb_epoch = 10)
cls_return = classifier.fit(X_train, y_train, batch_size=300, nb_epoch=500, validation_split=0.05)
history = cls_return.history
plt.plot(history['loss'], label='Training Loss', color='blue')
plt.plot(history['val_loss'], label='Validation Loss', color='black')
plt.show()
1个回答

是的,这是过拟合。金融时间序列表现出许多特点,包括异方差性、高尾风险、各种季节性和各种动量机器学习算法倾向于拾取这些模式并对其进行过度拟合。据我所知,在理解股票价格方面,没有任何机器学习算法可以与经典的时间序列分析相媲美。

还请记住,如果有人能够做出“明天股价将上涨 5%”之类的预测,他们可能会在几周内赚到数十亿美元。

编辑:您问是否有机会训练比随机猜测更好的网络。是的,有两个原因。

首先,如果你尝试数百种参数组合并在同一个测试集上对它们进行评估,你就会成为所谓的“二度过度拟合”的受害者。测试集的性能成为您决策过程的一部分,因为您丢弃了在测试集上表现不佳的模型并保留了表现良好的模型。您本质上是在测试集上进行训练,最终会以 100% 的准确率对其进行预测。但是在新的、以前看不见的测试数据上使用这个看似完美的模型,你会失望的。

其次,异方差性、季节性和动量都在你的时间序列中引入了一点“真实”的可预测性。如果你非常幸运,你的算法可能会识别出这些模式,同时忽略所有奇怪的残余噪声。这非常不可能,而且可能无关紧要。您不应将预测准确性与随机猜测进行比较,而应与合理的基线模型进行比较。对于个股的月度价格,这可能是Fama-French 三因素模型(每日或盘中股票价格会让你更深入地进入量化金融这个兔子洞)。我打赌你五美元,你将无法在以前看不见的数据上击败该模型的表现。

我对你的建议:不要在你作为动物园管理员的第一天清理狮子的笼子。从一些美好而简单的事情开始。