基于LSTM神经网络的短期价格趋势预测①
2021-04-23邓飞燕岑少琪钟凤琪潘家辉
邓飞燕,岑少琪,钟凤琪,潘家辉
(华南师范大学 软件学院,佛山 528225)
1 引言
1.1 研究背景
随着经济全球化的发展,美股市场愈发受到我国投资者的青睐,伴随着金融市场的发展和强烈需求,股票价格趋势预测倍受学术界、业界关注.众所周知,投资股票具有高收益的同时,也伴随着高风险,而影响股市波动的内外因素众多且难以量化,处理海量、繁杂的股票数据工程量大,所以传统的非人工智能的方法在股票价格预测上往往不尽如人意.因此,如何利用大数据技术去发掘股票中隐含的众多有价值的信息,运用LSTM 等神经网络技术进一步解决股票价格趋势预测的问题,具有非常重要的意义.
1.2 研究现状
长短期记忆网络(Long Short-Term Memory,LSTM)在时间序列上具有优异的表现,LSTM 神经网络的时间序列和选择记忆性等特性非常适用于股票价格随机的时间序列预测,可以从大量复杂的股票历史数据中选择性学习有用的隐藏信息,进而辅助决策[1].
1997年,Hochreiter和Schmidhuber[2]通过对无法刻画时间序列长记忆性的RNN 进行改造,提出了LSTM模型.2015年,Chen 等[3]采用LSTM 对中国股市的收益率进行预测.2016年,Jia 等[4]验证了LSTM在预测股票价格走势上具有有效性.
在国内,2016年孙瑞奇[5]使用LSTM 对美股股指进行预测,并与BP 神经网络和传统RNN 模型做对比,证实了LSTM的预测准确度更高,获得了较低的误差均值:0.783%股指.邓凤欣等[6]利用LSTM 模型对美港股票中市值较大的4 支股票进行预测,得出4 支个股价格趋势预测的RMSE 均处于(0,0.1)的区间内,预测结果显著.认为LSTM在美港股市中具有较好的适用性,但从实验结果上看存在着部分的时滞效应,主要是作为一种案例分享而并未进行深入探讨.2019年,方红等[7]提出了一种基于LSTM的改进型股票预测方法,多维输入预测的输出结果为acc=0,lag=12,提高了预测准确度,并改善了预测的滞后性.
根据研究表明,LSTM 神经网络对未来股票的价格趋势有一定的预测能力,但没有关于短期价格趋势预测的研究,比如短期价格趋势预测中日数据、周数据两种不同数据集对LSTM 神经网络的预测效果影响的研究.面对这些问题,基于LSTM 神经网络对周数据与日数据集这两个短期趋势预测效果对比的实证研究具有一定重要的现实意义[8].
2 股票价格趋势预测基本原理与实现
2.1 LSTM 模型结构及原理
LSTM结构采用控制门的机制,由记忆细胞、输入门、输出门、遗忘门组成.LSTM 模型的各个控制门的计算原理如下[9]:
(1)输入门:记忆现在的某些信息.计算输入门it的值和在t时刻输入细胞的候选状态值at:
其中,Wi,Wc代表相应的权重,bi与bc代表相应的偏置.
(2)遗忘门:控制舍去哪些信息.计算在t时刻遗忘门的激活值ft:
其中Wf,bf分别表示遗忘门的权重和偏置,σ表示Sigmoid函数.
(3)细胞状态更新:根据输入门和遗忘门的计算结果,对细胞状态进行更新,从而得出t时刻的细胞状态更新值Ct:
(4)输出门:控制决定哪些信息需要输出.根据计算得到的细胞状态更新值Ct,可以得到输出门的计算公式:
其中,W0和b0代表输出门的权重和偏置,ht为当前单元的输出值.
2.2 LSTM 股票价格趋势预测模型搭建
在Windows 操作系统下搭建CPU 版本的Keras 框架.Keras 框架具有模块化、简单、易扩展等优点.因此,实验采用Keras 进行模型搭建.其模型训练步骤如下:
(1)数据预处理:为避免乱序,需进行排序,获得规整的股票数据集.
(2)数据降噪:因市场动态非常复杂,这些数据含有不经常的噪声,所以采用Python中的Pywt 库进行小波变换去除数据噪声,图1和图2是AAON 股票小波变换前后对比图.
图1 小波变换前
图2 小波变换三层分解后
(3)数据归一化:由于收盘价和交易量等参数同时作为特征值输入,取值范围相差较大,需避免数值过大的交易量对预测结果的影响过大,需要进行归一化处理,将数据的范围处理并控制在0 到1 之间,数据归一化的公式如下:
其中,x和y为转换前与转换后的值,MaxValue是样本的最大值,MinValue是样本的最小值.
(4)数据分类:开始训练前,将数据集划分为训练集和测试集,训练集占85%,测试集占15%.
(5)训练模型:选取最低价(low)、最高价(high)、收盘价(open)、开盘价(close)以及交易量(volume)作为特征数据输入,配置LSTM 模型的训练参数.配置完毕后,调用模型训练函数.训练完后,将训练好的模型存入saved_models 文件夹中,使用时可直接加载文件夹中保存的模型文件,节省训练模型的时间.
(6)股票预测:采用多序列预测方法进行股票预测,并将预测结果进行存储.
(7)模型评估:采用后述第2.4 章节的模型评估方法,计算评估指标.
(8)参数优化:运用控制变量法,对不同参数选取适当的取值范围,在训练的过程中不断调整参数,直至模型的预测效果最佳.
经过多次调参及优化,使AAON 股票预测准确率从55%提高到69%,其改进前后预测结果如图3、图4所示,得到的最终模型结构及各项参数为:测试窗口序列长度为55,Sequential 模型包括3 层LSTM 层,各层的神经元个数分别为100、100、150,为避免过拟合,增加2 层Dropout 层,Dropout为0.2,输入数据维度为5,加入Dense 层将其维度聚合为1,激活函数为linear,损失函数定为均方差(Mean Squared Error,MSE),优化算法采用Adam,模型采用2个epochs,每个batch的大小为32,得到的最终模型结构及参数设置详情分别如图5、表1、表2所示.
图3 模型改进前预测结果
图4 模型改进后预测结果
图5 基于LSTM的短期价格趋势预测模型层次结构
表1 模型参数设置详情
表2 模型结构及其参数
2.3 股票预测方法
本文搭建的股票价格预测模型采用多序列预测的方式.首先将测试数据初始化为一定序列长度的测试窗口,预测下一个点收盘价;将预测得到的这个点收盘价加入到窗口中,生成相同序列长度的新窗口,循环往复.当窗口中的数据全部由过去预测点组成时停止,再以一个完整窗口长度向前移动,用真实测试数据重置窗口,再重新启动该过程.
相比完全序列预测,多序列预测避免了一直使用过去的错误预测结果进行下一步预测,可以有效提高预测准确率.
2.4 模型评估方法
模型的预测性能评价指标采用准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 值.其计算流程如下:
首先,计算收盘价涨幅,判断涨跌,公式如下:
根据涨幅正负值信息判断股票收盘价涨跌,若涨幅大于0,则为股票上涨并设置标签为1,否则为0.通过这种方法可以实现股价涨跌预测[10].
根据样本的真实结果和模型预测结果,将样本分为TP(样本与模型预测结果均为正类的个数)、FN(样本为正类,预测结果为负类的个数)、FP(样本为负类,预测结果为正类的个数)、TN(样本与模型预测结果均为负类的个数)4 类.
具体计算公式如下:
模型评估的具体流程如图6所示.
图6 模型评估流程图
3 实验和结果
3.1 不同算法对比实验
实验选取1998年1月9日至2019年5月31日的AAON 股票日数据为例进行研究,预测第2日收盘价涨跌趋势.数据特征属性为收盘价、开盘价、最高价、最低价、交易量,对数据进行插值排序、降噪、归一化操作,建立前述LSTM 模型、并与支持向量机(SVM)、随机森林(random forest)模型进行对比实验.股票预测方法选取逐点预测方法.
1998年1月9日至2019年5月31日的AAON股票日数据共计5383 条,其中85% 作为训练数据,15%作为测试数据,LSTM 模型以前述2.2 章节参数设置进行实验.实验结果如表3所示:LSTM 模型各项评估指标均高于SVM、随机森林.可见,本文改进后的LSTM 模型预测效果优于其他模型.
3.2 周数据与日数据预测效果对比实验
(1)实验对象:美国纳斯达克股票市场10 支股票,其代码分别为AAON、ABMD、ACHC、ACHV、ACIW、ACNB、AXAS、EGHT、SRCE、AXDX,数据特征属性为收盘价、开盘价、最高价、最低价、交易量.
(2)数据下载:利用pandas_datareader中的data 程序包下载上述10 支股票的日数据,周数据下载使用Alpha Vantage API key的URL 地址进行爬取.时间范围统一为1998年1月9日至2019年5月31日,得到日数据每支股票的数据总量为5383 条,周数据每支股票数据总量为1117 条.
(3)实验流程:按照数据下载、数据预处理、数据降噪、数据归一化、数据分类、LSTM 模型训练、股票预测、模型评估、记录实验结果这几个步骤完成.
具体实验流程如图7所示.
表3 不同模型评估指标对比表
图7 实验流程图
(4)预测效果对比分析:周数据与日数据均以前述第2.2 节参数设置进行实验,其中85%的数据划分为训练集,剩余15%划分为测试集,按照前述实验流程进行实验,股票预测结果如表4和表5所示.
2019年,谢琪等[11]使用多支指数的日数据进行测试多层LSTM 神经网络的预测性能,实验结果显示平均准确率为47.33%,平均精确率为49.83%,平均召回率为63.5%,平均F1 值为55.5%.与本实验相比,其采用的是指数日数据集进行预测,但预测效果表现不佳.通过表6和图8可发现,与日数据相比,周数据的各项指标均高于日数据,其中日数据的平均准确率为52.8%,而周数据的平均准确率为58%,实证说明在短期价格趋势预测中,与日数据相比,周数据的预测效果表现更优,使用周数据训练LSTM 模型,股票预测准确率有望进一步提高[10].
表4 周数据预测结果表
表5 日数据预测结果表
表6 周数据与日数据评估指标对比表
图8 周数据与日数据评估指标对比图
4 总结
本文在LSTM 模型的基础上进行了模型结构改进及参数优化,使得模型预测准确率提升10%以上,预测效果表现优于SVM、随机森林.同时本文还随机选取了10 支美股数据,进行了短期价格趋势预测中的周数据与日数据对LSTM 模型预测效果对比实证研究,研究结果表明周数据预测效果更佳.对比其他文献研究,大部分研究者使用日数据或者更高频的数据,而较少使用周数据对股票进行预测.
在本次股票价格趋势预测模型上,不同的股票数据会对预测效果产生不同影响,因此数据集的选择也非常重要.根据本实验结果,说明周数据更适合用于股票预测.下一步的工作:本文只从收盘价、开盘价、最高价、最低价、交易量5个特征数据进行股票预测,股票预测的特征数据还可以增加其他数据,比如股市资金情绪特征、技术指标等,使用更多的特征数据进行股票预测,有望进一步提高股票预测的准确率.