张倩玉,严冬梅,韩佳彤
天津财经大学 理工学院,天津300222
股票市场是投资市场最重要的组成部分之一。与其他行业相比,股票市场有着更高的投资回报率,同时也存在着更高的风险,股票市场预测一直是投资者密切关注的问题。因此,对股票市场预测方法的研究以及如何减小股票价格预测的误差成为了国内外众多学者的研究热点。目前,常见的股票预测方法包括计量经济学方法和机器学习方法。
计量经济学方法是人们根据统计学理论,应用统计分析模型对股票价格进行预测。常用的模型有自回归滑动平均模型(Autoregressive Moving Average,ARMA)、差分整合移动平均自回归模型(Autoregressive Integrated Moving Average,ARIMA)、广义自回归条件异方差模型(Autoregressive Conditional Heteroskedasticity,GRACH)。吴玉霞等人[1]通过建立ARIMA模型对创业板市场股票价格的变动规律和趋势进行了预测。杨琦等人[2]对数据初步分析并建立了ARMA模型,后通过加入GARCH项来消除模型中的条件异方差性,得到ARMA-GARCH模型对大众公用股票价格进行分析预测。计量经济学模型虽然比较客观,有良好的理论支撑,但其优势体现在处理线性数据上且需要严格的基础假设,而股票价格序列是一种复杂的非线性时间序列,因此使用传统的计量经济模型无法达到最理想的预测效果。
与计量经济模型相比,机器学习方法可直接从数据中挖掘有价值的信息,无需预先制定假设,并且机器学习方法能更好地处理非线性数据,因此被广泛应用于股票价格预测。常用的机器学习方法包括决策树、支持向量机(Support Vector Machine,SVM)、支持向量回归机(Support Vactor Regression,SVR)、神经网络等。其中,神经网络的学习机制使其拥有更强大的学习能力和非线性拟合能力,在股票价格预测领域更具有优势。
神经网络概念的提出要追溯到20世纪40年代,但由于网络自身的局限性,人们对神经网络的研究一度陷入了低潮,直到20世纪80年代玻尔兹曼机和反向传播(Backpropagation,BP)算法[3]的出现解决了多层网络的训练问题,神经网络重新成为了研究热点。随后,国内外众多学者开始利用神经网络进行股票价格预测。White等人[4]将BP神经网络应用于股票价格预测,并使用IBM个股作为实验对象,但由于出现了梯度爆炸现象,使参数陷入局部最小值,因此没有达到预想的预测效果,但作者指出可以通过对网络进行调整以及对优化算法进行改造来提升模型性能。向小东等人[5]提出一种激励函数来加速BP算法的收敛,通过调整参数并结合BP算法对股票价格进行预测。张坤等人[6]使用小波分解将股票价格数据分解为不同的尺度,利用Elman神经网络分别对不同尺度的数据进行预测,最后对各尺度数据的预测结果使用BP神经网络进行合成得到最终预测结果。肖菁等人[7]为避免算法陷入局部最优,基于LM算法建立了三层BP神经网络对股价进行预测,并利用遗传算法优化网络的权重和阈值,提高网络的预测精度。于卓熙等人[8]运用主成分分析法对影响股票价格的指标进行降维,并使用广义回归神经网络对股票价格进行预测,与ARIMA模型相比,该模型得到了更优的预测结果。邓烜堃等人[9]使用了深度自编码器(Deep Autoencoder,DAE)对高维数据进行压缩并结合BP神经网络建立预测模型,实验证明该模型可以有效减少计算开销,并提高了预测精度。
人们通过对网络进行优化一定程度上避免了使参数陷入局部解,通过对输入数据进行降维,减少了训练开销并提高了模型的预测准确率,但传统的神经网络往往泛化能力不强,容易出现过拟合等问题。
近年来,随着大数据技术的不断发展以及计算机运算能力的提升,深度学习技术受到了国内外学者的广泛关注。与传统的神经网络相比,深度学习模型层数更多,特征提取能力更强。以深度神经网络(Deep Neural Networks,DNN)、卷积神经网络(Convolutional Neural Networks,CNN)、循环神经网络(Recurrent Neural Network,RNN)等为代表的深度学习技术,在股票预测领域取得了进展。但由于股票数据的复杂性及其存在的长期依赖问题,使传统的RNN模型的预测性能无法进一步提升,因此长短期记忆网络(Long Short Term Memory Network,LSTM)成为了目前股票预测的主流模型。
Wei等人[10]利用小波变换对股票价格时间序列进行分解,消除噪声干扰,利用堆叠式自动编码器(Stacked Autoencoderm,SAE)提取深层特征,将高级去噪特征输入LSTM预测股票价格。Huang等人[11]以LSTM作为股票预测主体模型,采用贝叶斯优化方法对参数进行动态选择,确定最优单元数,与传统LSTM相比预测准确率提高25%。任君等人[12]从优化网络结构的角度入手,采用正则化方法修改LSTM模型的目标函数,得到泛化能力强的弹性正则化LSTM,并使用该模型预测道琼斯指数价格,得到了较好的预测效果。陈佳等人[13]从特征参数选取角度,对股票的15个参数指标通过先分类后降维的思想筛选出最终的输入参数,并使用LSTM对股票指数价格进行预测,该模型在速度和预测准确性方面都得到了提升。
为了进一步减小股票价格的预测误差,本文引入深度学习中的注意力机制并结合门控循环单元(Gated Recurrent Unit,GRU)神经网络对苹果、亚马逊、百度和贵州茅台四家公司的股票价格及上证指数进行预测,并且应用经验模态分解(Empirical Mode Decomposition,EMD)算法和自适应噪声的完整集成经验模态分解(Complete Ensemble Empirical Mode Decomposition with Adaptive Noise,CEEMDAN)算法对原始股票价格时间序列进行分解,对各分解信号分别进行预测,最后将各分量的预测值相加得到最终预测结果。通过与其他模型进行实验对比,验证模型的有效性。
1.1.1 循环神经网路
RNN被广泛应用于语音识别、语言翻译、时序数据预测等领域。RNN结构如图1所示,在t时刻,xt为网络的输入向量,st为网络隐藏层值,οt为网络的输出向量,U、V、W为网络的权重矩阵。网络中的隐藏层节点相互连接,st的值不仅取决于当前时刻的输入xt,还取决于上一时刻隐藏层的输出st-1。这种结构使得网络在t时刻的输出与t时刻之前的输入相关联,并能从之前的输入中获取到有效信息,因此RNN是一种具有记忆功能的神经网络。
图1 RNN结构图
尽管RNN能够有效地处理时间序列,但由于原始RNN隐藏单元的权重对网络的训练影响较大,导致网络存在梯度消失和梯度爆炸现象,这使得RNN不能很好地解决长距离依赖。为了解决这一问题,Hochreiter和Schmidhuber提出了LSTM神经网络模型[14]。
LSTM神经网络是一种特殊的循环神经网络。与传统RNN相比,LSTM网络的神经元中增加了能够保存长期状态的单元状态(CellState)结构,以及三个对单元状态进行控制的门(Gate)结构,分别是遗忘门(Forget Gate)、输入门(Input Gate)和输出门(Output Gate)。
LSTM神经元的内部结构如图2所示,在t时刻,xt是LSTM单元的输入数据,ht-1是LSTM单元在前一时刻的输出,xt是单元状态的值,ht是LSTM单元在当前时刻的输出。
图2 LSTM神经元结构
1.1.2 GRU神经网络
GRU神经网络[15]由Cho等人于2014年首次提出,是目前LSTM神经网络最成功的变体之一。与LSTM相比,GRU结构更简单,参数更少,而且还能保持着和LSTM相同的效果。
GRU对LSTM做了两个改动:(1)将输入门、遗忘门、输出门变为两个门——更新门(Update Gate)zt和重置门(Reset Gate)rt;(2)将LSTM的单元状态ct与输出合并为一个状态ht,图3为GRU神经元的内部结构。
图3 GRU神经元结构
更新门zt的作用是决定上一时刻隐藏层状态中有多少信息传递到当前时刻隐藏层状态ht中,重置门rt的作用是决定上一时刻隐藏层状态中的信息有多少是需要被遗忘的为当前时刻的隐藏层的候选状态,使用重置门决定当前候选状态中要遗忘多少上一时刻隐藏状态ht-1的内容,ht表示当前时刻隐藏层状态。W为权重矩阵,[ht-1,xt]表示两个向量的连接,σ是激活函数。
GRU单元的计算公式见式(7)~(10):
注意力机制(Attention Mechanism)的灵感来源于对人类视觉注意力机制的研究。当人类的视觉在感知眼前的场景时,由于人的注意力有限,所以不会对场景中的所有物体投入同等的关注度,而是快速捕捉到需要重点关注的区域,对重要区域给予更多的注意力,而忽略其他非重要区域,这一机制使人类能够利用有限的注意力从大量信息中筛选出更高价值的信息,提高了人类在视觉信息处理时的效率和准确率。
结合注意力机制的模型近年来在图像处理、语音识别和自然语言处理等领域被广泛应用。Mnih等人[16]将RNN模型与注意力机制结合来进行图像分类,Bahdanau等人[17]首次将注意力机制应用到机器翻译任务中。
深度学习中的注意力机制和人类的视觉注意力机制类似,它的核心就是从输入的序列中学习每一个输入元素对目标元素的重要程度,即注意力权重,使神经网络可以专注于选定好的对目标任务更有效的输入,在计算资源不足的情况下,将有限的资源分配给更重要的特征。
受启发于Qin等人[18]提出的结合注意力机制的时间序列预测模型,本文对原始输入序列引入注意力机制并结合GRU神经网络对股票价格进行预测。
对于给出的N个长度为T的时间序列,输入矩阵表示输入数据的特征数,T表示设置的时间步长度,xk=表示第k个长度为T的时间序列表示在t时刻输入的长度为N的序列。
目标序列的历史数据表示为(y1,y2,…,yT)T,yi∈R,输入序列的历史数据表示为(x1,x2,…,xT)T,xi∈R,i={1,2,…,T}。结合了注意力机制的GRU神经网络模型的目标就是给定时间步长T,根据输入序列和目标序列历史数据,学习一个从输入序列到目标序列的非线性映射。
根据结合注意力机制的GRU神经网络的思想,针对t时刻而言,根据输入矩阵X=(x1,x2,…,xT)T,学习一个从原始输入序列xt到GRU神经网络隐藏层ht的映射,即:
其中,ht∈Rm表示GRU网络在t时刻的隐藏层的值,m为隐藏节点的个数。
将ht和第k个输入时间序列RT做相应的计算,得到:
信号分解算法在处理非线性、非平稳信号领域具有广泛应用。股票作为一种典型的非线性时序数据,应用EMD、CEEMDAN算法处理原始输入序列S(t)可以有效地捕获到原始价格序列在不同时间尺度上的特征。
2.1.1 EMD算法原理
EMD算法是Huang等人[19]提出的一种自适应信号时频处理方法,与传统的傅里叶变换方法相比,EMD根据数据本身的时间尺度特征对信号进行分解,通过自适应得到基函数,无需预先设定。
EMD将原始信号分解为有限个本征模函数(Intrinsic Mode Function,IMF),每个IMF分量表示原始信号在不同时间尺度上的不同特征。IMF可以是线性函数也可以是非线性函数,每个分解得到的IMF需满足以下两个条件:IMF函数在其定义域中,极值点的个数与零点个数相差不能超过1;由IMF的局部极大值定义的包络函数和由IMF的局部极小值定义的包络函数的和恒为0。
EMD算法的具体步骤如下:
步骤1找出原数据序列S(t)的极大值和极小值点。
步骤2通过三次样条插值过程对上包络线U(t)和下包络线L(t)的极值点进行拟合。
图4 结合注意力机制的GRU模型
步骤3根据m(t)=(U(t)+L(t))/2计算上包络和下包络的平均值m(t)。
步骤4从原始序列S(t)中减去m(t),得到一个新的序列h(t)=S(t)-m(t)。
步骤5重复步骤1到步骤4,以h(t)作为新的输入序列,直到h(t)的均值接近于零为止,得到第i个IMF,表示为Ci(t)。
步骤6将Ci(t)与原始序列S(t)分离,得到一个不含高频分量的差分序列rI(t)=S(t)-Ci(t)。
步骤7重复步骤1至步骤6,以rI(t)作为新的输入序列,直到满足终止条件。
通过上述步骤,筛选出一组IMF,记作Ci(t)=(i=1,2,…,N)。根据式(15),原始信号S(t)由这组IMF重构得到。
其中,RN(t)为残差,代表时间序列的趋势。
2.1.2 CEEMDAN算法原理
通常情况下,EMD算法在处理非平稳和非线性信号方面有很大的优势,但仍然存在“模式混合”问题。模式混合是指在不同的模式中存在相似的振荡,或在一个模式中存在明显不同的振幅。通过向信号中添加高斯白噪声,集成经验模态分解(Ensemble Empirical Mode Decomposition,EEMD)算法[20]在一定程度上消除了EMD算法中存在的模式混合问题。但是,EEMD算法不能完全消除信号重构后由于高斯白噪声造成的重构误差。
为了解决这个问题,提出了CEEMDAN算法[21]作为EEMD的改进版本。定义运算符Ej(⋅)表示由EMD生成的第j个模式,设ωi(t)是正态分布N(0,1)的白噪声。CEEMDAN算法的具体步骤如下:
步骤1用EMD分解每个Si(t)=S(t)+ε0ωi(t),提取第一个IMF,其中ε0是噪声系数,i=1,2,…,I;并将第一种模式定义为
步骤2计算第一残差
步骤3分解残差r1(t)+ε1E1(ωi(t))获得第二种模式:
步骤4重复上述步骤得到另一个IMF,直到得到最终的残差,最终的残差可以表示为:
其中,M为IMFS的总数。IMFS共同构成了原始信号在不同时间尺度上的特征,残差代表了原始序列的趋势。
为了进一步提高股票预测模型的性能,提出了基于EMD和CEEMDAN的股票市场预测模型(EMD-aGRU、CEEMDAN-aGRU)。该模型包含两个部分,第一部分是通过EMD和CEEMDAN算法,将原始股票价格序列分解为多个IMF序列和残差序列,第二部分应用了结合注意力机制的GRU模型(aGRU),将分解后得到的各个序列作为aGRU网络模型的输入数据进行训练预测。实现步骤如图5所示。
图5 股市预测流程模型
步骤1利用EMD和CEEMDAN将原始股票价格序列S(t)分解为多个IMF序列Ci(t)(i=1,2,…,M)和残差RM(t)。
步骤2将所获得的IMF和残差作为aGRU预测模型的输入数据进行训练得到各IMF的预测结果。测试集的预测结果分别表示为
步骤3根据式(17)对每个IMF和残差的预测结果进行重构,得到最终的预测价格序列。
其中,L是测试集的长度是每个IMF的预测序列序列,S是残差的预测˜(t)表示测试集的最终预测结果。
2.3.1 数据来源及预处理
本文选取的股票和股指数据(下载自Yahoo财经),包含每天的开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、交易量(Volume)和调整后的收盘价(Adj Close),其中将调整后的收盘价作为目标变量。
由于将股票的价格数据和交易量数据同时作为输入的特征参数,而两者的数值差异巨大,为了消除指标间的量纲影响,提升模型精度和收敛速度,本文对数据进行了归一化处理。
将处理后的数据按顺序分成训练集和测试集,其中前80%的数据作为训练集用来训练模型,后20%的数据作为测试集对模型预测效果进行评估。
2.3.2模型构建与参数设置
本文实验模型在Python 3.7中的Keras框架下搭建并完成计算过程,Keras版本为2.2.4,采用Keras中的Sequential模型结构,将一层GRU层与一层Dense层相结合建立预测模型。在模型参数设置方面,通过进行多次实验最终确定实验模型的神经元个数为128,批处理大小(batch_size)为128,迭代次数(epoch)为500,损失函数(loss)设置为平均绝对误差损失函数(mae),优化器(optimizer)为adam,参考文献[18],将时间步长T设置为10。
2.3.3 评价指标
为了评估CEEMDAN-aGRU模型对股票价格的预测性能,本文采用均方根误差(RMSE)、平均绝对误差(MAE)和R-平方(R2)三种回归评价指标来量化模型性能,三种指标计算如公式(18)~(20)所示:
其中,yi为真实值,yi为预测值,yˉ为真实值的均值,m为样本数。RMSE和MAE用来度量真实值与预测值间的偏差,其值越小表明预测值越接近真实值,R2用来度量模型拟合程度,越接近1表明模型拟合越好。
2.3.4 股票时间序列的EMD和CEEMDAN
将股票的原始价格序列通过EMD和CEEMDAN算法分解成若干个IMF序列和一个残差序列,根据实验结果显示,CEEMDAN生成的IMF的数量往往小于EMD算法生成的IMF的数量,为了更直观地比较两种算法的分解效果,实验限制了EMD生成的IMF数量与CEEMDAN相同。图6(a)和(b)展示了亚马逊公司股票收盘价序列的分解结果。
每个IMF从高频到低频排列,前几个IMF代表原始序列中的高频分量,可以看出EMD算法的分解结果存在“模式混合”现象,而通过CEEMDAN算法进行分解这一问题有了明显的改善,所得到的IMF有了明显的频差。
2.3.5 股票价格预测
将本文提出的CEEMDAN-aGRU模型应用于苹果(AAPL)、亚马逊(AMZN)、百度(BIDU)和贵州茅台(600519)四家公司的股票价格预测中,数据集所选时间范围均为2009年1月1日至2018年12月31日,每只股票包含2 517条股价数据。图7(a)、(b)、(c)、(d)分别为模型对苹果、亚马逊、百度和贵州茅台四只股票的预测结果。
图6 亚马逊公司股票收盘价序列分解结果
为了验证本文模型的性能,将CEEMDAN-aGRU模型与RNN、LSTM神经网络、GRU神经网络、结合注意力机制的LSTM网络(aLSTM)、aGRU模型和EMDaGRU模型进行了对比实验,观察不同模型对四只股票数据集的预测效果。为了消除一次实验带来的结果偶然性,对每个模型在不同数据集上分别进行10次实验,取多次结果的平均值,得到最终的实验结果,实验结果如表1所示。
由表1可知,EMD-aGRU和CEEMDAN-aGRU模型在四只个股数据集上实验得到的RMSE和MAE均小于其他模型,R2更接近1,说明与其他模型相比,EMDaGRU模型和CEEMDAN-aGRU模型预测的股票价格更接近真实值,模型拟合更好。证明针对股票价格预测问题,使用分解算法对原始序列进行分解后再进行预测,可以有效提升模型预测性能。其中,CEEMDANaGRU模型对股票的预测误差小于EMD-aGRU模型,这是由于CEEMDAN从原始数据中提取了更有效的特征,因此预测误差较小。
图7 CEEMDAN-aGRU模型对四只股票测试集预测结果
表1 不同模型在四只股票测试集的预测性能
图8 (a)、(b)、(c)、(d)分别展示了aGRU模型和CEEMDAN-aGRU模型对苹果、亚马逊、百度和贵州茅台四只股票前50天的预测结果。可以看出,与aGRU模型相比,CEEMDAN-aGRU模型的预测结果更接近股票价格的真实值,误差更小。
2.3.6 股票指数预测
2018年Zhou等人[22]提出了EMD2FNN模型,该模型应用EMD算法与FNN模型对股票指数进行了预测。为了进一步验证CEEMDAN-aGRU模型的预测性能,将CEEMDAN-aGRU模型与EMD2FNN模型进行实验对比。本节实验选择上海证券交易所综合指数(SSEC)作为实验数据,根据文献[22]将数据集时间范围选取为2012年1月4日至2016年1月30日,共1 214个交易日,实验结果如表2所示,本文提出的CEEMDAN-aGRU模型在各项指标上均优于EMD2FNN模型。图9展示了CEEMDAN-aGRU模型对SSEC测试集的预测结果,图10展示了aGRU模型和CEEMDAN-aGRU模型对SSEC测试集前50天的预测结果。
本文首先提出了结合注意力机制的GRU神经网络模型,即通过使用注意力机制对输入特征参数进行加权,使网络聚焦于更重要的输入特征,将加权后的参数作为新的输入,并使用GRU神经网络作为预测主体模型。后引入EMD和CEEMDAN算法来减小股票价格序列的非平稳性、非线性对预测结果的影响。实验对苹果等四家公司的股票价格和上证指数进行预测。结果表明:与其他网络模型相比,本文提出的CEEMDANaGRU模型预测效果更好,模型拟合程度更高,证明了应用信号分解算法能进一步提升模型的预测性能,减小预测误差。目前存在的问题是模型选择的输入特征参数较为单一,后期可以考虑增加模型的训练特征,从特征选取的角度进一步提升模型的预测性能。
图8 aGRU和CEEMDAN-aGRU模型对四只股票前50天的预测结果
图9 SSEC测试集预测结果
表2 不同模型在SSEC测试集的预测性能
图10 SSEC测试集前50天预测结果