#导入下载的数据wxplot(x);第三步对差分序列性质进行考察
#对差分序列性质考察plot(diff(x))acf(diff(x))pacf(diff(x))结果如下图第四步水平相关信息提取拟合ARIMA(5,1,2)模型
#这个例子用的ARIMA(512)也可以用auto.arima来建立模型x.fitx.fit第五步残差白噪声检验
for (i in 1:2) print(Box.test(x.fit$residual,lag6*i))输出的P值还不错。第六步水平预测并绘制预测图
x.forex.foreplot(x.fore)这里 Point Forecast 一列就是对未来5天的预测结果。而后面Lo 80、Hi 80组成的区间意思是有80%的落在区间内。95%同理。可以看到ARIMA预测结果是稳中有升这和实际9月23日至9月27日ICBC股价(最高价)走势也相似。二、LSTM模型
LSTM(长短期记忆网络)模型首次提出是在1997年是在RNN上的一个拓展。更为广为人知的神经网络RNN有一个缺点就是容易遗忘最开始输入的内容而LSTM采用长短记忆的方法有效解决这一问题。在2014年之后随着RNN的普及发展LSTM也有了更广泛的发展应用。明显相比上世纪就已经成熟的ARIMA模型LSTM更加新颖效果好但是暂时还没有编写到课本里面。关LSTM模型具体介绍网上和知乎上的介绍很多理论方面就不多赘述了下面直接说我的实战代码。这里我用的pytorch 1.1版本来实现LSTM。
第一步导入必要包import pandas as pdimport matplotlib.pyplot as pltimport datetimeimport osimport torchimport torch.nn as nnimport numpy as npfrom torch.utils.data importDataset, DataLoader第二步利用tushare包去下载最近两年ICBC的的历史股票行情第三步数据预处理第四步创建LSTM层和超参数第五步万事俱备可以输出了5.645258, 5.5933948, 5.5533557, 5.527862 , 5.536109则为LSTM预测的ICBC 2019年9月23日至9月27日的股价。三、 ARIMA与LSTM预测结果对比1、工行股价预测值与真实值对比
工行股价LSTM预测值ARIMA预测值实际值2019/9/235.6452585.5337115.522019/9/245.5933955.5391335.522019/9/255.5533565.5458865.522019/9/265.5278625.5482255.562019/9/275.5361095.5430765.582、外币对美元日兑换率预测值与真实值对比外币对美元日兑换率LSTM预测值ARIMA预测值实际值1998/12/241.7980391.6752391.6841998/12/251.7218411.6752171.67931998/12/261.6964601.6754751.67071998/12/271.6925241.6754661.67651998/12/281.6903211.6755801.6673、沪深300指数交易额预测值与真实值对比沪深300指数交易额LSTM预测值ARIMA预测值实际值2015/6/152,588,3794,355,6964,757,4572015/6/164,153,0694,388,0634,116,7562015/6/174,214,3584,298,7993,971,2422015/6/183,886,3554,413,3173,643,9582015/6/194,167,3794,582,9953,581,047例1和例2的真实值波动比较小例3的数据波动比较大。例1例2是ARIMA更接近真实值例3除了第一天结果LSTM差距较大剩下四天都是LSTM的预测结果更接近。从结果来看当数据波动不大时用ARIMA模型比LSTM要更好。而当数据变化比较大时ARIMA的预测效果就不如LSTM了。个人理解ARIMA原理时滑动平均和自回归所以预测的结果都和历史的平均值比较接近当真实值波动不是很剧烈是用ARIMA预测可能更适用。而神经网络LSTM由于对于过往数据都会存到‘记忆神经’也就是遗忘门输入门输出门中。也就不是只简单看一个平均所以预测可能会激进偏颇一点但是对于原始数据波动比较大时可能效果更好。简单的结论就是原始数据波动不大(例如稳定股票每天价格汇率等)建议用ARIMA模型。原始数据波动较大(例如每天成交额购买额)建议用神经网络预测效果更好。后续记得原来单位的高手用神经网络时先做一个标记把所有假期周末标记出来再训练预测这样的效果肯定比我直接用更好。个人感觉我在ARIMA与LSTM的代码水平需要进一步提升可能结论效果更有说服力下一步要继续努力吧。推荐阅读探索时间序列预测未来《哪吒之魔童降世》异化让人成魔一个公式缓解 你99%的蕉绿