lstm原理及实现_ARIMA时间序列与LSTM神经网络的PK

点击上方“趣味数据周刊”关注公众号 文章期号:201901007 方法对比显优劣

前言时间序列算是我接触的第一个统计学实践项目,也是它把我带进了机器学习的大门。当时的我的工作是根据过往投资和赎回量,每天预估一个需要留的钱,有点类似银行准备金。我本想自己写个代码,无奈能力不足,最后让算法工程师帮我写了一套,每天预测准确率大约90%。回头过了1年多我现在都不会,当时肯定写不出来了。

正好这周末学习统计预测,上课老师讲的是ARIMA模型为主,不过老师也说了目前要更高的准确率推荐神经网络。正好我也查到了神经网络相关代码,尝试做一个ARIMA与神经网络结果比对。同时也是为了十月有一个预测比赛打基础。

一、ARIMA模型

ARIMA模型于1982年提出,是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是"自回归",p为自回归项数;MA为"滑动平均",q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。后面ARIMA模型我是用R语言来实现的。 第一步:安装包 ;主要用到forecast需要下载以便预测。 第二步:下载导入数据 这里以最近两年ICBC的的历史股票行情为例。数据是2017年4月5日至2019年9月20日每天股票最高价。根据以往数据预测9月23日至9月27日ICBC股价(最高价),下载数据可见后文lstm模型开头有下载办法。
#导入下载的数据wxplot(x);
第三步:对差分序列性质进行考察
#对差分序列性质考察plot(diff(x))acf(diff(x))pacf(diff(x))
结果如下图: 7a9353a1a771059f3e22bea1a33bc8c1.png 1c0f601c8a351c9cf028285e4246dece.png 第四步:水平相关信息提取,拟合ARIMA(5,1,2)模型
#这个例子用的ARIMA(5,1,2),也可以用auto.arima来建立模型x.fitx.fit
第五步:残差白噪声检验
for (i in 1:2) print(Box.test(x.fit$residual,lag=6*i))
a17e82292b992087bc85947c55b504fe.png 输出的P值还不错。   第六步:水平预测,并绘制预测图
x.forex.foreplot(x.fore)
3f4f50980ff3929b9670be4318545064.png 这里 Point Forecast 一列就是对未来5天的预测结果。而后面Lo 80、Hi 80组成的区间,意思是有80%的落在区间内。95%同理。 da60f7b7fa548fcab8b93131704b826d.png 可以看到,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的的历史股票行情 b6b8144e744b2369a24cffff23267e84.png 第三步:数据预处理 150875ce569d3823670a95bab8233f24.png 第四步:创建LSTM层和超参数 42fccf68d581511dfdf9efdf9db11bab.png 4111574f08c078715b1c97de13c095a1.png 第五步:万事俱备,可以输出了   9f4fc59fb39809eb9dd498370a6f76e8.png 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.52
2019/9/245.5933955.5391335.52
2019/9/255.5533565.5458865.52
2019/9/265.5278625.5482255.56
2019/9/275.5361095.5430765.58
196efb6cf1d797589959d62750836457.png 2外币对美元日兑换率预测值与真实值对比
外币对美元日兑换率LSTM预测值ARIMA预测值实际值
1998/12/241.7980391.6752391.684
1998/12/251.7218411.6752171.6793
1998/12/261.6964601.6754751.6707
1998/12/271.6925241.6754661.6765
1998/12/281.6903211.6755801.667
332e7bc7dc7cf2a547892a5a52a72cf2.png 3沪深300指数交易额预测值与真实值对比
沪深300指数交易额LSTM预测值ARIMA预测值实际值
2015/6/152,588,3794,355,6964,757,457
2015/6/164,153,0694,388,0634,116,756
2015/6/174,214,3584,298,7993,971,242
2015/6/183,886,3554,413,3173,643,958
2015/6/194,167,3794,582,9953,581,047
e8501017f68e4d2e2249698d8901df34.png 例1和例2的真实值波动比较小,例3的数据波动比较大。 例1例2是ARIMA更接近真实值,例3除了第一天结果LSTM差距较大, 剩下四天都是LSTM的预测结果更接近。 从结果来看,当数据波动不大时,用ARIMA模型比LSTM要更好。而当数据变化比较大时,ARIMA的预测效果就不如LSTM了。 个人理解ARIMA原理时滑动平均和自回归,所以预测的结果都和历史的平均值比较接近,当真实值波动不是很剧烈是,用ARIMA预测可能更适用。 而神经网络LSTM由于对于过往数据都会存到‘记忆神经’,也就是遗忘门,输入门,输出门中。 也就不是只简单看一个平均,所以预测可能会激进偏颇一点,但是对于原始数据波动比较大时,可能效果更好。 简单的结论就是: 原始数据波动不大(例如稳定股票每天价格,汇率等),建议用ARIMA模型。原始数据波动较大(例如每天成交额,购买额),建议用神经网络预测效果更好。 后续: 记得原来单位的高手,用神经网络时先做一个标记,把所有假期,周末标记出来再训练预测,这样的效果肯定比我直接用更好。个人感觉我在ARIMA与LSTM的代码水平需要进一步提升可能结论效果更有说服力,下一步要继续努力吧。 推荐阅读: 探索时间序列,预测未来 《哪吒之魔童降世》:异化让人成魔 一个公式缓解 你99%的蕉绿 49a4339e3ef1b518dd522c02a9d8a758.png
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值