赵建群, 王 悦
(广东科贸职业学院 经济管理学院, 广东 广州 510000)
股票市场在国家金融市场中起着举足轻重的作用,股票市场能够直观地反映国家的经济状况.对股票数据的预测不仅对国家的经济建设起指导作用,还能为投资者提供投资方向[1].
股票数据除了自身波动外,还受国家政策、突发事件和舆情舆论的影响.股票价格的预测是金融预测领域的一大难题.1950年,大量学者开始研究股票预测方法.从传统的移动平均线等统计学方法[2],到以SVM[3]、随机森林[4]等方法为主的机器学习方法,股票价格预测精度有所提升.随着神经网络和深度学习的发展,越来越多的学者开始使用深度神经网络模型分析股票[5].2016年Singh等使用2维的主成分分析结合深度神经网络构建了股票预测模型[6],并采用Google公司的股票作为数据进行验证,其预测准确率较高;柏万宽在循环神经网络(RNN)的基础上提出一种改进算法,在对比实验中,改进算法在测试集的表现优于RNN模型[7];王子钥等在变步长长期记忆网络(BLSTM)的基础上,提出一种变步长集成学习方法,结果验证了在不同数据预处理下改进损失函数的有效性,以及变步长集成方法相对单一网络的有效性[8].
基于RNN在股票数据中表现出的优越性,本文选取RNN的变种网络门控循环单元(GRU)作为基本网络结构,构建股票预测模型,预测股票价格的涨跌,数据集选择中证100的成分股.
人工神经网络是通过对人脑工作机制的模拟实现复杂的计算和函数拟合,其在20世纪80年代得到了迅速的发展.全连接神经网络是最初始的神经网络结构[9],它是通过层与层之间神经元节点的全连接处理输入信息.由于其结构简单、性能优异的特点成为目前使用最广泛的神经网络之一.卷积神经网络(CNN)也是神经网络的代表之一,其利用卷积核进行特征提取,通过不断滑动感知窗口获取局部信息与整体信息的联系[10],在图形、视频等领域应用广泛.循环神经网络(RNN)是为解决序列问题提出的,循环神经网络层之间特有的有向循环连接方式使其具备时序数据的记忆功能[11].RNN及其变种网络在自然语言和时序数据的处理上得到了广泛的应用[12].
门控循环单元(GRU)是循环神经网络的变种网络之一,其通过引入门控结构,解决了RNN难以处理长距离信息捕获的问题[13].GRU相比长短期记忆网络(LSTM)的门结构做了简化,只引入了更新门zt和重置门rt,其具体结构如图1所示.其中,更新门用于控制前一时刻状态信息流入当前时刻GRU单元中的程度,更新门的值越小,说明保留前一时刻的信息越少,反之越多;重置门是决定前一时刻状态信息保留到当前状态值的程度,重置门的值越小,说明前一时刻写入当前状态值的信息量越少.
GRU通过前向传播来完成信息的初始流入.记当前时刻的输入为xt,前一时刻的状态值为ht-1,Wr、Wz分别为重置门和更新门的权重矩阵,σ和tanh为激活函数,则更新门和重置门的更新见式(1)和式(2):
rt=σ(Wr·[ht-1,xt]),
(1)
zt=σ(Wz·[ht-1,xt]).
(2)
(3)
(4)
GRU单元通过对序列数据每一时刻的状态计算,将输入序列中有用的信息保留,筛除噪声.其最后的输出yt计算如下:
yt=σ(Woht),
(5)
其中:Wo为输出值的权值矩阵.序列中最后一个GRU单元的状态值经过激活函数后可作为输出值.激活函数可根据最终任务的类别进行选择,常用的激活函数有sigmoid函数和softmax函数.
本文采用中证100指数的成分股作为本实验的数据集.中证100指数是从沪深300成分股中筛选出的规模最大的100只股票.由于所选公司和股票规模大、影响深,因此能够反映沪深股票市场的整体情况[14].
利用tushare工具包,本文获取了2017年7月至2019年6月中证100的成分股数据.为保证数据集中股票数据量的统一,剔除该时间段停盘超过1个月的股票,最后筛选出92只股票作为实验数据集.为评测训练效果,将实验数据集划分为训练集和测试集.将2017年7月至2018年12月的每只股票数据作为训练集,2019年1月至2019年6月的股票数据作为测试集.训练集和测试集的比例接近3∶1,与常用的训练测试集比例相符.训练集数据用于训练股票预测模型,测试集数据用于评测模型的预测效果.股票数据集概况见表1.
表1 股票数据集概况
股票数据的特征较多,除了股票基本交易数据外,还有技术指标和公司运营情况的相关数据.由于技术指标等股票特征对股票涨跌趋势的影响尚不明确,本文只采用包含开盘价、最高价、收盘价、最低价、成交量和涨跌幅的6维股票基本交易数据.数据集样例信息见表2.
表2 部分数据集信息
本文拟根据股票数据训练模型预测其收盘价的涨跌,但如果只按照涨跌幅的正负对股票作2分类预测,则预测结果含有较多涨跌幅较小的预测值,对投资指导的实际意义不大.因此,为使预测更贴合实际需求,本文进一步挖掘股票数据特征,对所用数据集做涨跌幅分布的样本统计,并按照统计结果确定具体涨跌分类的划分.图2、图3和图4分别是整体股票数据、训练集数据和测试集数据的价格涨跌幅分布图.3个数据集在价格涨跌幅的分布上接近高斯分布,符合一般的事物分布规律.
图5为3个数据集以涨跌幅1%为界限将股票涨跌幅做3分类时的直方图.从图5可以看出,无论是训练集数据还是测试集数据,在3类涨跌幅分布区间上占比基本均衡,其中属于小范围涨跌区间(-1%~1%)的股票样本稍多于其他两类.在多分类任务中,各类别均衡的样本分布其预测效果通常会更好一些.因此,本文在股票涨跌预测上选择如上所分的3分类预测方式,这样在预测结果中才能区分小范围涨跌幅、大涨和大跌的情况,且更具有实际意义.
股票市场常常会受到诸如政策、突发事件等因素干扰而出现停盘,从而造成样本数据缺失.为使数据集的股票序列长度一致,本文对原始的股票数据进行了填充.对交易日停盘造成数据缺失的股票,本文使用停盘交易日前一天的数据填充该日的交易信息.
从表2的股票特征信息可知,不同特征的股票数据在量级上相差很大,开盘价、最高价、收盘价和最低价等价格特征数值较一致,成交量数据在量级上远大于其他数据类型,涨跌幅数据变化范围为-10~10.因此,数据集进入模型训练前,需要对数据进行归一化处理,以降低特征量纲差异对模型造成的干扰.本文使用零均值归一化来消除量纲的影响,记原始数据维X、Xmax、Xmin分别为原始数据中的最大值和最小值.归一化公式如下:
(6)
本文使用分类的方式对股票涨跌进行预测.记某连续T个交易日的价格序列为P1,P2,…,PT.本文将根据前T天的股票数据,预测第T+1天的股票涨跌.对涨跌的定义使用2.1节的分析结果,即以涨跌幅1%为界限,将股票的涨跌做3分类:涨幅1%以上为大涨;跌幅1%以上为大跌;其余股票数据为不涨不跌类别.记第T+1天的股票涨跌幅为yT+1,对应区间的量化数值为YT+1,则具体的涨跌量化方式如下:
(7)
本文使用GRU作为基本网络框架,深度学习框架使用当前最流行的Tensorflow深度学习库.由于Tensorflow对神经网络高度接口化,因此使其在构建深层神经网络、模型调参等方面具有灵活、高效的优点.
GRU股票预测模型的输入包括开盘价、最高价、收盘价、最低价、成交量和涨跌幅6维归一化后的股票基本交易特征.输入的特征设置了同等数量参数的权值矩阵,其权值矩阵的初始化方式为随机初始化.在模型层数上,由于单隐层的神经网络拟合效果较差,因此本文采用3层的GRU作为网络结构.每层神经元节点数为64,每层网络间以全连接的方式连接.在输出上,本文使用3分类的方式预测股票涨跌.将2.2节所定义的涨跌量化使用Onehot编码,并将编码结果作为标签有监督地训练模型.因此,在GRU网络输出端需要接一个Softmax层,将输出转换为每个涨跌幅区间的概率,并以取得最大概率的区间为预测区间.
为优化网络权重,通常使用损失函数来估计预测值和标签的差异.由于使用多分类的预测方式,因此损失函数选择交叉熵损失函数.其定义如下:
(8)
在实验过程中,为防止迭代次数过多而造成模型过拟合,将训练集按照8∶2的比例分为训练集和验证集.训练设定的隐藏层神经节点数为64,初始的学习率为0.003,迭代100次.时间步长T的选择为10,即用前10天的股票数据预测第11天的股票收盘价的涨跌.在训练过程中,不断保留验证集损失函数值最低的模型,训练结束后,将取得验证集损失函数值最低的模型作为最终模型,并使用该模型对测试集股票数据进行预测.为较全面地衡量模型的预测效果,本文除使用准确率评价模型的预测结果外,还使用精确率、召回率和F1值等指标.
图6为迭代100次训练集和验证集损失函数的变化图.由图6可以看出,训练40次时,验证集的损失函数值已经变化较小.训练集损失函数值虽然仍在减小,但出现了振荡,说明模型已经出现过拟合.因此,将验证集损失函数值最小时的模型作为最终模型.
表3为使用训练好的模型对中证100测试集的预测结果.由表3可以看出,整体3分类预测的准确率为53%,精确率为68%.模型预测的精确率高于准确率,模型预测的涨跌区间主要集中在-1~1,该区间内的精确率较高,其他两个区间相对较低.
表3 测试集涨跌准确率
该模型是使用中证100整体数据训练得到的,在实际运用中,常对某只股票单独预测投资.因此本文从数据集中随机抽取了3只个股,验证它们在该模型上的表现.表4是3只股票在模型上的预测结果.
表4 单只股票预测
由表4可以看出,洋河股份在股票涨跌预测模型上的表现差于整体测试集的模型,但平安银行和贵州茅台两只股票的准确率都高于测试集.这说明不同股票由于时间段的股票数据特征不同,在整体数据训练模型上的表现也不同.投资者实际使用时,对表现不佳的股票需要使用该股票的数据对模型进行微调,以提升其预测的准确率.
在预测股票涨跌的问题上,本文提出一种基于GRU的股票涨跌预测模型,该模型是使用3分类的预测方式建立的.数据集使用2017—2019年的中证100成分股数据.通过对中证100整体股票的预测,提供大盘股票的涨跌走势,能够帮助投资者做出正确的决策.在个股预测上,需要利用个股数据对模型进行微调,以提高模型对个股的拟合.