基于多因子与多变量长短期记忆网络的股票价格预测①

2019-08-22 02:30裴大卫
计算机系统应用 2019年8期
关键词:股票价格时刻股票

裴大卫, 朱 明

(中国科学技术大学 信息科学技术学院 自动化系,合肥 230027)

1 概述

随着社会经济的高速发展,上市公司的数量越来越多,股票因而成为如今金融领域的热点话题之一. 一方面,股票价格的走势在一定程度上决定了诸多经济行为的走向,因此股票价格的预测也受到越来越多研究者的关注. 另一方面,互联网的不断发展为我们提供了海量的金融数据,也就为机器学习算法的实现提供了可能,因此有越来越多的研究者开始尝试使用机器学习对股票价格进行预测.

目前,针对股票价格预测常用的机器学习方法有:改进的梯度提升决策树(Gradient Boosting Decision Tree,GBDT) XGBoost[1]、贝叶斯学习(Bayesian Learning,BL)[2]、卷积神经网络(Convolutional Neural Networks,CNN)[3],结合自编码器(auto encoder)的长短期记忆网络(Long Short Term Memory,LSTM)[4]等.然而文献[1,2]中的策略使用的是传统的机器学习方法,在大数据集下的性能相较深度学习较差; 文献[3]的策略虽然使用了深度学习方法,但是一般的深度神经网络或者卷积神经网络实际上并不适合股票这类序列型数据; 文献[4]的策略使用了更适合序列数据的长短期记忆网络,然而这类方法都只是将股票价格看做是一个简单时间序列来进行预测,预测的准确度相对较低,同时在长期预测下模型的鲁棒性较差. 因而越来越多的研究者希望能为股票价格这个简单的时间序列添加更多的额外特征来提升预测水平.

实际上,一只股票本身并不只包含价格信息,还包含大量经济学的外围信息,例如:资产收益率、换手率、流通股数、市盈率、市净率等,这些信息在量化选股[5]策略中经常会使用到,它们对股票本身的价格走势有一定影响作用,因而这些诸多的外围信息可以为股票价格预测模型提供一定的帮助.

本文从量化选股策略的角度出发,将其中的多因子模型(multiple-factor model)作为股票的额外特征引入到股票价格预测中,建立了一个基于多变量的长短期记忆网络(multi-variable LSTM)股票价格预测模型,用以提升只基于单一价格序列,也即单变量长短期记忆网络(univariate LSTM)的股票价格预测模型的准确性以及鲁棒性.

2 量化选股策略中的多因子模型

量化选股就是利用数量化的方法选择股票组合,使得期望的股票组合能过获得超越基准收益率的投资行为. 多因子模型是量化选股策略中一个十分常见而且十分有效的模型[5].

2.1 多因子

因子可认为是影响股票价格波动与价格走势因素的数学表达,这种因素主要来源于金融经济规律以及市场经验[5].

经济学上最早提出的因子模型是资本资产定价模型(Capital Asset Pricing Model,CAPM)[6],CAPM认为对股票价格的影响因素主要是市场风险[7],现在金融领域常用Beta系数[8]来衡量,因此可以认为CAPM是一种单因子模型.

实际上影响股票价格仅仅依赖单一的市场风险是不够的,CAPM模型暴露了诸多缺点,在此基础上又产生了法马-福莱奇三因子模型(Fama-French 3-factor Model,FF3)[9],FF3认为除了市场风险外,还存在市值风险[10]和账面市值比风险[10],因此FF3可以看做是依赖市场风险、市值风险以及账面市值比风险的三因子模型.

随着经济学的不断发展与市场经济的愈发复杂,FF3也不再能很好的解释当前股票市场环境下的诸多现象[11]. 同时归功于计算机技术的发展,计算能力的提升,可以尝试用更多的因子来描述股票预测问题,因而产生了多因子模型.

多因子模型理论认为,影响股票价格的因素来自于以下三个层面:公司层面,市场表现层面,外部环境层面[5].

公司因子来自于公司的微观结构,与公司的生产经营息息相关,一般表现为公司的财务指标,反映了公司的盈利、运营、债务和成长状况,也是量化选股中最重要的一类因子[5],它们刻画了一个公司在市场的表现,例如:资产负债比、流通市值、账面市值比、净利率等.

市场表现因子来自于股票在交易过程中的价格和交易量,他们刻画了风险、动量、资金流向等各种金融技术类指标,例如:风险系数、动态市盈率、换手率等.

外部环境层面因子来自于政治法律、宏观经济、社会习俗和技术发展等外部环境,它们刻画了一个行业的当前以及未来发展的趋势,在长期预测中十分重要,例如:宏观经济变量,市场预期变化方向等.

由于考虑了诸多股票外围因素,使得多因子模型相对比较稳定,因为在不同市场下,总会有一些因子发挥作用[11]. 简单起见可以将多因子模型描述为一个线性回归问题:

其中,Pstock为股票价格,N为因子的数量,Fi为第i个因子,wi为第i个因子的权值,ε为偏置,可以认为股票价格是受多个因子影响的,是多个因子的线性组合.

基于多因子模型的启发,本文认为多因子可以在一定程度上刻画股票的特征,因此本文对多只股票计算了多因子模型中若干典型因子,将其作为后续长短期记忆网络的输入特征来进行股票价格的预测.

3 多变量长短期记忆网络

3.1 长短期记忆网络[12]

长短期记忆网络是循环神经网络(Recurrent Neural Network,RNN)[13]的一种变体形式. 传统的RNN随着输入序列的长度变长,会导致网络的层数大大增加,进而带来梯度消失(vanishing gradient)问题[14].

LSTM的提出解决了传统循环神经网络在学习过程中由于输入序列过长带来的梯度消失问题. 图1为LSTM的展开形式,LSTM在RNN的基础上设计了新的神经单元结构. LSTM记忆的历史信息保留在细胞状态(cell state)中,其受输入门(input gate)、遗忘门(forget gate)、输出门(forget gate)的控制,三个门的激活函数均为Sigmoid.

图1 LSTM展开形式

输入门用来控制当前时刻神经单元的输入信息,遗忘门用来控制上一时刻神经单元中存储的历史信息,输出门用来控制当前时刻神经单元的输出信息. 设图2为t时刻LSTM神经单元的状态,其中Xt为当前时刻的输入,Ht-1为上一个时刻的输入,Ct-1为上一个时刻的细胞状态,则LSTM单元的更新计算方法为:

其中,Wf、Wi、WC、Wo分别为遗忘门、输入门、更新门和输出门的权值矩阵,bf、bi、bC、bo分别为遗忘门、输入门、更新门和输出门的偏置(bias),最终计算得到当前时刻的输出Ht与当前时刻更新的细胞状态Ct.

3.2 单变量长短期记忆网络

对于一般的长短期记忆网络而言,输入往往是一个单独的股票价格序列,记为:

其中,T为序列的长度,将序列数据输入网络的时候并非一次只输入一个时刻,而是会输入前序多个时刻的数据. 例如要预测t时刻的股票价格,则当前时刻的输入为:

即t时刻之前的W个时刻的数据,可以称W为序列观测窗口的长度,观测窗口的大小也决定了输入层的神经元数量; 隐藏层的神经元数量是一个超参数(hyperparameter),需要在实验中根据效果决定; 输出层的神经元数量为1表示每次预测下一个新时刻的股票价格.

图2展示了一般单变量LSTM的输入层、隐藏层和输出层随时序的变化形式.

图2 单变量LSTM输入层、隐藏层、输出层时序

3.3 多变量长短期记忆网络

在本文中场景下,网络的输入不再是一条单一的时间序列,设我们使用的因子数量为N,加之原始股票价格序列,则会有N+1条序列输入网络.

为了适应这样的问题,本文对传统的单变量LSTM的输入层与隐藏层进行了改变,单变量LSTM的输入形式为式(9)所示的向量. 而对于多条输入序列,本文使用矩阵形式进行输入,即多变量LSTM的输入形式. 设输入的多条时间序列为:

其中,j表示因子序号,这里不妨令0号代表股票价格序列,后续1到N为多因子序列. 则对于t时刻的输入可以表示为式(11)的矩阵形式:

该输入矩阵的大小取决于使用的因子数N以及观测窗口W的大小. 图3展示了多变量LSTM的输入层、隐藏层和输出层的形式.

图3 多变量LSTM输入层、隐藏层、输出层

在多变量LSTM中,某个因子序列不仅仅与自身的隐藏层存在映射关系,还与其余多个因子的隐藏层存在映射关系,使得整个网络的映射更加丰富,因而能在一定程度上提升了模型的性能,但是相比单变量LSTM而言,网络的结构更加复杂,要学习的参数激增,使得网络训练的时间有所延长.

4 多因子与多变量长短期记忆网络融合模型

4.1 模型输出层

在实际应用中通常需要预测未来的股票价格,在本文中即[T+1,L]区间的股票价格,现实中无法直接获得未来的多因子信息,例如:预测 t=T+3时刻的股票价格,必然没有t=T+1与t=T+2时刻的多因子信息.

为解决这样的问题,本文进一步增加了输出层的神经元数量,使得模型不仅仅预测下一时刻的股票价格,还同时预测下一个时刻的多因子,也即输出层神经元数量由1变为N+1,图4展示了完整的融合模型形式.

图4 改进后的多变量LSTM输入层、隐藏层、输出层

4.2 输入数据

由于原始数据为多条股票价格及因子序列,需要将其转换成类似式(11)的模型输入形式. 根据式(10),对于股票数据集中第i只股票样本有训练数据S(i):

由于观察窗口W的存在,每次输入的数据长度不能少于W个,因此输入数据的实际长度L=T-W,则在t时刻样本i的输入矩阵与该样本对应的标签有如下形式:

4.3 预测

当预测时刻t∈[T+1,L]的股票价格时,如前述原因无法获得[T+1,t-1]区间的多因子信息,因而将这一时间区间的模型输出作为t时刻的因子输入,即:

这样就可以保证在预测过程中,窗口可以正确的向后滑动.

5 实验与分析

5.1 实验数据

由于外部环境因子不容易量化与建模,本文中使用的因子主要来源于公司与市场表现两个层面,包括:收益波动率(volatility rate)、风险流通市值加权(Beta1)、风险总市值加权(Beta2)、市盈率(price earning ratio)、市净率(price/book value ratio)、市销率(price-to-sales ratio)、换手率(turnover rate)、流通市值(circulated market value)、当日成交额(amount)、流动性指标(liquidity)这10个在量化选股策略中常用的因子[5].

本文选取了2014年沪深交易所所有上市A股中共830只有效股票作为数据集. 并对所有股票计算了对应因子作为模型的输入数据. 这里选取股票编号为600000的股票展示股票价格与几个典型因子的走势.图5为600000股票在当年的价格走势,图6为其市盈率、流通市值、换手率以及流动性指标四个因子的当年走势.

图5 股票编号600000价格序列

5.2 实验环境与实验准备

5.2.1 股票数据预处理

由图5的股票价格曲线可以观察到,价格的微小波动十分频繁,从量化选股的角度而言,股票价格短期小范围的微小波动并不能作为判断股票长期价格走势高低的依据[15],因此为了让训练数据集有更好的泛化能力,本文对训练集中所有输入的价格序列进行了一阶指数平滑(first order exponential smoothing)[16]处理.通过序列平滑可以在一定程度减少短期小范围价格波动对数据集造成的影响.

图7为股票编号为600000的股票价格平滑后的序列. 通过对比图5可以观察到,平滑后的股票价格序列减少了许多小范围的价格波动,但也很好的保留了原始序列的价格趋势,这样有助于提升训练数据集的泛化能力.

5.2.2 预测模型的搭建

本次实验中的多变量长短期记忆网络模型在Keras下进行搭建. Keras是一个基于Tensorflow以及Theano封装的高级神经网络应用编程接口(deep learning application program interface),编程语言为Python.使用Keras的LSTM相关API就可以的搭建一个单变量的LSTM模型,本文在此基础上,修改了模型输入层接受训练数据的结构进而实现了一个可以输入多个序列的多变量LSTM模型.

5.2.3 实验环境与参数设置

本文的实验环境如表1所示. 本次实验的模型损失函数为均方误差(Mean Square Error,MSE),梯度下降的优化器为Adam[17],模型迭代次数为200,隐藏层神经元数量为16. 实验中的观测窗口W大小为3,也即每次预测只观测前3天的股票数据.

图6 股票编号600000的四个典型因子走势

图7 股票编号600000价格平滑后走势

5.2.4 模型评价标准

本次实验使用的模型评价标准为回归问题中典型的均方根误差(Root Mean Square Error,RMSE)[18]. 这里可以对每一只股票分别计算其均方根误差,则第i只股票样本的预测均方根误差为:

表1 实验环境

其中,M为数据集的样本总数. 模型的RMSE越小说明模型的预测准确性越高.

5.3 实验结果与分析

5.3.1 模型的预测准确率

图8展示了股票600000加入了多因子后的多变量LSTM模型的股票价格预测结果. 可以观察到,对于验证集中的新数据,模型可以较好的预测出股票价格的变化. 该序列预测的训练集与测试集的均方根误差分别为:

图9展示了股票600000在没有多因子的一般单变量LSTM模型下的股票价格预测结果,该序列预测的训练集与测试集的均方根误差分别为:

可以看到加入多因子的多变量LSTM相较于一般单变量LSTM在验证集上有11.39%的性能提升.

为了更好的对比二者预测结果的差别,图10仅显示图8和图9在验证集上的预测结果.

通过图10中的预测曲线对比可以发现,在多因子的条件下,预测曲线不仅拟合了整体价格曲线的变化趋势,同时也很好的拟合了曲线的一些短期波动,这就是多因子所带来的价值; 而在一般单变量的条件下,预测曲线虽然也很好的拟合了价格曲线的变化趋势,但是在很多细节之处却没有很好的拟合曲线的价格波动.

图9 股票编号600000的单变量LSTM价格预测结果

图10 股票编号600000验证集预测结果对比

图11在此额外展示了数据集中其他多只股票的验证集预测结果.

最终使用单变量LSTM与多变量LSTM分别对全部830只股票进行预测,并分别计算在整个数据集上的平均RMSE:

在整个数据集上加入多因子的多变量LSTM相较于一般单变量LSTM有10.12%的性能提升.

5.3.2 模型的鲁棒性

前文提到,本次实验的观测窗口W的大小为3,也即每次预测只观测前3天的股票数据. 实际上观察窗口的大小是一个对模型预测性能影响较大的模型超参数.

一般而言,观测窗口越小预测曲线拟合的越紧凑,也即反映曲线的短期特性,更能体现曲线的波动; 观测窗口越大预测曲线拟合的越松散,也即反映曲线的长期特性,更能体现曲线的趋势. 因而根据RMSE的计算方式,则观测窗口越小,RMSE就越小; 观测窗口越大,RMSE就越大. 这也就意味着如果观测窗口的变化对RMSE的值有很大影响,那么就会进而对模型的评估造成干扰.

图11 额外几只股票验证集预测结果

图12展示了RMSE随观测窗口W的变化曲线.随着观测窗口变大,无论是多变量LSTM还是单变量LSTM均受其影响导致RMSE增加. 但是在多因子的条件下,可以明显会发现RMSE受观测窗口的影响更加微弱,因而无论观测窗口如何变化,多变量LSTM预测模型更加稳定,这也是得益于多因子的引入,更多丰富的股票外围特征为模型带来了更好的鲁棒性.

6 结语与展望

本文将量化选股策略中的多因子模型概念引入到股票价格预测中,为一般基于单序列的单变量LSTM价格预测模型加入了更多经济学外围特征,不再仅仅将股票价格看做为一个简单的数学概念上的时间序列.在此之上构造了一个基于多因子的多变量LSTM股票价格预测模型,在一定程度上提升了股票价格预测的准确性与模型的鲁棒性.

图12 验证集RMSE随观测窗口W的变化趋势

在本文中用于参与训练的股票因子是较为常用的典型的量化选股因素,但是典型并不意味着适用于所有场景,实际上因子的数量是非常庞大的,在初期可以尝试通过某些方法对大量的因子进行筛选,遴选出更为适合当前场景的因子,可以进一步提升模型的预测性能. 此外多变量的LSTM网络的训练时间相对较长,在后续可以尝试对模型的计算复杂度进行优化.

猜你喜欢
股票价格时刻股票
冬“傲”时刻
捕猎时刻
本周创出今年以来新高的股票
本周创出今年以来新高的股票
上市公司财务指标与股票价格的相关性实证分析
人民币汇率与上证指数互动的实证研究
员工持股计划对股票价格的影响
实证分析会计信息对股价的影响
本周连续上涨3天以上的股票
近期连续涨、跌3天以上的股票