基于SARIMA和LSTM组合预测模型
2020-05-15王若舟
丁 锐 李 伟 王若舟
(1.武汉邮电科学研究院 武汉 430074)(2.武汉烽火信息集成技术有限公司 武汉 430074)
1 引言
随着我国经济的飞速增长,人们的生活越来越富裕,投资已经成为一种常态,股票的投资也成为人们关注的一个热点,其中股票价格的走势成为股民们非常关心的问题。股票的走势由于受到许多外界因素的影响,变化呈现出很复杂的趋势,而且股票价格具有随机性、季节性等特点,因此研究出一种准确率比较高的预测模型具有十分重要的现实意义[1]。
SARIMA模型(季节求和自回归移动平均模型)对季节性的数据具有很精确的预测效果,这种线性预测可以很好地预测短期数据,但是随着预测时间的增长精确度也随之降低[2]。LSTM(长短期记忆网络)是递归神经网络中一个优秀的变种,非常适用于处理时间序列相关的问题,但是对于这种季节性波动较大的数据预测结果并不是很好[3~4]。所以本文采用SARIMA和LSTM组合的方式来进行时间序列的分析与预测,采用LSTM神经网络对SARIMA预测的数据进行矫正,得到更加精确的预测结果。
2 相关技术介绍
2.1 SARIMA模型介绍
SARIMA模型是时间序列预测主要方法之一,是主要针对具有季节性或周期性规律变化的时间序列[5]。SARIMA模型是在ARIMA模型的基础上的一种对季节性或周期性数据的演化模型[6]。ARIMA模型是用来对平稳时间序列进行数据预测,所以必须对数据源进行平稳化处理,通过平稳化处理的次数可以得到差分d和D的值,然后通过ACF(自相关函数)和PACF(偏自相关函数)图形来判断模型中的p,q和P,Q的值。p为自回归阶数,q为移动平均阶数,d为差分阶数,P,Q,D分别为季节求和自回归移动平均模型中的自回归、移动平均和差分的值,S为季节周期和循环长度[7~8]。季节求和自回归移动平均模型通用表达式为
SARIMA建模分为几步:1)首先将清理后的数据可视化,通过可视化后的时间序列折线图进行初步的平稳性判断。2)对非平稳的数据进行差分,直到差分后的数据为平稳时间序列,此时差分的次数即为SARIMA模型中d和D的值。3)引入自相关系数和偏自相关系数,使用python将自相关和偏自相关函数可视化,通过可视化的图形是截尾还是拖尾来确定p和P、q和Q的值,如果自相关函数拖尾,偏自相关函数是截尾,通过可视化的阶数确定p和P的值。如果自相关函数是截尾,偏自相关函数是拖尾,通过可视化阶数确定q和Q的值。如果自相关函数和偏自相关函数都是拖尾,通过可视化阶数可以确定p和P、q和Q的值。4)对季节性时间序列数据进行分解,季节分解的主要方法包括平均发和移动平均趋势剔除法,最终来确定S的值。5)得到所有的参数,对估计结果进行校验,使用参数估计对模型进行校验,确定最终模型[9]。
2.2 LSTM神经网络模型介绍
LSTM是一种RNN(循环神经网络)特殊类型,LSTM 由Hochreiter&Schmidhuber(1997)提出,并在近期被Alex Graves进行了改良和推广。LSTM在RNN的基础上加入了3个cell,使得LSTM具有记忆功能,cell包含一个sigmoid神经网络层和一个pointwise乘法操作,sigmoid函数输出0~1之间的数值,描述每个部分有多少量可以通过[10~11]。0代表“不许任何量通过”,1代表“允许任何量通过”。LSTM中的3个cell分别为“遗忘门”、“输入门”和“输出门”。遗忘门是用来决定是否丢弃信息的,sigmoid函数的输出值决定前一个状态的值是否丢弃,表达式为
输入门用来决定是否要保存新的信息,sig⁃moid函数决定什么值需要更新,然后一个tanh函数创建一个新的候选值向量(得到一个在-1与1之间的值)并与sigmoid函数的值相乘,最终会输出我们确定输出的那部分,表达式为
输出门用来决定输出什么值,sigmoid函数将决定哪个部分将输出出去,然后将之前的状态与tanh函数进行处理(得到一个在-1与1之间的值)与sigmoid函数的输出相乘,最终我将输出我们确定输出的那部分,表达式为
LSTM神经网络结构图如图1所示。
3 组合模型的设计
3.1 基于SARIMA-LSTM组合模型设计
整个组合模型主要分为以下几个部分:数据的预处理、SARIMA模型预测、神经网络训练和SARIMA预测数据的矫正。组合模型的设计图如图2所示。
图2 组合模型设计图
3.2 组合模型原理
单独使用SARIMA模型预测的数据只能适用于短期预测,而LSTM模型预测容易受到季节因素的影响,所以提出一种组合模型预测。
本文的设计思路主要是将股票数据先经过SARIMA模型进行初步预测,SARIMA模型预测的数据在短期内准确度比较高,并将一些季节或者周期因素考虑在内,具有一定的预测意义[12]。同时也将同样的股票数据放入LSTM神经网络中,对神经网络进行训练,得到一个训练好的神经网络模型。最后将SARIMA模型预测的数据放入到已经训练好的LSTM神经网络中去,对SARIMA预测的数据进行一个矫正。
4 实验验证
4.1 实验环境介绍
本次实验使用Windows操作系统,使用python编码,IDE使用pycharm2017,其中SARIMA使用arima_model包实现,LSTM则是使用tensorflow包来实现。
4.2 实验数据处理
本文数据来源为sz399001股票收盘的价格,选择2013年1月到2014年2月的数据作为分析数据,因为2013到2014年的股票数据外界影响因素小,包含季节性因素,所以本文选择这两年的数据作为数据源。将2013-01-01到2013-10-30的数据作为测试数据,将2013-11-01到2014-01-18的数据作为预测数据。测试数据用来进行对模型的训练,预测数据则是用来与模型预测的数据进行对比分析,判断模型预测的准确度。
4.3 SARIMA模型对数据的预测
选取sz399001股票中2013年1月到2014年2月的数据作为分析数据,将2013-01-01到2013-10-30的数据作为测试数据,将2013-11-01到2014-01-18的数据作为预测数据,SARIMA模型python预测图如图3所示。
4.4 LSTM神经网络对原始数据进行预测
将之前选取的sz399001的股票数据分为训练集和测试集,使用Google的tensorflow深度学习框架构建LSTM神经网络模型,将训练数据喂入LSTM中,对其进行训练[13-15]。LSTM隐藏层我们选用10个节点,7个输入层,为的是将当天的开盘价、收盘价、最高、最低、成交、变化、总价等因素都计入到预测中,提高预测的准确性。LSTM神经网络py⁃thon预测图如图4所示。
图4 LSTM神经网络预测图
由图4可以看出灰色为预测的股票数据,预测的趋势基本上正确,并且也达到了长期预测的目的。LSTM神经网络训练300次预测丢失率如图5所示。其中丢失率(loss)代表预测数据于实际数据差值的比例。可以看出训练300次神经网络的丢失率已经很低了。
图5 LSTM神经网络300次预测丢失率图
4.5 SARIMA与LATM组合预测
还是选取sz399001股票中2013-01-01到2013-10-30的数据作为训练数据喂入LSTM神经网络中进行训练,但是这次选择SARIMA预测的数据作为测试的输入数据,输出数据还是2013-11-01到2014-01-18的股票数据进行预测,SARIMA-LSTM组合模型python预测图如图6所示。
通过SARIMA-LSTM神经网络数据预测图可以看到,灰线与黑线的重合率越来越高。组合模型训练300次预测丢失率如图7所示。
图6 SARIMA-LSTM组合模型预测图
图7 组合模型300次预测丢失率图
由上图可以看到此次预测的数据比前两次的正确率有了一定的提高,准确率提高了2个百分点。可以看出组合模型的预测相比单个模型的预测具有一定程度的提高。
5 结语
本文通过实验表明SARIMA模型的短期预测准确率比较高,但是随着时间的推移,预测的结果与实际结果偏差较大,所以SARIMA模型不适合做长期预测。LSTM神经网络预测丢失率稳定到0.030,已经可以应用到股票数据的预测中。将SARIMA预测的数据放入到已经训练好的神经网络中进行矫正,预测丢失率稳定在0.012,可以看出组合模型的正确率得到提升,预测也更加准确。虽然SARIMA-LSTM预测提高了一定的准确性,但是实际股票的趋势会受到很多外界的因素影响,如宏观经济因素、政治因素、法律因素等,所以对这种大的宏观因素需要进行进一步的优化。