LSTM神经网络在股票价格趋势预测中的应用
——基于美港股票市场个股数据的研究
2018-08-16
一、前言
截至2017年年底,全球股市总市值逼近百万亿美元,世界上市公司总数超过4万家[1],全球股票市场达到空前规模,其波动对全球经济的影响是重大而深远的。虽然丰富的历史股票信息为广大投资者和分析者提供了数据资源,但是单单依靠分析者的个人经验和直觉进行分析与判断,显然不可靠且低效,因此人们需要一个智能、科学且高效的研究方法来帮助指导股票交易。由于金融时间序列具有非平稳性、非线性、高噪声的特点,传统的统计学模型难以对其作出较高精度的预测。 而神经网络机器学习算法以其良好的非线性逼近能力和自学自适应等特点,成为目前比较流行的预测手段。其中,LSTM神经网络作为一种新型可实现的递归神经网络模型,其具备选择性记忆性以及时序内部影响的特性极适用于股票价格时间序列这种类随机的非平稳序列。
在过去几年,国外学者对于RNN神经网络以及LSTM 神经网络的运用多为图片识别以及人工智能,国内科学家以及学者们更加倾向研究神经网络与其他统计学和计量经济学数学模型的结合使用,从而优化设计,得到更好的预测结果[2]。对于LSTM神经网络,国内学者也仅在近四五年将其运用在数据挖掘的分类算法上,基于 LSTM 神经网络在这些方面的优异表现,文章旨在探究LSTM神经网络是否可以应用于个股的价格趋势预测。
二、模型原理介绍
LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。LSTM算法最早由 Sepp Hochreiter和Jurgen Schmidhuber于1997年提出,是一种特定形式的RNN(Recurrent neural network,循环神经网络),而RNN是一系列能够处理序列数据的神经网络的总称。本研究使用的LSTM神经网络处理股票序列的流程[2]如图1。
图1 LSTM层的结构
三、实验基本内容
模型假设
文章采用Python语言编程实现LSTM神经网络的训练和预测过程,以TensorFlow作为深度学习框架进行训练,并进行图形拟合和误差评估。
基于实验的严谨性、合理性以及准确性考虑,文章选择香港股票市场和美国股票市场个股作为研究对象。为减少单个个股被庄家控盘或主力做市的可能性以及削弱不同市场的相关影响,文章最终选取的基础研究对象为美港股票市场中单个市场上市且市值较大的个股。
模型构建
模型预测方式为利用前7个成交日的数据预测第8日的收盘价数据。训练的方式主要为取前70%的数据块进行训练,训练完成后再取原数据后30%的数据块进行滑动顺序预测。
模型结构:模型层数划分与时间点一致,且每一层均有输入输出,输入时可根据时序前后逐一输入,隐藏层内的神经元个数与自变量个数完全一致,本实验中为5个自变量(参数),分别是开盘价、最高价、最低价、收盘价与成交量。层与层之间根据时序从前向后影响和从后向前反馈,形成整个隐藏层的自循环。模型网络参数设计如下:(1)时间步数:7;(2)隐藏层数目:10;(3)学习率:0.01;(4)迭代次数:500。
数据获取与处理
(一)数据获取:文章主要研究对象为友邦保险(01299.HK)、长和(00001.HK)、微软(MSFT)以及亚马逊(AMZN)2016年11月2日至2017年11月1日的日K数据。利用Wind数据库Excel插件下载股票的日K数据,时间区间为2016年11月2日至2017年11月1日,股票属性为日期、开盘价、收盘价、最高价、最低价以及日成交量,剔除无效日期的数据,得到包括以上六个属性的CSV文件。为了验证模型的有效性,文章选取了多只股票的历史数据进行实验,实验样本数据示例如下:
表1 友邦保险股票历史样本数据示例
(二)数据归一化处理:在将历史数据带入模型进行训练前,由于数据中几个参数的维度不同,比如成交量与价格之间数量级上的巨大差异,所以需要先对数据进行归一化处理。归一化使得每个参数随梯度下降的步长与其数量级相对应,可提升模型的收敛速度及预测精度。把数据维度控制在0到1之间,归一化函数如下:
Xnew=(Xold-min(X))/(max(X)-min(X))
而为了保证神经网络的输出数据与输入数据数量级相符,对神经网络预测结果的输出也需要进行反归一化处理,公式为:
y(i)=yi(max(xi)-min(xi) )+min(xi)
其中,yi为神经网络输出。
四、实验结果分析
模型的训练效果分析
图2 LSTM神经网络的训练误差变化趋势图
学习率可用来限制神经网络每次更新中权重项修正值的大小。迭代次数是神经网络在训练集上训练同时更新权重项的次数。这两个参数和训练集一起,都是神经网络中预测函数的输入参数。在学习率为0.01的情况下,训练集不断对神经网络进行迭代训练使神经网络的输出误差越来越小,直至误差收敛于一个很小的区间。下图为当学习率为0.01,迭代次数为500,对改进的LSTM神经网络模型分别输入4只不同股票训练数据时训练误差的收敛情况。其中横坐标表示迭代次数,纵坐标表示神经网络训练的误差平方和。
综合比较以上四图的曲线,容易得出,在模型的训练过程中,当学习率为0.01、迭代次数为500时,4只不同股票的训练集数据对模型的训练均使神经网络的预测误差快速收敛于(0,0.1)区间,且收敛的迭代次数均在100次以内。这说明改进的LSTM神经网络使用数据进行训练时能快速收敛,并且误差很小。模型训练时误差在前100次迭代中快速减小说明改进的LSTM神经网络具有快速性,而模型训练后误差稳定在较低水平说明模型具有稳定性。股票市场在多年的发展中累积了大量的历史交易数据,数据维度众多,价格预测难度大,模型的快速性有利于快速分析海量股票数据实现即时预测效果。对股票价格进行预测会很大程度上影响投资者的未来收益,股价预测的准确性对投资者有着重要意义,因而网络模型的稳定性也是模型适用于股价预测的一大特点。
预测结果图形拟合对比分析
模型预测结果拟合成图形如下(如图例所示,蓝色曲线为预测值,红色曲线为真实值,横坐标为时间,纵坐标为股票价格):
图3 LSTM神经网络股票收盘价趋势预测(2017.7.19-2017.11.1)
观察以上四个拟合图的曲线,将预测结果与实际结果进行比较,不难看出:虽然部分仿真输出与真实输出比较存在一定程度的时间滞后性,模型对四只港股价格的仿真输出与真实输出在总体趋势上基本一致。限于所给精度要求和训练样本个数,存在一定预测误差是在所难免的,模型预测结果拟合曲线表明LSTM神经网络对友邦保险、长和、微软以及亚马逊四只美港股票市场个股的价格趋势预测还是比较准确的。
从单只股票的预测价格和真实价格对比来看,微软的预测效果是四个仿真预测实验中最好的,而友邦保险和亚马逊的预测值与真实值的偏差程度较大,预测效果略逊一筹。这说明模型对不同个股的预测效果不同,个股预测效果优劣不仅与股票市场因素有关,也与个股自身因素相关。
模型预测精度分析
文章采用均方根误差(RMSE)对预测结果进行评价。均方根误差也称为标准误差,是观测值与真实值的误差平方根的均值。在实际测量中,观测次数总是有限的,真实值只能用最可信赖(最佳)值来代替,而方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方根误差能够很好地反映出测量的精密度。RMSE计算公式如下,其中Yi为神经网络输出值,Y为真实值。
当对某一个变量进行多次测量时,RMSE反映了测量数据偏离真实值的程度,RMSE越小,表示测量精度越高。下表为模型对4只港股进行预测时的RMSE数据。
表2 模型对个股价格预测的均方根误差对比表
从表2中可以看到,模型预测亚马逊的RMSE为0.051609,较其他3只股票的预测RMSE大,其预测值与真实值拟合图形的分散程度较大,而模型预测微软的RMSE为0.033077,较其他3只股票的预测RMSE小,其预测值与真实值拟合图形的分散程度较小,预测精度最高。模型对友邦保险、长和、微软以及亚马逊4只个股价格趋势预测的RMSE均处于(0,0.1)的区间内,说明模型对于大市值港股价格的预测精度很高,预测结果显著。
五、结论与展望
实验利用LSTM对股票市场预测进行建模,用训练好的模型来进行股票预测,选取代表性个股的股票数据为例,对其进行预测,用实例证明了LSTM神经网络通过学习和训练,能拟合股票数据做出预测,并取得了较好的效果。
然而文章选取的研究数据量有限,研究结果难以代表整个股票市场的预测应用效果。另外,文章只讨论了LSTM神经网络在美港股市中的预测适用性,并未对模型适用性差的情况作出进一步改进。该研究课题还有很大的可研究空间。