康瑞雪,牛保宁,李 显,苗雨欣
(太原理工大学 信息与计算机学院,山西 晋中 030600)
股票市场被视为一个国家或地区经济和金融活动的晴雨表,预测股票价格的走势,把握股票市场的变化规律,一直是研究的热点.
现有股票价格预测方法的研究集中于利用股票数据的时间序列信息,建立深度学习网络模型,提高预测的性能.长短期记忆(LSTM,Long Short-Term Memory)神经网络在序列预测问题中表现出良好的性能[1],是股票价格预测模型的首选.目前使用该模型预测股票价格主要存在两方面的问题.一方面,LSTM模型利用其链状的网络结构从前往后顺序捕获交易数据的时间序列信息,当时间跨度比较大时,前面单元传递的信息多次经过遗忘门,致使模型捕获长距离依赖的效率逐渐变低.除时间序列关系外,该模型对数据非序列性的内部关联提取能力弱,无法准确捕获对预测目标重要的特征组合,限制了模型的预测精度.另一方面,在输入数据源的选择上,现有方法以股票市场公开的最直观、最具参考价值的历史交易数据为主,尝试性地融合其他影响股票价格变动的数据,例如,从新闻、股票评论网站获得的与目标公司相关的文本类数据,对于应该融合何种数据,没有统一的规则或依据.
针对目前预测方法在预测模型和输入数据方面存在的问题,本文提出一种融合多源数据输入、具有自注意力机制的长短期记忆神经网络(SA-LSTM,Long Short-Term Memory with Self-attention)股票价格预测方法,提高股票价格预测的精度.在预测模型方面,本文提出在LSTM模型基础上,加入自注意力机制,增强模型提取数据内部相关性的能力,在捕获序列信息的基础上,进一步捕获对输出目标重要的特征组合.在输入数据方面,本文在使用历史交易数据的基础上,把其他数据分类为直接相关数据和间接相关数据,直接数据源决定股票的内在价值,如该公司的舆论新闻导向、公司自身发展状况、财务状况等.间接相关数据与股票的内在价值没有关系,但是影响股票价格波动,如宏观经济数据、关联股票数据等.同时融合两类数据,增强输入数据的多源性,提高预测精度.
本文的创新点如下:
1)提出SA-LSTM神经网络股价预测模型,解决LSTM模型捕获输入数据长距离依赖效率低且难以学习到输入交易日信息之间的关联等问题.
2)联合使用股票直接相关数据和间接相关数据作为模型输入,提高预测准确度.
目前基于LSTM模型提高股票价格预测性能的研究主要集中于对模型的改进及输入数据的选择两方面,本节从这两方面说明LSTM股票预测的现状,并简要介绍本文的方法用到的LSTM模型和自注意力机制.
近年来,随着近年来大数据技术的发展以及计算机运算能力的提升,卷积神经网络(CNN)、循环神经网络(RNN)等深度学习方法被应用到股票价格预测领域.本质上,股票数据是时间序列多维向量,LSTM神经网络作为一种新型网络,是对传统RNN模型的改进,不仅含有时序概念,且其内部特殊的门结构解决了传统RNN梯度消失的问题,在时间序列预测问题中表现出比较好的性能.闫等人对比LSTM、多层感知机、支持向量机与K近邻算法等多种模型用于股票价格预测的性能,实验结果表明LSTM模型表现出最佳预测效果[2],成为目前解决股票问题的主流预测模型.周等人使用LSTM模型,利用前15日收盘价等6个属性的数据来预测下一个工作日的开盘价,并将LSTM与Adam方法结合,证明了LSTM网络模型的预测效果优于BP神经网络模型和传统RNN网络模型[3].之后,大量的研究集中在对LSTM模型的改进.为了解决高维数据冗余,计算过程复杂的问题,庞等人在LSTM模型的基础上加入对输入数据的降维过程,提出具有嵌入式层以及带自动编码器的LSTM网络以预测股票市场[4].张等人在LSTM只考虑时序信息的基础上加入了频率信息,将多频分析和对长期依赖建模相结合共同捕获序列信息,提出了SFM(状态频率记忆网络)[5].其他改进包括使用GA(基因遗传算法)对LSTM模型进行改进[6]以及使用GRU(门控循环单元,属于LSTM的变体)对股市进行预测[7].这些改进还存在的一个共同问题是:在输入序列数据比较长时LSTM模型本身记忆能力不高,对数据内部关系的提取能力不强,模型自身很难学习到对预测结果重要的特征组合.
从众多输入中快速筛选出重要特征组合需要网络具备对关键信息分配足够的注意来突出重要的局部信息,即注意力机制.2017年,Google Brain团队在“Attention is all you need”一文中提出了一种特殊的注意力机制——自注意力机制[8].自注意力机制是对注意力机制的改进,减少对外部信息的依赖,具有很强的提取数据内部自身相关性的能力,可以更好地捕获长距离依赖关系,展现出比一般注意力机制更好的效果.自注意力机制在机器翻译[8]和自然语言理解[9]中均表现的非常出色,已成为神经网络注意力机制的研究热点.受自注意力机制的启发,本文在预测模型上与其它用LSTM模型预测股票价格方法的不同在于引入自注意力机制捕获输入数据内部的依赖关系并学习重要的特征以提高预测精度.
在为模型选择输入数据时,多数研究中使用直观的历史交易数据以及加入其它与目标股票直接相关的数据,如与该股票相关的财经新闻、社交网络评论等数据.陈等人将基本交易数作为输入使用LSTM模型预测股票回报,相比随机预测其准确性提高了14.3%[10].丁等人利用前20天的收盘价等7个基本属性提出了一种基于LSTM网络具有多个输入和多个输出的关联深度递归神经网络模型对股价进行预测[11].王等人的研究中使用交易数据及构造的技术指标进行预测,并将预测结果用于投资组合管理中,帮助投资者做出投资决策[12].Jin等人根据社交评论网站的信息对投资者情绪进行分析并将计算得到的情绪指数用作输入变量[13].孙等人在使用技术指标的基础上根据雪球网收集的评论数据构建投资者关注度指数预测股票价格并用于投资组合风险管理[14].还有一些研究从在线新闻数据中提取一些公共事件的影响用作输入特征[15].此外,股票并不是相互独立的,股票间的关联关系也是影响其价格变化的重要因素,最近的研究开始提出了根据公司之间的关系加入关联股票数据这类与其间接相关数据进行股票市场预测.在冯等人的研究中首次提出利用不同类型的关系数据构建时间图卷积神经网络用于股票市场选择预期收益高的股票组合[16].随后kim等人的研究中为寻求一种更有效的方法来选择性地聚合不同关系类型的信息,提出了层次图注意力网络,利用关系数据预测股票走势[17].使用交易数据的基础上融合直接或间接数据预测性能都有所提升,但是并未同时融合.因此,本文的创新点是构建具有自注意力机制的LSTM网络作为预测模型,使用历史交易数据、与公司估值相关的财务价格关联指标作为直接相关数据并融合相关股票数据作为间接相关数据进行股票价格预测,在融合多源数据时,现有方法采用图神经网络进行关系提取,而本文兼顾LSTM模型在处理时序问题具有的独特优势,通过计算股票之间的相关性在输入数据中加入相关股票数据.市场交易数据、财务价格关联指标与相关股票数据等多源数据的融合,以及自注意力机制与LSTM的合理整合,将进一步提高预测性能.
LSTM是一种特殊形式的循环神经网络模型[18].LSTM单元包括3个门结构:遗忘门、输入门和输出门,如图1所示.
图1 LSTM单元结构Fig.1 Cell structure of LSTM
LSTM 的具体训练过程如下:
第1步.决定从单元状态中舍弃哪些信息.当前时刻输入xt和前一时刻输出ht-1通过遗忘门输出ft(见公式(1)).
ft=σ(Wf·[ht-1,xt]+bf)
(1)
it=σ(Wi·[ht-1,xt]+bi)
(2)
(3)
第3步.把旧的单元状态Ct-1更新为新的单元状态Ct(见公式(4)).
(4)
第4步.决定输出的信息.新的单元状态经输出门Ot(见公式(5))过滤,得到本时刻的输出ht(见公式(6)).
Ot=σ(Wo·[ht-1,xt]+bo)
(5)
ht=Ot×φ(Ct)
(6)
其中,参数集合{Wf,Wi,Wc,Wo}对应不同门的权重矩阵,{bf,bi,bc,bo}表示相应的偏移项,σ和φ分别表示sigmoid和tanh激活函数.
脱离Encoder-Decoder框架,注意力机制的本质思想为一个查询Query到一系列键值对(Key-Value)的映射.假设Source(原始输入)中的构成元素是由一系列的
图2 注意力机制原理Fig.2 Attention mechanism principle
第1阶段计算每一个Query(Q)和各个Key(K)的相似度,得到每个Key对应Value(V)的权值;第2阶段是使用Softmax函数将权值进行归一化,得到直接可用的权重系数;第3阶段把权重系数和相应的键值Value进行加权求和得到最终的注意力数值.其计算公式如公式(7)所示:
(7)
其中Q∈n×dk,K∈m×dk,V∈n×dv.
作为注意力机制的一种特例,自注意力机制也被称为内部注意力机制.一般的注意力机制中Source和Target是不一样的,比如在机器翻译中,Source是需要翻译的英文句子,而Target是翻译之后的中文句子,注意力机制发生在Target的Query和Source的所有元素之间.而自注意力机制则是发生在Source或者Target的内部元素之间,可以理解为公式(7)中Q、K、V3个矩阵均来自同一个输入,此时模型变成了自注意力机制.自注意力机制减少了对外部信息的依赖,能够把输入序列中不同位置的信息联系起来,更擅长捕捉数据或特征的内部相关性.
本节给出拟采用的预测模型,详细说明模型的输入数据以及对数据的处理过程.
本文的目标是预测股票的次日收盘价,使用过去的股票特征数据预测未来价格,属于时间序列预测问题,因此,本文使用LSTM单元构建LSTM网络作为基础预测模型,顺序捕捉股票数据的时间依赖特征,同时在模型中增加自注意力机制,形成本文构建的SA-LSTM预测模型,如图3所示.
图3 SA-LSTM预测模型Fig.3 SA-LSTM prediction model
SA-LSTM模型整体结构由LSTM层、Dropout层、自注意力层以及全连接层组成.输入T天的目标股票特征数据,先经过LSTM层顺序提取T天股票数据的时间序列特征,其中LSTM的层数K通过实验调参确定.每层后面加入Dropout层,通过随机删除一些神经元,可以防止模型过拟合.自注意力层进行序列间潜在关系的学习,通过对输入的滞后交易日数据之间的比较计算注意力分布概率,捕获数据之间的联系,突出输入中重要交易日特征数据的影响作用.需要注意的是,自注意力机制可以进行并行运算,加快运算速度.最后添加全连接层输出预测值.
预测股票价格的第1步是收集适当的数据作为输入变量.根据引言中的分析,为了解决输入数据不全面的问题,进行多源数据融合时既要考虑与目标股票直接相关的数据,也要考虑与其间接相关的数据.其中直接相关数据选择目标股票公司的财务价格关联估值指标.上市公司的财务数据是自身发展情况最直观的体现,而财务价格关联估值指标可以反映公司的投资价值,是投资者进行投资决策的重要依据,也在很大程度上影响股票价格的变动.由于本文是对目标股票次日收盘价进行预测,属于每日预测,因此本文在输入变量中加入日频公司估值指标.另一方面,股票并不是独立的,研究表明股票之间是存在相关关系的,特别是在行业板块内,股票的价格波动受到其他股票的影响,因此本文选择相关股票数据作为间接数据.在输入中加入与目标股票关联密切的股票数据集合的具体做法是:由于是对收盘价进行预测,本文认为如果两个公司在一段时间内收盘价序列变动方向一致性越高,这段时间内公司关联性越密切,股票的相关性也越强.假设公司之间的关系短期内不会发生剧烈的变化.首先,收集某一证券交易所内一定数量的股票过去15年的市场交易数据并选择其中一支作为目标预测股票;然后,将各股票的历史收盘价序列分为n期,在每一期内使用斯皮尔曼相关系数分别计算目标股票收盘价序列与其他股票的相关性,相关系数越大表明序列相关性越强,相关股票对目标股票的股价影响越大;最后,各时期分别选择本期相关性系数排名前五的股票,根据计算的相关性系数进行归一化作为权重将相关股票的特征加权相加,并与目标股票特征数据结合,共同作为输入变量进行预测.具体来说,本文选择的输入数据包括:
1)目标股票的历史基本交易数据及技术指标:
a)基本市场交易数据:开盘价、最高价、最低价、收盘价、交易量、成交额等.
b)技术指标:每一个技术指标都是从一个特定的方面对股价进行观察,运用技术指标相当于对股票原始价格序列进行了特征提取,本文选择技术指标时以趋势类指标及反映股票波动情况的震荡类指标为主.
c)目标股票的换手率、涨跌幅指标.
2)财务价格关联日频估值指标:市盈率、市现率、市净率、市销率.
其中,市盈率是某支股票每股市价与每股盈利的比率,股价选取最新收盘价,一般来说市盈率越低,投资者投资回本的速度越快,投资者越看好;市现率是每股市价与每股现金流量的比率,市现率可用于评价股票的价格水平和风险水平,市现率越小,表明上市公司的每股现金增加额越多,经营压力越小;市净率是每股股价与每股净资产的比率,一般来说市净率较低的股票,投资价值较高;市售率是每股市价与每股销售收入之比,可以理解为如果获得公司1元的销售收入需要投入多少钱,一般来说市销率越小的公司越值得投资,因为这意味着投资者赚钱的成本更低.
3)相关股票数据:根据本文提出的方法,使用与目标股票相关性最强的5支股票的加权特征数据作为相关股票数据,与目标股票特征数据结合.
即模型输入数据包括3大部分,将上述各数据依次拼接形成36维的目标股票每日特征数据.
X=[X1,X2,X3]
X1=[Po,Ph,Pl,Pc,V,Pa,T,Chg,MA5,MA10,EMA12,EMA26,MACD,ROC,CCI,RSI,MOM,WILLR]
X2=[PE,PB,PS,PCF]
ROC′,CCI′,RSI′,MOM′,WILLR′]
其中,向量X1中的各分量依次表示开盘价、最高价、最低价、收盘价、交易量、成交额、换手率、涨跌幅指标、5日和10日移动平均线指标、12日和26日指数移动平均值指标、平滑异同移动平均线指标、变动率指标、顺势指标、相对强弱指标、动量线指标及威廉指标;向量X2中的各分量依次表示市盈率、市净率、市销率、市现率;向量X3中的各分量则表示相关股票的加权开盘价、最高价、最低价、收盘价、5日和10日移动平均线指标、12日和26日指数移动平均值指标、平滑异同移动平均线指标、变动率指标、顺势指标、相对强弱指标、动量线指标及威廉指标.
数据预处理包括数据清洗,特征提取和归一化处理.
第1步.数据清洗.清洗获取的原始股票数据中与预测无关的数据,并使用前向填充的方法对数据中的缺失值进行填充,调整数据中乱序排列的数据,将股票交易日期作为时间特征便于查询数据索引以及融合相关股票特征时进行时间对齐.
第2步.对原始数据进行特征提取.通过构造技术指标的方法分别对目标股票和相关股票的收盘价进行特征提取.对于最前面缺失的技术指标值采用后向填充的方法进行填充.
第3步.对数据进行归一化处理.原始股票的不同特征数据具有不同的量纲和量纲单位,如果直接使用未处理的原始数据输入预测模型会给整个模型带来负面影响,为了让这些数据具备可比性,需要采用归一化方法来消除这些差异.将原始各指标数据按比例缩放,去除数据的单位限制,便于不同单位或量级的指标能够进行比较和加权,同时加速模型的训练过程.本文将原始数据归一化到[0,1]之间,归一化的表达式如式(8)所示:
(8)
式中,min、max分别为归一化后股价特征数据中的最小值和最大值.
最后,根据交易日期将目标股票自身和相关股票的特征数据进行拼接共同作为目标股票第t天的输入特征数据,本文选定的输入是滞后10天目标股票的全部特征数据,输出第t天的收盘价.
本节通过实验分析SA-LSTM模型预测股票次日收盘价的性能.
1)实验环境
本文采用目前流行的深度学习框架Keras进行实验,采用GPU加速,具体实验环境配置如表 1所示.
表1 实验环境配置Table 1 Experimental environment configuration
2)实验数据集
本文的实验数据来源于BaoStock这一开源的数据接口包.为了验证所提方案的有效性,本文随机选择沪深300指数(HS 300)中600016(民生银行)、600028(中国石化)、600019(宝钢股份)、600030(中信证券)、600009(上海机场)这五支大盘股票以及中证500指数(CSI 500)中600131(国网通信)、600158(中体产业)、600216(浙江医药)、600259(广晟有色)、600315(上海家化)这5支中小盘股票为目标股票,并根据接口获取的沪深300和中证500成分股中各自前100支股票作为相关股票的选取范围进行实验.
3)评价指标
本文通过建立模型对目标股票的次日收盘价进行预测,属于回归问题的范畴.因此选择均方误差(MSE)、根均方误差(RMSE)、平均绝对误差(MAE)和决定系数(R2)作为评估模型性能的评价指标.它们的计算公式如式(9)~式(12)所示.
(9)
(10)
(11)
(12)
4)模型参数设置与训练
本文采用Keras框架构建股价预测模型,通过使用不同LSTM层数进行的多次实验确定层数K为2,由于LSTM顺序捕捉序列信息,很难进行并行优化,更深的层数不仅会带来内存开销及时间开销的增加,同时也会降低模型泛化能力.即网络结构自上而下为双层LSTM、自注意力层和全连接层,LSTM层的维度分别设置64和128,使用softsign激活函数(LSTM中使用softsign激活函数不容易出现饱和),自注意力层使用softmax激活函数,全连接层使用relu激活函数,由于最终输出次日收盘价,故全连接层的维度设置为1.
在模型训练方面,实验采用随机梯度下降法,数据被分批输入模型,批量样本大小设置为64,输入数据的时间步长设置为10,迭代次数设置为1000进行训练,并采用RmsProp优化器,初始学习率设置为0.001,为防止过拟合加入Dropout机制,Dropout参数设置为0.2.
5)对比实验
为了验证本文提出的融合多源数据输入具有自注意力机制的长短期记忆神经网络(SA-LSTM-MS)股价预测模型的有效性,实验设计如下:
实验1.验证加入自注意力机制后的长短期记忆神经网络模型的预测性能.将最基本的股票市场交易数据作为输入,分别使用全连接神经网络(ANN-B)、长短期记忆神经网络(LSTM-B)以及加入自注意力机制的长短期记忆神经网络(SA-LSTM-B)作为预测模型进行实验,通过比较实验结果中各项评价指标值,验证本文提出的改进后预测模型的效果.
实验2.对多源数据输入的有效性进行验证.采用本文提出的具有自注意力机制的长短期记忆神经网络模型作为预测模型,在使用基本市场交易数据(SA-LSTM-B)的基础上分别单独加入财务数据(SA-LSTM-BF)、相关股票数据(SA-LSTM-BR)以及将两方面数据同时加入(SA-LSTM-MS)进行实验对比,验证同时融合与股票直接相关及间接相关的数据源作为输入对模型预测性能的提升效果.
本文在HS 300大盘股及CSI 500中小盘股随机选取的不同目标股票上分别使用实验1中的模型(图4、图5中的3个模型)和实验2中的模型(图6、图7中的4个模型)进行股票价格预测,各模型在超参数的选取方面尽量与本文提出的模型(SA-LSTM-MS)设置一致,比较在不同股票指数上多个数据集使用不同模型预测各项评价指标值的变化趋势,并计算了不同股票指数上总体平均值在不同模型下的各项评价指标值.实验1使用不同模型在不同股票数据集上的预测结果如图4、图5所示,各项评价指标平均值如表2、表3所示.
表2 HS300使用不同模型各项评价指标平均值Table 2 Average value of various evaluation index values using different models on the HS300 index data set
表3 CSI500使用不同模型各项评价指标平均值Table 3 Average value of various evaluation index values using different models on the CSI500 index data set
图4 HS300使用不同模型各项评价指标值的变化Fig.4 Changes of various evaluation index values using different models on the HS 300 index data set
图5 CSI500使用不同模型各项评价指标值的变化Fig.5 Changes of various evaluation index values using different models on the CSI 500 index data set
根据实验1的结果可以发现,在预测模型方面,使用相同数据作为输入,本文提出的融合自注意力机制的LSTM模型(SA-LSTM-B)相比使用LSTM模型(LSTM-B)以及使用ANN模型(ANN-B),在大盘股和中小盘股的不同数据集上的预测误差指标值MAE、MSE和RMSE均有所下降,而决定系数R2则有所提高,且其总体平均值也呈现这样的趋势,即具有更小的预测误差和较高的拟合程度.
基于自注意力机制的LSTM模型可以有效学习到输入中各交易日股票特征数据之间的关联性,捕获关键信息,因而自注意力机制的加入在提升模型整体性能时发挥着重要的作用.
实验2使用不同模型在不同股票数据集上的预测结果如图6、图7所示,各项评价指标平均值如表4、表5所示.
图6 HS300使用不同输入各项评价指标值的变化Fig.6 Change of various evaluation index values using different inputs on the HS 300 index data set
图7 CSI500使用不同输入各项评价指标值的变化Fig.7 Change of various evaluation index values using different inputs on the CSI 500 index data set
表4 HS300使用不同模型各项评价指标平均值Table 4 Average value of various evaluation index values using different models on the HS300 index data set
表5 CSI500使用不同模型各项评价指标平均值Table 5 Average value of various evaluation index values using different models on the CSI500 index data set
根据实验2的结果可以发现,在输入数据方面,本文同时融合与其直接相关的财务数据以及间接相关的关联股票数据作为输入,通过对比大盘股及中小盘股指数中多个数据集上融合多源数据(SA-LSTM-MS)与使用市场交易数据(SA-LSTM-B)在相同预测模型上各项评价指标值的变化, 多源数数据(SA-LSTM-BF、SA-LSTM-BR)股票预测精度均有不同程度的小幅提升,说明本文加入的变量均为提升模型性能的有效输入变量,但更全面的输入数据可以更有效的提升预测性能.
为了更直观地展示自注意力机制的加入以及多源数据的融合两方面改进对LSTM模型预测性能的提升效果,本文对比了使用SA-LSTM-MS模型与LSTM-B模型在实验选取的所有股票数据测试集上的预测曲线,如图8所示.
综合上述两个实验及图8的结果表明,本文提出的融合多源数据输入具有自注意力机制的长短期记忆神经网络股价预测模型对股票次日收盘价的预测值与实际值更加接近,股价趋势也更加拟合,在多个数据集上均展现出最优的预测效果.
图8 模型改进前后股票价格预测结果对比图Fig.8 Comparison chart of the real price prediction results of the basic model and the improved model
本文在LSTM神经网络模型的基础上,提出融合多源数据输入具有自注意力机制的LSTM神经网络股价预测模型,对股票次日收盘价进行预测.在预测模型中加入自注意力机制提升模型捕获数据长距离依赖的效率,有效学习数据内部相关性.为了丰富输入数据源,本文在使用基本市场交易数据作为输入变量的基础上同时融合与股票直接相关和间接相关的数据,得到更全面的股票特征表示方式.通过在不同股票数据集上与多个基准模型进行对比实验与分析,结果表明本文提出的模型具有更小的预测误差和更好的拟合效果.因此,该模型具有广阔的应用前景,与现有模型有很强的竞争力.
模型的改进可以从以下两个方面进行改进:一方面,在资源允许的情况下可以在更广泛的范围寻找相关股票,以及考虑使用其它更有效的方式加入相关股票数据;另一方面,融合更全面的直接相关及间接相关数据,以进一步提高预测性能.