基于CNN-BiLSTM和注意力机制的股票预测*
2021-03-20徐庆娟
蒙 懿 ,徐庆娟
(南宁师范大学 数学与统计学院,广西 南宁 530100)
1 引言
股市受经济、政策、投资心理、交易技术等多方面因素的影响,具有很大的不确定性,是一个复杂的非线性系统.如何科学地预测股票价格,一直备受投资者、业界学者的关注.股票市场中随机因素较多,仅仅依靠传统的统计学方法预测是远远不够的[1].随着人工智能算法的快速发展,深度学习[2~6]被广泛应用于自然语言处理、图像处理、语音识别等多个领域,近年来被成功应用于金融市场.
长短期记忆神经网络[2](Long-Short Term Memory,LSTM)使用输入门、输出门和遗忘门来控制信息,在其他单元状态中存储长期信息,具有长时记忆功能,在处理复杂的金融时序数据中展现出了优越的性能.2017年,Hansson基于标准普尔500指数、巴西Bovespa50指数和OMX斯德哥尔摩30指数的收益率数据,利用LSTM、ARMA、GARCH模型进行预测并比较,结果发现LSTM模型表现最为出色[3].传统LSTM的单向传播可能会导致上下文信息的遗漏,为避免此不足,双向长短期记忆神经网络[4]( Bi-directional LSTM,BiLSTM)对传统LSTM神经网络进行了扩展,提高了金融较长时序回归问题模型的性能.
卷积神经网络[5](Convolutional Neural Network,CNN) 是一种包含卷积计算且具有深度结构的前馈神经网络,可通过滑动窗口提取对目标有用的局部信息,已被成功应用于股票预测.2018年,Sheng等将开盘价、最高价、最低价、收盘价和成交量作为模型输入,利用CNN神经网对股票收盘价进行了有效预测[6].
为了借鉴上述深度学习算法处理非线性、高噪声、波动性强的金融时序问题的优点,很多学者将其组合对股价进行预测.其中,王婷[7]等充分利用深度学习算法的优势,将LSTM神经网络与CNN相耦合对股票趋势进行预测.罗鑫[8]等运用CNN对沪深300指数进行特征提取,利用LSTM对其涨跌方向进行预测,提出了多时间尺度 CNN-LSTM 模型,实证结果表明该组合模型可提高预测效果.
随着深度学习算法在金融市场的应用,注意力(Attention)机制[9]越来越受到学者们的关注.该机制能够快速扫描信息获得目标区域,并对目标区域投入更多注意力,抑制其他无用信息,目前已被应用于网络安全、文本处理、股票预测等多类深度学习任务中[10~14].其中,舒豪[11]等基于BiLSTM和注意力机制提出一种网络入侵检测方法,利用前者进行长距离依赖特征提取,引入后者加强对重要特征的赋权,实证表明该组合方法提高了入侵检测的准确率.乔若羽[12]基于多个神经网络模型如LSTM,引入注意力机制,给各时间维度的信息赋权区分其重要程度,构建了多个股票市场神经网络预测模型.谷丽琼[13]等基于LSTM和GRU构建股票预测模型,并引入Attention机制,捕捉关键时间点的股票特征信息,实证结果显示加入Attention机制能够提高预测效果.
CNN主要基于共享卷积核的结构,保留邻域的联系和空间的局部特点进行局部特征提取.BiLSTM能够对过去的上下文信息访问学习,可以捕获未来很多可用信息.为了充分融合它们的优势,进一步发挥注意力机制根据目标信息的重要程度进行特征权重分配的能力,本文尝试构建一种基于CNN、BiLSTM和注意力机制的股票预测模型,旨在对复杂、多特征的股票数据先进行局部特征信息的提取,再进行上下文信息的学习,然后利用注意力机制对重要特征分配权重,以提高股票预测的精度.
2 基于CNN-BiLSTM和注意力机制的股票预测模型
本文主要针对多个特征且时序长的股票数据,利用神经网络的不同模块功能,构建基于CNN-BiLSTM和注意力机制的股票预测模型,其构架见图1,主要包括三个模块:一是CNN模块,模型中设置了不同数量的卷积层(Convolutional layer)和池化层(Pooling layer),目的是对输入的信息进行充分提取,过滤冗余的信息;二是BiLSTM模块,对CNN传来的信息进行有选择的全局学习,能解决LSTM单向运行而导致数据信息利用不充分的问题;三是注意力机制模块,可快速找到重点关注的信息特点,对CNN-BiLSTM模型传来的信息分配权重,从而提升模型的预测精度.需要指出的是,在CNN和BiLSTM之间加入dropout层,目的是防止训练过拟合,加快模型的训练速度并提升模型的实用性.
图1 基于CNN-BiLSTM和注意力机制的股票预测模型
2.1 基于CNN提取股票局部特征信息
本文利用CNN对股票数据进行局部信息提取,模型结构包括卷积层的提取模块和池化层的采样模块,如图2所示.
图2 CNN模型结构图
a) 卷积提取.由于CNN能够捕获数据的局部特征信息,因此可基于多特征的股票行情数据来捕获对目标重要的局部特征.假设模型输入是s个n×m维的股票数据,由x1,x2,…,xs组成,其中xs∈Rn×m,n为时间步数,m为股票数据特征个数,股票的日开盘价、收盘价、最高价、最低价、交易量、交易额等可视为数据特征.通过设置好的卷积核大小对多特征的股票数据进行特征提取,网络运行公式如下:
pi=f(ω×xi:i+g-1+c),
其中,f为激活函数,ω为卷积核,g为卷积核尺寸,xi:i+g-1是xs中i到i+g-1天的股票数据组成的矩阵,c为偏置项.经过卷积层计算后,得到特征矩阵P=[p1,p2,…,pn-g+1].
b) 池化采样.卷积层提取信息后,池化层对卷积层传来的特征矩阵P进行采样,求其局部最优解. 池化层中采用MaxPooling技术(其式为xi=max(p1,p2,…,pn-g+1)=max(P))得到局部最优解xi,作为BiLSTM的输入.
2.2 基于BiLSTM捕捉股票数据的上下文信息
ft=sigma(Wf·[ht-1,xt]+bt) ,
it=sigma(Wi·[ht-1,xt]+bi) ,
ot=sigma(Wo·[ht-1,xt]+bo) ,
ht=ot×tanh(Ct),
其中,Wf、Wi、Wc、Wo为权值矩阵,bt、bi、bc、bo为其偏置向量,sigma采用sigmoid函数,tanh为双曲正切函数,Ct为更新时刻的细胞状态.
图3 BiLSTM模型结构图
2.3 引入注意力机制对股票特征分配权重
注意力机制可对BiLSTM模型传来的特征信息进行权重分配,其结构见图4.若ht是双向LSTM输出的细胞隐藏状态,则通过注意力机制捕捉目标的注意力权重为
vt=aTtanh(ω×ht+bv),
其中,aT和ω为学习权值,bv为偏置项.将注意力权重进行概率化,用softmax函数计算概率向量Pt:
将注意力权重分配给相应的隐藏状态ht,加权求和可得到Attention值,公式如下:
图4 注意力机制
3 实证分析
3.1 数据来源与处理
本文以2010年1月1日到2020年12月31日浦发银行(sh.600000)股票行情数据为研究对象,选取开盘价、收盘价、最高价、成交量等13个基本指标进行实验,如表1所示.数据共计2627条,按时间排序,取其前70%的数据作为训练集,后30%作为测试集.
表1 实验指标
本文采用时间滑动窗口将股票数据划分为模型的输入和输出,以前n日的股票行情信息构成的序列样本作为模型的输入,n+1日的收盘价序列样本作为模型的输出,对模型进行训练.训练前,首先采用Max-Min标准化方法将数据归一化,其公式为
其中,xi,j为股票中第i个指标的数据中第j天的数据,maxxi,j和minxi,j分别为第i个指标的数据中最大和最小的数据.训练后,将模型结果进行反归一化,最后对预测结果进行误差分析.
3.2 实验流程
本文实验主要由数据预处理、实验设置、训练模型、微调模型参数、模型预测、模型比较几个框架构成,具体流程如图5所示.
图5 实验流程图
3.3 参数设置及评价指标
实验编程环境为Python 3.6,利用keras库进行实验,配置处理器:intel(R)Core(TM)i7,内存(RAM):16G,系统类型:基于x64的处理器.模型训练过程中的参数设置:在CNN模型卷积层中,滤波器窗口大小分别设为16和64,见图2.为了提高模型的优化性能,让神经网络在学习中寻找到合适的参数,使得损失函数尽可能地小,优化器选择了Adam.为了更快更准确地找到极值方向,降低内存,提高训练速度,将batch_size设置为256.设置BiLSTM的神经元个数为128,学习率为0.001.在CNN和BiLSTM中激活函数使用relu函数,其优点是计算量小且速度快,同时能克服梯度爆炸等问题.为了使预测结果更接近真实值,选取了均方误差(mean_squared_error)作为损失函数,同时在模型中加入了Dropout层,防止过拟合,提高模型的泛化性能.这里Dropout设置为0.2.
为了验证模型的有效性和科学性,本文选取了平均绝对误差(MAE),均方误差(MSE),拟合优度R2作为模型的评价指标,公式如下:
3.4 不同设置下的预测结果
利用CNN处理复杂的股票数据时,卷积层和池化层的个数选取非常重要,会对模型结果产生较大的影响.如果卷积层和池化层选择个数过少,可能会导致关键的局部信息提取不充分,使得模型预测值偏离实际值;反之,如果选择个数过多,可能会导致运行时间较长,一些无效信息被提取出来,同样会影响模型的预测效果.鉴于此,本文实验设置(卷积层数,池化层数)为(1,1)和(4,2).
另一方面,BiLSTM模型对时间滑动窗口的大小要求也比较高.如果时间窗口太小,一些关键的信息可能提取不到,容易导致模型拟合效果差,起不到应有的作用.反之,如果时间窗口太大,则模型输入的信息过多,会导致模型训练的时间过长.股票行情受许多随机因素影响,比如突发的政策、企业之间的联动、投资人的心理等,因此,选择适当的滑动窗口大小,会提高模型的预测效果.本文实验中时间滑动窗口大小分别设置为5、10、15和20天,将其预测结果进行比较,进而选择合适的时间滑动窗口.
3.4.1卷积层和池化层为(1,1)时不同时间窗口的预测结果
图6给出了卷积层和池化层为(1,1)时不同时间窗口的预测结果.从图6可以看出,随着时间窗口的增大,预测值偏离真实值的情况逐渐明显,其平均绝对误差(MAE)和均方误差(MSE)逐渐增大,从窗口大小为5的MAE=0.171 9和MSE=0.054 1,变化到窗口大小为20的MAE=0.225 6和MSE=0.086 0,MAE增加了31%,MSE增加了58%,模型拟合的效果明显降低,因此,时间窗口大小为20时预测效果并不理想,时间窗口大小为5的预测结果令人满意.
MAE=0.1719,MSE=0.0541 (1,1) 窗口大小=5
3.4.2卷积层和池化层为(4,2)时不同时间窗口的预测结果
从图7中卷积层和池化层为(4,2)时不同时间窗口的模型预测结果可知,模型在窗口大小为5的时候,MAE和MSE最小,预测效果最佳.随着时间窗口个数的增加,模型的MAE和MSE先变大后变小最后又逐渐增大.篇幅所限,图7只展示了窗口大小到20的模型预测曲线图.比较图6和图7的预测结果,可知卷积层和池化层数(4,2)预测效果更好一些.综合考虑浦发银行股票的各种影响因素,本文模型的卷积层和池化层数选择(4,2),滑动时间窗口大小选择5天,即利用前5天的股票信息去预测第6天的收盘价.
MAE=0.1666,MSE=0.0503 (4,2) 窗口大小=5
3.5 模型结果与比较
为了验证本文基于CNN-BiLSTM和注意力机制的组合模型在预测多特征、时序长股票数据的有效性,将本文测试集的预测结果与CNN模型、LSTM模型、BiLSTM模型、CNN-LSTM模型、CNN-BiLSTM模型进行比较,预测曲线如图8所示.
(a) CNN
对比图8的(a)、(b)和(c)可以看出,利用CNN、LSTM、BiLSTM三个单一模型预测浦发银行股票收盘价,拟合效果越来越好.这也在一定程度上说明了BiLSTM相对CNN和LSTM来说,模型性能更好.对比单一模型的曲线图(a)、(b)和(c)和组合模型的曲线图(d)、(e)和(f)的预测结果,可见,组合模型的拟合效果比单一模型的好.
由表2可知,组合模型的平均绝对误差(MAE)、均方误差(MSE)均比单一的模型要低,R2值比单一模型的高,拟合效果比单一模型要好.对比CNN-LSTM、CNN-BiLSTM和CNN-BiLSTM-Attention三个组合模型的综合表现,可知引入注意力机制的CNN-BiLSTM比其它两个组合模型表现出更优越的性能,其MAE仅为0.166 6,MSE为0.050 3,在表2的6个模型中最低,R2值为0.955 0,拟合效果非常好,充分说明了本文基于CNN-BiLSTM和注意力机制的股票预测模型的有效性.
表2 几种模型的综合表现
对比表2中几种模型的算法总用时可知,单一模型CNN用时最短,仅为0.015 4秒,这可能由于其结构简单,采用的是一维(1D)卷积.不同于图像处理(二维卷积(2D)),它能快速提取股票中对目标有用的信息,进行简单的局部信息提取.BiLSTM比LSTM多了一步反向传播,导致用时有所增加.而CNN-BiLSTM组合模型预测时间比单一的BiLSTM模型要少,主要原因可能是,经过CNN进行局部特征信息提取后,减少了一些冗余的信息.本文构建的CNN-BiLSTM-Attention模型虽然用时最长,但没超过0.05秒,表现令人满意.表2最后一行给出了几种模型预测涨跌趋势准确率,比较之下,本文构建的CNN-BiLSTM-Attention股票预测模型的准确率明显高于其他几种模型.
4 结论
本文融合CNN和BiLSTM模型的优点,引入注意力(Attention)机制,构造基于CNN-BiLSTM和注意力机制的股票预测模型.以2010年1月1日到2020年12月31日浦发银行股票行情数据的日开盘价、收盘价、最高价、成交量等13个基本指标数据为研究对象,利用时间滑动窗口设置模型输入输出.与CNN、LSTM、BiLSTM、CNN-LSTM、CNN-BiLSTM模型预测结果进行比较,本文模型表现出更优越的性能.