最近因为做项目的需要,要做一些数据预测,因此就去学习了一下相关的知识。主要就是采用LSTM来做时间序列的预测。
数据集选择的是IBM2006-2018年的股价数据,我这里算的是每日的最高股价。其中,2006-2016年的数据是训练集,2017年的是测试集。
模型搭建如下:
然后就是对数据进行预处理(归一化),接着进行训练。在训练的时候采用了一些小技巧:采用了学习率逐渐衰减的方式,使得loss更小。
在不同epoch下,对2017年的数据进行预测的结果像下面的图片中所示的那样:(根据之前60天的真实数据来预测第二天的数据)
其中,蓝色的是真实曲线,绿色的是预测曲线。
500个epoch
10000个epoch
5000个epoch
12000个epoch
最终可以看到,12000个epoch之后,预测曲线和真实曲线已经非常的贴近了,说明,这个简单的模型,确实能够达到一个很不错的预测效果。
上面的股价预测,是基于前面60天的真实数据来预测下一天的真实数据。那么要是预测接下来一个月的汇率呢?
从理论上来讲,只需要将模型的输出数据从1个数据,修改成30个数据的序列,就能预测接下来一个月的汇率了。
汇率和股票相比,它的变化幅度不大,因此,如果我们的learning rate开的还像股票预测那么大的话,就很难收敛。
首先是去英为财情的网站下载了2005年1月1日到今天(2022年1月3日)的汇率数据。然后,丢进去训练了2200个epoch。
我设计的是根据过去180天的数据来预测接下来一个月的价格走势。由于预测的是接下来的30天,并且汇率本身的变化程度就比较小(每天相差几分钱),因此,在测试集上,只能说是预测的变化趋势基本一致,但是具体的值的话,预测的不准。
于是乎,我就预测了一下接下来一个月的英镑汇率:
具体它准不准,那就看看接下来的汇率是不是这么一回事吧!
(大概率是不准确的,大家不要把这个当成投资的依据,否则一切后果自负)
2022年1月4日,汇率:8.586546897888184
2022年1月5日,汇率:8.583914756774902
2022年1月6日,汇率:8.588775634765625
2022年1月7日,汇率:8.57702350616455
2022年1月8日,汇率:8.591371536254883
2022年1月9日,汇率:8.568089485168457
2022年1月10日,汇率:8.572650909423828
2022年1月11日,汇率:8.583415985107422
2022年1月12日,汇率:8.590611457824707
2022年1月13日,汇率:8.589016914367676
2022年1月14日,汇率:8.576234817504883
2022年1月15日,汇率:8.588798522949219
2022年1月16日,汇率:8.577808380126953
2022年1月17日,汇率:8.56200885772705
2022年1月18日,汇率:8.592248916625977
2022年1月19日,汇率:8.568221092224121
2022年1月20日,汇率:8.589277267456055
2022年1月21日,汇率:8.568589210510254
2022年1月22日,汇率:8.582256317138672
2022年1月23日,汇率:8.5689115524292
2022年1月24日,汇率:8.572840690612793
2022年1月25日,汇率:8.592175483703613
2022年1月26日,汇率:8.570953369140625
2022年1月27日,汇率:8.586837768554688
2022年1月28日,汇率:8.586097717285156
2022年1月29日,汇率:8.574344635009766
2022年1月30日,汇率:8.566436767578125
2022年1月31日,汇率:8.553132057189941
2022年2月1日,汇率:8.57451343536377
2022年2月2日,汇率:8.544835090637207
转载请注明原文:https://longjin666.cn/?p=1283