我正在研究一个价格变动预测项目,但我被质量不佳的预测所困扰。
在每个时间步,我都使用 LSTM 来预测接下来的 10 个时间步。输入是最后 45-60 次观察的序列。我测试了几种不同的想法,但它们似乎都给出了相似的结果。该模型经过训练以最小化 MSE。
对于每个想法,我尝试了一个模型一次预测 1 个步骤,其中每个预测被反馈为下一个预测的输入,并且一个模型直接预测接下来的 10 个步骤(多个输出)。对于每个想法,我还尝试仅使用先前价格的移动平均线作为输入,并扩展输入以在这些时间步输入订单簿。每个时间步长对应一秒。
这些是迄今为止的结果:
1- 第一次尝试使用最后 N 步的移动平均线作为输入,并预测接下来 10 步的移动平均线。在时间 t,我使用价格的真实值并使用模型预测 t+1 ....t+10
这是结果:
预测移动平均线:
仔细观察,我们可以看到出了什么问题:
预测似乎是一条直线。不太关心输入数据:
- 第二次尝试是试图预测差异,而不仅仅是价格变动。这次的输入不是简单的 X[t](其中 X 是我的输入矩阵),而是 X[t]-X[t-1]。这并没有真正帮助。这次的情节是这样的:
预测差异:
但仔细观察,在绘制差异时,预测值始终基本为 0。
在这一点上,我被困在这里并运行我们的想法来尝试。我希望在此类数据方面有更多经验的人可以为我指明正确的方向。
我是否使用正确的目标来训练模型?处理我缺少的此类数据时是否有任何细节?是否有任何“技巧”可以防止您的模型始终预测与上次看到的值相似的值?(它们确实会产生低错误,但此时它们变得毫无意义)。
至少只是关于在哪里挖掘更多信息的提示将不胜感激。
更新
这是我的配置
{
"data": {
"sequence_length":30,
"train_test_split": 0.85,
"normalise": false,
"num_steps": 5
},
"training": {
"epochs":200,
"batch_size": 64
},
"model": {
"loss": "mse",
"optimizer": "adam",
"layers": [
{
"type": "lstm",
"neurons": 51,
"input_timesteps": 30,
"input_dim": 101,
"return_seq": true,
"activation": "relu"
},
{
"type": "dropout",
"rate": 0.1
},
{
"type": "lstm",
"neurons": 51,
"activation": "relu",
"return_seq": false
},
{
"type": "dropout",
"rate": 0.1
},
{
"type": "dense",
"neurons": 101,
"activation": "relu"
},
{
"type": "dense",
"neurons": 101,
"activation": "linear"
}
]
}
}
注意最后一层有 101 个神经元。这不是错误。我们只想预测功能和价格。换句话说,我们要预测时间 t+1 的价格,并使用预测的特征来预测时间 t+2 的价格和新特征,...