党建武,从筱卿
江西财经大学 软件与物联网工程学院,南昌330013
预测股指的方法主要包括基本面分析法、计量经济学法[1-2]、机器学习法[3-4]等。其中,机器学习法之一的神经网络算法凭借其良好的非线性处理能力得到了广泛应用。黄宏运等人[5]利用遗传算法优化反向传播(Back Propagation,BP)神经网络的初始权阈值,解决了BP神经网络在股指预测过程中容易陷入局部最小值、收敛速度慢等问题。潘和平等人[6]提出了一种由经验模态分解、主成分分析和前馈神经网络三部分组成的预测模型,该模型能有效提高股指预测的准确率。随着深度学习的发展,众多学者尝试将其应用到股指预测研究中。Luca等人[7]提出了一种小波和CNN相结合的模型,其对标准普尔500(Standard & Poor’s 500)指数的预测性能优于基本的神经网络方法。Li等人[8]提出了一种融合内在可塑性和深度信念网络的新方法,并对S&P 500指数进行了预测,该方法具有较好的预测性能。Qin等人[9]提出了一种基于双阶段注意力的循环神经网络(Recurrent Neural Network,RNN)模型,该模型能够自适应地提取股指相关输入特征进行预测。Fischer等人[10]将LSTM神经网络应用于S&P 500指数的预测,LSTM预测性能优于随机森林、逻辑回归分类器和深度神经网络。陈佳等人[11]提出了基于特征选取和LSTM神经网络的模型,该方法提升了股指预测的速度和准确率。
针对股指数据大规模、非线性等特点,本文研究了一种结合CNN和GRU神经网络的混合模型对股指进行单步预测。一方面,利用CNN强大的特征提取能力,挖掘股指数据之间的内在联系,从而降低原始数据的规模和复杂度;另一方面,通过GRU神经网络的时序记忆能力,学习股指数据内部动态变化规律,建立输入与输出之间的非线性关系。在本文的后半部分,为了验证算法的有效性和普适性,借鉴统计试验法的思想对构建的模型进行了多次运行仿真。仿真结果表明,本文设计的股指预测模型具有较高的预测准确率,且具备一定的普遍适用性。
CNN和GRU网络是深度学习中两种常见的网络。与浅层学习相比,深度学习能够实现数据的逐层转换,保证了最有效的特征表达和信息提取。
CNN[12]是一个具有深度结构的前馈神经网络,其基本结构如图1所示[13]。
图1 CNN结构图Fig.1 Structure diagram of CNN
CNN对输入数据进行逐层卷积和池化操作。卷积层是CNN的核心,它利用局部连接和权值共享对输入进行卷积操作,提取数据的深层特征。卷积过程可以用以下公式表示:
其中,C为卷积层的输出特征图;X为输入数据;f()⋅为非线性激活函数;⊗为卷积操作;W为卷积核的权重向量,b为偏置项。
池化层通过一定的池化规则对卷积层的输出执行池化操作,保留主要特征,同时减少参数数目和计算量,防止过拟合。池化过程可以用以下公式表示:
其中,P表示池化层的输出特征图;pool()⋅表示池化规则,如平均池化、最大池化等。
CNN的特点是能够提取数据中的隐藏特征,并将其逐层结合,生成抽象的高层特征。然而,CNN不具备记忆功能,缺乏对时序数据时间相关性的考虑。
RNN在学习长期依赖关系时存在梯度消失和爆炸等常见问题[14]。为了解决这一问题,Hochreiter等人[15]提出了LSTM神经网络,其引入了3个“选通单元”:输入门、遗忘门和输出门。Cho等人[16]将LSTM神经网络的输入门和遗忘门合并为更新门,构建了更易于计算和实现的GRU神经网络。GRU神经网络的结构如图2所示。
图2 GRU神经网络的体系结构Fig.2 Architecture of GRU neural network
GRU神经网络有两个选通单元,分别称为“复位门”rt和“更新门”zt。rt用于控制前一时刻的状态ht-1对候选状态h͂t的影响程度,zt用于决定ht-1中有多少信息可以传递到当前状态ht中。GRU神经网络的更新方式如下:
其中,σ(⋅)是sigmoid函数;tanh(⋅)是双曲正切函数;it是t时刻的输入,yt是t时刻的输出;Wir、Wiz和Wih是输入—状态权重矩阵,Whr、Whz和Whh是状态—状态权重矩阵;br、bz、bh是偏置量;⊙是元素乘法。
GRU神经网络是一种时间递归神经网络,能够充分反映时间序列数据的长期历史过程。GRU神经网络在处理后续输入数据时,可以将先前输入所携带的信息保存在网络中。
衡量股指的指标众多,且这些指标均属于非线性的时间序列数据。传统方法提取高维数据潜在特征的能力有限,同时缺乏对时序数据时间相关性的考虑,从而影响预测结果。而CNN凭借其特殊的卷积运算,可以挖掘出高维数据的主要特征,降低数据维度,为提高预测精度奠定基础;GRU神经网络则具有独特的门结构,能够考虑到时序数据的前后关联性,更充分地学习输入与输出之间的非线性关系,实现对时间序列数据的有效预测。因此,本文提出了一种融合CNN和GRU神经网络的混合股指预测模型。通过组合多种结构,该模型可以有效地学习股指数据中隐藏的丰富特征和规律,提高股指预测的准确率。
基于CNN和GRU神经网络的混合股指预测模型的网络结构如图3所示,主要由卷积层、池化层、Dropout层、GRU层和全连接层构成。将衡量股指的相关指标数据作为模型的输入,利用卷积操作进行特征提取,挖掘数据之间的相关性;再通过池化操作压缩参数数量,进一步降低数据维度;同时加入Dropout层按照一定概率随机选择网络中的神经元,防止过拟合;然后利用GRU层对降维后的数据进行处理,学习它们之间的时间依从关系;最后由全连接层将数据转换为一维结构,得到最终的输出结果。
图3 基于CNN和GRU神经网络的模型Fig.3 Model based on CNN and GRU neural network
模型中各层具体描述如下:
(1)输入层
输入层采用股指相关指标数据作为CNN-GRU模型的输入。为了增加样本的多样性,本文利用滑动窗口法,以固定窗口大小沿着时间轴进行移动,并不断截取一定范围的历史股指数据。对于股指数据来说,某一时刻的值受很久以前因素的影响较小,因此本文将滑动窗口的宽度设定为10,即利用过去10分钟的历史指标数据来预测未来第11分钟的股指收盘价。除了具有时间维度外,股指数据在每个特定时刻下还包含了一系列衡量收盘价的指标,称为特征维度。为了便于CNN的处理,需要对前t分钟具有n维属性的股指数据的结构进行设计,以特征图的形式输入到模型中。数据的转换过程如图4所示,其中xtn代表t时刻股指的第n项指标。
图4 股指数据的特征图表达方式Fig.4 Characteristic graph representation of stock index data
(2)卷积层
将转化为特征图形式的输入数据输入到卷积层。考虑到使用不同大小的卷积核进行卷积操作时,模型的结构会比较复杂,不利于模型的训练,因此本文在卷积过程中均采用3×3大小的卷积核进行二维卷积运算,用来提取输入数据的隐藏特征。卷积过程如下式所示:
其中,C为卷积层的输出;f()⋅为激活函数,一般选择线性整流函数(Rectified Linear Unit,ReLU);⊗为卷积运算;Wc为权重矩阵;bc为偏置量。
为了尽量不丢弃输入数据的信息,让经过卷积操作的输出依旧拥有足够多的信息量,采用补0填充的方式使输出与输入特征图保持大小一致。
(3)池化层
池化层利用最大池化方法对卷积层的输出执行池化操作,并将其大小设置为2×2,用来保留最主要的特征。其中,P是池化层输出;maxpooling()⋅是最大池化函数。
(4)Dropout层
在训练过程中,Dropout技术[17]按照一定概率随机地从网络中丢弃神经元(及其连接),即将该神经元的输入和输出都设置为0,如图5所示,其中打叉的圆圈代表被Dropout随机丢弃的神经元。这样,一方面可以有效减少模型内部参数的个数,另一方面也相当于增加了输入数据的多样性,从而可以在一定程度上减轻过拟合现象。
图5 Dropout技术示意图Fig.5 Schematic diagram of Dropout technology
将池化层输出的特征拼接成一维向量输入Dropout层。
其中,D为Dropout层的输出;M为0~1之间的随机数,n为丢弃概率,0≤n<1。
本文将n的值设置为0.25,即在模型训练过程中,随机将1/4神经元的输出值设置为0。
(5)GRU层
GRU单元在大量训练中不断调整自身参数,从Dropout层的输出中学习数据之间的时间依赖关系,捕捉其内部变化规律。GRU层第i步输出hi的具体计算步骤为:
(6)全连接层
全连接层采用ReLU激活函数对GRU层的输出向量进行处理,得到最终的股指收盘价预测值。
其中,Y′是预测值;H是GRU层输出;Wf是权值矩阵;bf是偏移量。
为了能够使用梯度下降法来训练模型,需要选择一个可以反向求导的损失函数。本文提出的模型是针对时间序列预测问题的,因此采用均方误差(Mean Square Error,MSE)函数作为目标损失函数。MSE计算公式如下:
其中,N是预测的收盘价个数;yi和y′i分别是第i个收盘价的真实值和预测值。
本文算法可以用来预测个股的价格走势,也可以用来预测股指的价格走势。考虑到单只股票受突发性事件及人为因素的影响较大,从而造成对预测结果的影响,因此本文选取沪深300指数作为模型仿真实验研究的对象。
实验数据集样本来源于同花顺iFind金融数据终端。该数据集包含了沪深300指数16个维度的数据,分别是开盘价、最高价、最低价、收盘价、涨跌幅、成交金额、成交量、异同移动平均线指标、布林线指标、威廉指标、随机指标、乖离率指标、相对强弱指数、变动率指标、顺势指标、抛物线指标。数据的采集时间为2018年12月18日至2019年12月13日,数据集的生成方式为每分钟采集一次数据,共采集数据样本57 840组。
将采集到的样本数据按3∶1∶1的比例划分。其中,前60%的数据作为训练集,用来训练模型;接下来20%的数据作为验证集,用来选择模型参数;最后剩余20%的数据作为测试集,用来评估模型的具体表现。
实验中,考虑到不同指标的量纲通常存在较大差异,会对实验结果造成影响,本文采用线性函数归一化方法对实验数据进行归一化处理:
其中,Xn表示第n个指标数据,maxXn、minXn分别是Xn中的最大值、最小值。
为使预测值仍然具有实际含义,需要对其进行反归一化处理:
其中,Y″是归一化的预测值;maxclose、minclose分别是收盘价的最大值、最小值。
实验中评估模型预测性能采用的评价指标包括均方根误差(Root Mean Square Error,RMSE)、平均绝对误差(Mean Absolute Error,MAE)、平均绝对百分比误差(Mean Absolute Percentage Error,MAPE)、皮尔逊相关系数(Pearson Correlation Coefficient)以及模型训练时间。其中,RMSE、MAE和MAPE是预测误差衡量指标,这三个性能指标的值越小,表明预测值越接近真实值。皮尔逊相关系数用于度量预测值和真实值之间的相关性,常用r代表,r的值越接近1,预测值与真实值的拟合度越高。
RMSE、MAE、MAPE及r的计算公式如下:
CNN-GRU模型中需要手动设置的参数主要包括卷积层层数、卷积核个数、GRU层层数、GRU层神经元个数和优化学习算法。卷积层层数和卷积核个数体现了CNN从数据中提取特征的能力,GRU层层数和GRU层神经元个数则反映了GRU神经网络从数据中学习时间依赖关系的能力。
3.4.1卷积层层数
从理论上来说,卷积层层数越多,特征表达能力就越强,可以处理的数据也就越多。但是,如果算法中的参数呈爆炸式增长,模型相应的训练难度和训练时间也会增加。
本文输入样本的长度不长,因此模型中卷积层层数也不会太多。在保持模型其他参数不变的情况下,讨论卷积层层数分别为1至5层对模型预测结果的影响,如表1所示。
表1 卷积层层数对预测结果的影响Table 1 Influence of number of convolution layers on forecasting results
从表1中可以看出,随着卷积层层数的增加,误差逐渐变小,相关系数逐渐变大,但当层数增加到一定程度,误差又逐渐变大,相关系数逐渐变小。同时,层数的增加会带来计算量的增加,模型的训练时间随之不断损耗。因此,本文模型使用了三层卷积层。
3.4.2卷积层卷积核个数
卷积核个数反映了特征提取的能力。如果卷积核个数设置得太小,则无法充分提取数据的潜在特征;如果设置得太大,模型会过于复杂,训练时间会成倍增加,同时也可能导致过拟合。
如前文所述,本文模型使用了三层卷积层。根据一般经验,将第二层卷积核的数量设置为第一层卷积核的两倍,第三层卷积核的数量设置为第二层卷积核的两倍。采用控制变量法,将三层卷积层的卷积核个数分成4个不同的参数组合进行讨论分析,实验结果如表2所示,其中n1、n2和n3分别代表了第一、第二和第三层卷积核个数。
表2 卷积核个数对预测结果的影响Table 2 Influence of the number of convolution kernels on forecasting results
从表2中可以看出,误差随卷积核个数的增加先减小后增大,相关系数则是先增大后减小。当第一层卷积核的数量为16,第二层卷积核的数量为32,第三层卷积核的数量为64时,预测结果的误差最小,相关系数最接近1。因此,本文考虑三层卷积核的个数分别取16个、32个和64个。
3.4.3 GRU层层数
一般来说,增加GRU层的层数可以减少网络误差,提高预测精度,但同时也会使网络结构变得复杂,导致训练效率低下。因此,本文比较了不同的GRU层层数对预测结果的影响。
根据表3分析可知,随着GRU层层数的增加,模型的预测效果确实得到了显著提高,这符合深度学习的层次学习原理。但是,当层数继续增加时,误差反而变大了,这可能是由于模型在训练过程中产生了过拟合,导致预测效果变差。因此,本文将GRU层的层数设置为四层。
表3 GRU层层数对预测结果的影响Table 3 Influence of number of GRU layers on forecasting results
3.4.4 GRU层神经元个数
在本文中,4个GRU层的神经元个数被统一设为相同的数目。在保持模型中其他参数不变的同时,探究神经元个数分别为10、20、30和40时对预测结果的影响。
从表4中分析可知,GRU层神经元个数并不是越多越好。模型的复杂度与数据量之间存在相互制约的关系,当模型的复杂度增加到一定程度而没有足够的数据支撑时,模型的泛化能力就会降低。因此,本文模型的GRU层神经元个数均设为20个。
表4 GRU层神经元个数对预测结果的影响Table 4 Influence of number of neurons in GRU layers on forecasting results
3.4.5优化学习算法
优化学习算法的作用是在梯度下降过程中通过不同的策略更新梯度下降的方向和学习率,这直接影响着网络中权阈值的更新以及模型的收敛速度。本文主要讨论了随机梯度下降(Stochastic Gradient Descent,SGD)、自适应梯度(Adaptive Gradient,AdaGrad)、均方差传播(Root Mean Square prop,RMSprop)和自适应动量估计(Adaptive Moment Estimation,Adam)这四种常用的优化学习算法。
从图6中可以看出,SGD算法并没有使MSE在训练集和验证集上得到收敛;AdaGrad算法使MSE在训练集上迭代1次后迅速下降到0.002以下,经过5次迭代后MSE基本不再下降,在验证集上迭代到第4次后MSE基本保持不变;RMSprop算法使MSE在训练集上迭代1次后快速减小,然后保持一个缓慢下降的状态,但在验证集上,MSE一直处于波动状态,没有达到有效收敛;Adam算法使MSE在训练集和验证集上均迅速收敛到一个较为理想的值。综上,本文使用Adam算法来训练模型,在训练过程中,样本集被分为多个批次,每批次大小设置为128。
图6 优化学习方法对网络收敛性能的影响Fig.6 Influence of optimized learning methods on network convergence performance
3.5.1模型对比分析
为了验证本文模型的有效性,对比分析了CNN-GRU模型与GRU模型、LSTM模型和CNN模型在沪深300指数上的预测效果。考虑到实验的合理性、严谨性和准确性,与本文模型相同,将GRU模型和LSTM模型的隐藏层层数设置为4层,隐层神经元个数设置为20个;CNN模型的卷积层层数设置为3层,各层卷积核个数分别设置为16个、32个、64个。
从图7~图10可以看出,相比于GRU模型、LSTM模型和CNN模型,本文所构建的CNN-GRU模型的预测效果更好,预测值与真实值的走势基本一致。
图7 CNN-GRU模型预测结果Fig.7 Forecasting results of CNN-GRU model
图10 CNN模型预测结果Fig.10 Forecasting results of CNN model
通过列出4个模型的RMSE、MAE、MAPE、r以及训练时间,可以更直观地看出各模型的预测效果。
图8 GRU模型预测结果Fig.8 Forecasting results of GRU model
图9 LSTM模型预测结果Fig.9 Forecasting results of LSTM model
根据表5可知,在RMSE、MAE、MAPE和r这4个衡量指标的评判标准下,四种模型的优劣顺序依次是CNN-GRU模型、GRU模型、LSTM模型、CNN模型。表现效果最优的CNN-GRU模型的RMSE为0.432%、MAE为0.335%、MAPE为41.307%、r为99.637%,预测值与真实值的拟合度最高。其中,MAPE明显大于RMSE和MAE,这是因为MAPE是相对误差,其大小与股指收盘价的数值范围有关,而RMSE和MAE为绝对误差,其数值不受收盘价大小的影响。
表5 不同模型的预测性能Table 5 Forecasting performance of different models
对比LSTM模型,GRU模型预测效果略好,且所需训练时间更短。这是因为GRU模型将LSTM模型的输入门和遗忘门融合成了一个门,模型的结构变得更精简。对比CNN模型,GRU模型的RMSE指标从1.073%降低至0.620%,误差减少了42.22%,r指标从99.110%提高至99.476%,相关性提高了0.37%。这是因为CNN模型是一种无循环的前馈神经网络,而GRU模型中引入了时序概念,能够考虑到时序数据之间的时间相关性,比起CNN模型,GRU模型能够更好地处理时间序列问题。
对比GRU模型,利用CNN进行特征提取的CNNGRU模型的RMSE指标从0.620%降低至0.432%,误差减少了30.32%,r指标从99.476%提高至99.637%,相关性提高了0.16%。这说明CNN良好的特征表达能力有助于自动挖掘股指数据中的隐藏特征,并从中剔除噪声和不稳定成分,从而提升模型整体的泛化性能以及学习能力。
从运行时间来看,随着模型结构趋于复杂化,模型的训练时间也在逐渐增加。CNN-GRU模型的结构最为复杂,耗时也最多,但处理上万条数据也只需要722 s。
3.5.2模型普适性分析
研究对象的选择对于获得股指定量研究的最终结果非常重要,因此本文另外选取上证综指和深证成指作为实验对象,探讨了CNN-GRU模型的普适性。上证综指和深证成指的采集时间为2019年7月9日至2019年12月13日,数据集的生成方式同样为每分钟采集一次,共采集数据样本26 028组。
不同股指收盘价的预测结果如图11~图13所示。通过比较预测值与真实值可以发现:三种股指收盘价的预测值与真实值在总体走势上均基本保持一致,偏差程度较低,即CNN-GRU模型对这三种股指的预测效果相近。沪深300指数、上证综指和深证成指是中国股市的三大代表性股指,因此可以认为CNN-GRU模型在股指预测领域具有一定的通用性。
图11 沪深300指数收盘价预测结果Fig.11 Forecasting results of CSI 300 Index closing price
图13 深证成指收盘价预测结果Fig.13 Forecasting results of SZSE Component Index closing price
从表6中可以看出,沪深300指数、上证综指和深证成指收盘价预测值和真实值的RMSE和MAPE均在(0,0.01)范围内,MAPE均在(0,1)范围内,相关系数也都接近于1,说明CNN-GRU模型具有较高的预测精度和显著的预测效果。从表中还可以看出,上证综指和深证成指收盘价的预测效果略逊于沪深300指数,这可能是因为在确定模型参数的过程中所使用的训练集是沪深300指数,所以沪深300指数收盘价的预测准确率更高。
图12 上证综指收盘价预测结果Fig.12 Forecasting results of SSE Composite Index closing price
表6 不同数据集的预测性能Table 6 Forecasting performance of different data sets
本文融合CNN和GRU神经网络,提出了一种混合股指预测模型。该模型使用CNN提取股指数据的隐藏特征,减小原始数据规模,然后利用GRU神经网络学习股指数据的内部动态变化规律,实现对股指收盘价的预测。本文所提出的模型具有如下特点:
(1)继承了CNN模型在潜在特征提取方面的优势,利用其多层特征捕捉器及最大池化结构挖掘股指指标数据中蕴含的更多有效信息。
(2)继承了GRU模型记忆能力强及易于计算的优势,利用其独特的门结构学习数据的时间依赖关系和复杂非线性关系。
研究结果表明,与GRU模型、LSTM模型和CNN模型相比,本文提出的CNN-GRU模型对沪深300指数具有较强的预测能力和较高的预测准确度,体现了该模型良好的有效性。同时,该模型在上证综指和深证成指的预测中也取得了不错的效果,说明该模型具有一定的普适性。
本文构建的CNN-GRU模型能够较为准确地预测股指收盘价的未来走势,但对股指收盘价的精准预测还有待提高。这主要是因为在考虑股指的影响因素时,本文选择了基本交易数据和技术指标数据作为模型的输入,这两类数据均属于市场面因素。因此,在进一步的工作中,可以考虑把基本面因素(政府经济政策、公司经营状况等)加入到输入指标体系中去。