标准化时间序列预测股票准确价格

数据挖掘 时间序列 回归 lstm 正常化
2022-03-01 12:08:12

我正在尝试为神经网络创建一个模型,该模型试图使用 LSTM 逐点预测股票的价格(是的,我知道这可能没有得到任何东西,我应该预测上/下或一些真正的布尔决策,但我喜欢先试试这个)

我将使用过去 60 天的 HIGH、LOW、OPEN 作为特征,并尝试预测第二天的 ADJ_CLOSE。

当我需要对数据进行规范化时,问题就来了。我使用的是 1980 年到 2019 年的 AAPL 数据,主要问题是 80 年代的股票价格是美分,而 10 年代的股票价格是数百美元,所以我决定使用 Sklearn 的 MinMaxScaler 进行窗口标准化。
火车数据没有问题,我有 7887 个数据点,所以我用 500 个窗口对它们进行了缩放,最后分别保留。代码是这样的

x_train = train.values 

window_size = 500
for i in range(0,7500,window_size):
    x_train[i:i+window_size] = min_max_scaler.fit_transform(x_train[i:i+window_size])

x_train[i+window_size:] = min_max_scaler.fit_transform(x_train[i+window_size:])

测试时出现问题我不知道做类似的事情

x_test = test.values
x_test = min_max_scaler.fit_transform(x_test)

是一种聊天,因为他们自己适合。但我做不到

x_test = test.values
x_test = min_max_scaler.transform(x_test)

在训练数据的窗口归一化之后(使用最后一个拟合的缩放器),因为训练数据的最后一个窗口上的最小值和最大值之间的范围与测试数据的范围有很大不同,在这种情况下,归一化不会很好地完成并且测试数据会不适合 [0,1]。

有什么帮助吗?

1个回答

您应该始终将缩放器与训练数据相匹配。这是典型的验证问题之一,很难复制训练测试条件。

您是否考虑过进行滚动/推出窗口拆分? 推出窗户

这样,训练和测试之间的值范围将更接近。

这样做的问题是您丢失了一些培训信息。另一方面,关于 40 年前的股票信息在现在的预测中没有太大的作用。