赵腾哲 首都经济贸易大学统计学院
在金融市场,特别是股票市场中,如何精准地选择股票来规划自己的投资计划,以达到规避风险和获得更多收益的目标,是人们所关注的重点。
国外将机器学习应用于金融市场的研究比较早。2015年Michel Ballings等[1]使用单一分类器模型(神经网络,逻辑回归,支持向量机和K近邻)和集成方法(随机森林,AdaBoost和Kernel Factory)对未来一年股价方向进行预测。Nikola Milosevic[2]提出了一种机器学习辅助方法,以长期评估股票的未来价格。Badre Labiad等[3]采用了随机森林、梯度增强树和支持向量机来预测摩洛哥股票市场的短期变化,证明了随机森林和梯度增强树比支持向量机适用于短期预测。Sujin Pyo等[4]使用人工神经网络,使用带有多项式和径向基函数核的支持向量机模型预测了韩国综合股票价格指数200(KOSPI 200)的价格趋势。Uma Gurav等[5]基于股票市场投资风险的最小化与预测误差的最小化紧密相关的事实,采用机器学习的方法对于动态股票市场进行预测。Keywan等[6]讲述了机器学习的理论和方法,进行实例演示,说明投资者如何在避免模型过拟合时运用机器学习算法准确地预测股票的收益。Dominik Wolff等[7]使用随机森林,正则Logistic回归等模型对1999年至2019年期间标准普尔500指数历史成份股的每周数据进行了股票特征训练,以预测特定股票在接下来的一周内是否跑赢大盘。2020年Wenjie Lu等[8]提出了一种CNN-BiLSTM-AM的方法来预测第二天的股票收盘价。Doron Avramov等[9]基于深度学习的投资成功地识别了与大多数异常现象一致的错误定价股票。韩山杰等[10]基于TensorFlow,构建多层感知器模型,用于预测每日收盘股价。彭燕等[11]证实了股票的调整不是按照均匀的时间过程推进,而是具有自身的推进过程,帮助投资者进一步的了解实际股价并且构建合适的股票投资策略。冯宇旭等[12]将LSTM用于沪深300指数的股价预测中,获得了比较好的预测效果。2021年赵红蕊等[13]提出了一种在结合长短期记忆网络和卷积神经网络的基础上引入注意力机制的股票预测混合模型。胡聿文等[14]提出一种基于PCA和LASSO的LSTM神经网络股票价格预测模型,提高股票价格的预测精度。方义秋等[15]提出了一种联合RMSE损失LSTM-CNN的方法,在预测效果上具有良好的可行性和普适性。李潇俊等[16]发现基于LSTM模型和GRU模型构建的混合循环神经网站模型在长期预测上具有更高的预测精度。2022年,曹超凡等[17]融合卷积神经网络和长短时记忆网络,构建CNN-LSTM模型的基础上,引入多向延迟嵌入的张量处理技术MDT,验证了引入MDT技术的有效性和可行性。严冬梅等[18]提出一种结合自注意力机制和残差网络的生成式对抗神经网络模型。能不同程度地减少预测误差。
上述文献中所使用的模型多为多种神经网络的混合模型,例如CNN-LSTM神经网络。然而LSTM作为一种预测时间序列数据的神经网络,其本身对数据的拟合效果非常好,加入其他网络可能令预测结果变差。针对上述问题,本文选择适当加深维度后的模型,与当前预测效果好的混合模型进行对比,使用上证综指进行分析,让模型自主寻找最优的超参数,从预测模型的拟合精度和程度分别判断模型好坏。结果显示文章所使用的模型都有较高的预测精度,充分证明了加深模型深度比模型混合对于股价的预测效果提升更加明显,为股价预测的神经网络模型的优化方向提供思路。
循环神经网络(RNN)是一种专门用来处理序列数据的神经网络,相比与于普通前馈神经网络,其可以接受自身和其他神经元的信息,构成了循环结构,可以有效地挖掘出数据中的时序信息,因此在语音识别、语言模型、机器翻译等方面表现良好。
但在使用RNN处理问题时一般存在一系列问题,例如“长期依赖”问题。长期是指所预测的目标在序列靠前的位置,但在多次传播以后,循环神经网络难以学习到时间久远的信息,从而无法进行准确的预测,同时梯度消失和梯度爆炸是困扰RNN模型训练的关键原因之一。由于RNN的权值矩阵循环相乘导致矩阵高次幂,在多次传播后,大部分情况下梯度倾向于消失,小部分情况下趋于爆炸。
LSTM神经网络提出的动机是为了解决上面提到的问题。为了解决长期依赖问题,LSTM引入了门机制,不同于RNN全盘接受信息,LSTM加入了门之后,对所输入的信息进行了选择,从而可以获取较远的序列的信息。
LSTM计算过程如下:
(1)选择忘记过去某些信息
ht−1是LSTM神经元单元在最后时刻的最终输出值,xt是当前时刻的输入,σ是激活函数,ft是当前时刻遗忘门的输出,W是权重,B为偏差。
(2)记忆现在的某些信息
it是当前时刻的输入门输出是当前时刻的候选单元状态。
(3)将过去与现在的记忆进行合并
Ct是当前时刻的单元状态,Ct−1是先前时刻的单元状态。
(4)计算得到输出值
ot是输出门的输出值,ht是当前时刻的输出。
GRU则进一步简化了LSTM,将遗忘门和输入门合二为一,只保留了更新门和重置门两种门操作。在LSTM中长期记忆会影响到某一时刻的模型输出,而GRU则直接把某一时刻的长期记忆作为输出,一边修改长期记忆一边进行输出,所以这使得GRU比LSTM具有更少的输入(LSTM有三个输入,GRU只有两个)和更简单的结构,运算量也相对减少。
GRU运算过程如下:
先使用上一时刻的输出和当前时刻的输入X做出两个独立的门出来。Zt为重置门,tR为更新门。
(2)先生成临时激活值,可以发现Rt越大,之前的信息就带入越多。
(3)加权生成最后的输出
卷积神经网络是一种前馈神经网络,在自然语言处理和图像处理方面具有优异的表现。卷积结构减少了神经网络占用的内存,局部感受野和权值共享成功减少了参数的数量,提高了模型的效率,防止参数过多导致模型过拟合。
卷积神经网络主要由卷积层、池化层和全连接层构成。其中卷积层和池化层是卷积神经网络独有。卷积核是卷积层中的主要部分,超参数主要为卷积核大小、填充和步长,通过卷积层的卷积操作,可以提取出数据特征,但提取出的特征维度高,池化层的主要目的就是为了降低特征维度,减少计算量,降低神经网络的训练成本,通常会在卷积层的后面加一个池化层。池化层的超参数主要为池大小、填充和激活函数。
卷积神经网络的训练过程如下:
1.向模型输入数据,卷积神经网络使用梯度下降算法,因此需要对输入数据进行标准化,提升卷积神经网络的表现。
2.初始化模型的权值和阈值,固定学习率等超参数。
3.输入数据依次通过卷积层、池化层和全连接层得到输出值。
4.计算输出值与目标值之间的误差,依次计算各个层之间的误差,计算出权值和阈值的调整量,对其更新。
5.训练多次后,判断模型的结果是否符合预期,未满足继续迭代,满足后训练结束,保存权值和阈值。
为了对各类模型做出更加准确的评价,笔者采用三种评价指标来衡量模型的拟合效果,分别是和R2。
三种指标的公式分别如下:
本实验选择上证综指(000,001)作为实验数据,选取的数据来源于Choice金融终端,数据较为可靠,数据时间范围从1991年7月1日至2020年8月31日共7127个交易日。每条数据包含8个变量:开盘价、最高价、最低价格、收盘价、成交量、成交金额、涨跌额和涨跌幅。本实验以前6627个交易日的数据作为训练集,以后500个交易日的数据作为测试集。部分样本数据展示如表1所示。
表1 样本数据
本文对数据建模的过程如下:
1.输入训练所需要的数据。
2.对数据进行预处理,由于数据各个变量值之间相差较大,为了使训练后的模型更加准确,对数据做标准化处理。
3.初始化神经网络的权重和偏置,设置好网络层数,通过随机搜索找到合适的范围,通过网格搜索找到最优隐藏单元数等,设置超参数。
4.将数据输入到神经网络中,设置学习率衰减策略和早停法,便于更好的拟合模型和防止产生过拟合,通过神经网络得到输出值。
5.判断模型迭代是否完成或者达到设定要求,满足条件后完成训练,更新并保存神经网络;未满足条件更新模型的权重和偏置继续训练。
6.将预测的数据输入训练好的模型,并进行标准化处理。
7.通过训练好的模型得到预测值,对预测值做反标准化,与真实的预测值进行比较,计算相应的,判断哪种模型对数据的拟合效果更好
8.为防止神经网络拟合出现极端值的情况,整个过程共循环10次,记录的数值,计算平均值,使结果更具说服力。
在本实验中,神经网络的训练参数都相同,迭代次数为100次,损失函数为MAE,优化器选择Adam,批量大小为64,时间步长为10,初始学习率为0.001。在卷积神经网络中卷积层包含32个卷积核,内核大小为1,激活函数为tanh,填充为same,池化层大小为1,激活函数为tanh,填充为same,神经网络中的隐藏单元数均为256。
在设定隐藏单元数时,运用随机搜索和网格搜索,令模型自主选择最优的参数,笔者为了兼顾运算的时间和拟合效果,将单元数上限设置为256。
为了使拟合效果更好,笔者采用学习率衰减策略,逐步降低学习率,以求达到最好的拟合效果,同时防止拟合次数过多产生过拟合现象,采用早停法进行限制。
由于神经网络每次训练的初始权重和参数都不同,为了能够避免出现极端数值,笔者采用多次训练的方法,将每次训练的结果置于数据框中,共训练10次,求取各个评价指标的均值作为最终结果(见表2)。
表2 神经网络参数
笔者利用处理后的训练集数据分别对CNN、RNN、LSTM、CNN-RNN、CNN-LSTM、双层RNN和双层LSTM进行训练后,利用训练完成的模型对测试集数据进行预测,并将真实值与预测值进行比较(见图1-图7)。
图1 CNN
图2 RNN
图3 LSTM
图4 CNN-RNN
图5 CNN-LSTM
图6 双层RNN
图7 双层LSTM
在九种预测方法中,实值和预测值的折线拟合度从低到高排序分别为CNN、CNN-RNN、CNN-LSTM、双层RNN、RNN、单层LSTM和双层LSTM。双层LSTM的拟合程度最好,预测值和真实值几乎相互重合,CNN的拟合程度最差。根据每种方法的预测值和实际值,每种方法的评价指标都可以为计算得到后,所有方法的比较结果见表3、图8-10所示。
图8 MAE图
图9 RMSE图
图10 R2图
从表3和图8-10中可以看出,CNN的MAE,RMSE最大,R2最小,双层LSTM的MAE,RMSE最小,R2最大,在所有模型中,使用CNN来提取特征或者直接进行预测的模型的拟合结果都比其他模型差,通过对比RNN和LSTM,可以发现,不管是单独使用LSTM和RNN模型,还是与CNN结合使用,LSTM模型的拟合结果均要优于RNN模型。
表3 预测误差表
同时,在使用双层模型进行处理的过程中,双层LSTM的模型优于单层LSTM,但RNN的结果与之相反,说明在某种程度上,加深神经网络层数会带来一定的改善,但也要具体问题具体分析。
总体而言,循环神经网络预测股价具有良好的性能,但当数据的变量较少时,使用CNN作为特征提取的方法并不能优化模型,反而不如单纯的循环神经网络。当神经网络拟合结果达不到预想程度时,可以适当加深神经网络的层数进行尝试,可能会有更好的结果。因此,在利用前十天的数据来预测下一天的收盘价,神经网络可以很好地预测第二天的收盘价,为投资者的投资提供参考,同时对于预测上证指数而言,双层LSTM是一种最好的选择。
本文根据股票价格数据的时间特征,使用CNN、CNN-RNN、CNN-LSTM、双层RNN、RNN、单层LSTM和双层LSTM模型来预测股票收盘价,本文以上证综指的相关数据为例,以开盘价、最高价、最低价格、收盘价、成交量、成交金额、涨跌额和涨跌幅作为变量,充分利用股票数据的时间序列特征,使用前十天的数据,预测第二天的收盘价。在所有模型当中,双层LSTM模型对于股价的预测具有更好的效果。实验结果表明CNN不适用于预测时间序列数据;LSTM模型均优于RNN模型,说明LSTM模型可以更好地拟合时间序列数据。相较于利用CNN提取特征的CNN-RNN、CNN-LSTM,双层RNN、RNN、单层LSTM和双层LSTM模型,对于股价的预测具有更好的效果,说明多种神经网络混合不会确切的改善结果。对比双层RNN、单层RNN、单层LSTM和双层LSTM模型的结果,单层RNN、双层LSTM模型的比双层RNN要小、比单层LSTM要大,证实了适当加深神经网络深度才会使预测精度提高,这些结论会为投资者为决策提供帮助。因此,在对神经网络的优化过程中,先选择适当的神经网络,例如RNN、LSTM预测序列数据,CNN预测图像数据,其次适当加深神经网络的深度和调参,最后采用多种神经网络结合的方法,按照这种顺序可使神经网络模型的结果更加准确。
本文也存在着一些不足之处:第一,本文所考虑的只是上证指数,虽然基本可以代表市场的整体情况,但近年来随着股票市场的发展,越来越多的股票加入,所做的模型和方法亟待进一步的扩展和研究;第二,本文只考虑了股价数据对收盘价的影响,而没有将新闻和国家政策等因素纳入预测之中。未来的工作将会着重在这些方面进行解决,同时会研究模型在其他时间序列数据,例如汽油价格,黄金价格,是否会有更好的表现。