主页 > imtoken钱包下载国际版 > 还是不靠谱!多维LSTM网络预测比特币价格【机器学习应用区块链系列二】

还是不靠谱!多维LSTM网络预测比特币价格【机器学习应用区块链系列二】

imtoken钱包下载国际版 2023-01-18 23:29:35

量化投资和机器学习

为中国量化投资事业贡献我们的力量!

公众号今天为大家带来机器学习应用区块链系列的第二篇。

本文作者为原作者,之前推过公众号。具体文章《Time Series Prediction through LSTM Neural Network for the Stock Market (with Python Source Code)》,虽然有一段时间了,但我们觉得这篇文章很重要。结论很有用,希望你能仔细阅读。

结论很精彩,见文末。

它也告诉我们,一些机器学习算法用于股票价格预测,效果不是那么好!不要以为个子高就很好,有时候真实的交易并没有那么复杂!

至于如何预测过程,大家可以下载代码自行研究。

这篇文章主要是为了预测比特币价格和张量而写的,使用一个不仅看价格还看比特币数量和货币(本例中为美元)的多维 LSTM 神经网络,并创建一个多维 LSTM 神经网络 可变序列机器学习模型.

时间数据集

Kaggle 上有一个数据集,其中包含 7 个元素的比特币历史数据。

关联:

具体处理过程可以自己查内容,只贴clean_data()函数的核心代码:

num_rows = len(data)
x_data = []
y_data = []
i = 0
while((i+x_window_size+y_window_size) <= num_rows):
 x_window_data = data[i:(i+x_window_size)]
 y_window_data = data[(i+x_window_size):(i+x_window_size+y_window_size)]
 #Remove any windows that contain NaN
 if(x_window_data.isnull().values.any() or y_window_data.isnull().values.any()):
   i += 1
   continue
 
 if(normalise):
   abs_base, x_window_data = self.zero_base_standardise(x_window_data)
   _, y_window_data = self.zero_base_standardise(y_window_data, abs_base=abs_base)
 #Average of the desired predicter y column
 y_average = np.average(y_window_data.values[:, y_col])
 x_data.append(x_window_data.values)
 y_data.append(y_average)
 i += 1

复制

预测结果

我们将尝试做出两种类型的预测:

第一种:逐点预测,即预测t+1个点,然后移动真实数据的窗口,继续预测下一个点。

model = lstm.load_network('data/model_saved.h5')
predictions = model.predict_generator(
   generator_strip_xy(data_gen_test, true_values),
   steps=steps_test
)
#Save our predictions
with h5py.File(configs['model']['filename_predictions'], 'w') as hf:
   dset_p = hf.create_dataset('predictions', data=predictions)
   dset_y = hf.create_dataset('true_values', data=true_values)
   
plot_results(predictions[:800], true_values[:800])

复制

第二种:是t+n的多步超前预测,我们用真实数据窗口中预设的预测填充移动窗口,绘制N步。

#Reload the data-generator
data_gen_test = dl.generate_clean_data(
   configs['data']['filename_clean'],
   batch_size=800,
   start_index=ntrain
)
data_x, true_values = next(data_gen_test)
window_size = 50 #numer of steps to predict into the future
#We are going to cheat a bit here and just take the next 400 steps from the testing generator and predict that data in its whole
predictions_multiple = predict_sequences_multiple(
   model,
   data_x,
   data_x[0].shape[0],
   window_size
)
plot_results_multiple(predictions_multiple, true_values, window_size)

复制

结论(我们认为有用的结论)

不是从人工智能的角度,而是从投资的角度来解释一些事实。

预测回报是一个相当没有意义的行为。我的意思是,预测回报是预测的圣杯,一些顶级对冲基金的观点是通过在现实中寻找新的阿尔法指标来做到这一点,这是一件非常困难的事情,因为影响价格走势的外部因素很复杂。实际上,它可以被看作是试图预测一个随机的下一步。

然而,我们所做的并不是完全没有意义的。有限的时间序列数据,即使有多个维度,也很难预测回报比特币靠谱吗,我们可以看到,特别是从第二张图表中,有一种方法可以预测波动性。不仅仅是波动,我们还可以通过扩展来预测市场环境,让我们了解我们目前所处的市场环境。

我们可以看到,通过了解我们当前的市场环境,预测未来的市场状况是始终为市场分配正确策略的关键。虽然这更像是传统市场的一般投资方式,但同样适用于比特币市场。

因此,目前预测比特币的长期价格是相当困难的,仅仅通过时间序列数据技术没有人可以做到,因为要使价格变化的因素很多。在此类数据集上使用 LSTM 神经网络的另一个问题是比特币靠谱吗,我们将整个时间序列数据集视为一个固定的时间序列。也就是说,时间序列的属性随时间保持不变。然而,这是不可能的,因为影响价格变化的因素也会随着时间而变化,因此假设网络发现的属性或模式今天仍在使用是不合理的。

当然,可以使用一些方法来克服这种非平稳性问题。目前的研究方向是利用贝叶斯方法和LSTM共同克服时间序列非平稳性问题。