北京物流信息联盟

【华泰金工林晓明团队】人工智能选股之循环神经网络——华泰人工智能系列之九

华泰金融工程 2021-09-13 08:50:48

摘要

循环神经网络选股信息比率优于线性回归,其中LSTM模型表现最好

       神经网络是近年来迅猛发展的人工智能的核心技术,本篇报告选取具有时间序列预测能力的循环神经网络作为研究对象,对传统RNN、LSTM、GRU三种循环神经网络模型进行系统性的测试。在月频的多因子选股方面,循环神经网络具有出色的样本外预测平均正确率,但是样本外平均AUC值表现一般。神经网络在年化超额收益率、信息比率上优于线性回归算法,但是最大回撤普遍大于线性回归算法。在目前测试的所有神经网络模型中,LSTM表现最好,GRU的表现和LSTM相近。


循环神经网络模型具有较好的预测能力

        我们在2011-01-31 至 2017-10-31的回测区间中分7个阶段训练并测试模型,传统RNN、LSTM以及GRU三种模型样本外平均AUC分别为0.5410,0. 5429,0. 5576,样本外平均正确率分别为56.85%,58.57%,57.61%。可以看出,循环神经网络具有出色的样本外平均正确率,但是样本外平均AUC值表现一般。

 

LSTM模型超额收益和信息比率的表现优于线性回归

  在2011-01-31 至 2017-10-31的回测区间中,对于全A选股的行业中性策略(每个行业分别选股数目为2,5,10,15,20),LSTM模型相对于中证500的超额收益在20.36%~25.05%之间,超额收益最大回撤在13.13% ~16.84%之间,信息比率在2.95~3.76之间,除了最大回撤,表现优于线性回归。总的来看,LSTM模型在年化超额收益率、信息比率上优于线性回归算法,但是最大回撤普遍大于线性回归算法。在目前测试的所有神经网络模型中,LSTM表现最好。另一种循环神经网络模型GRU的表现和LSTM相近。


通过分析神经网络训练时的权值更新过程使得神经网络具有可解释性

  一直以来,神经网络一类模型都在模型可解释性上受到诟病,我们通过分析LSTM网络训练过程中神经元的权重更新过程以及权重值分布情况,打开了神经网络这个“黑箱”,使得模型具有可解释性。


在月频多因子选股中,神经网络模型综合表现不如XGBoost

目前看来,以LSTM为代表的神经网络在月频的多因子选股上表现并不突出,综合表现不如XGBoost。我们认为这是因为月频的多因子数据量较小,并不利于神经网络模型发挥其优势。之后我们将尝试在更加高频、数据量更大的场景中继续研究神经网络模型。

                                                                                

风险提示:通过循环神经网络模型构建选股策略面临市场风险,是历史经验的总结,存在失效的可能。


本文研究导读

        就在华泰金工人工智能选股系列报告陆续推出的过程中,全球人工智能的研究进展也一刻从未停下,从AlphaGo到Master再到AlphaGo Zero,人工智能已经在特定领域具备了战胜人类以及战胜自我,不断进化的能力。日常生活中,从手写数字的自动识别,到电脑手机上的指纹解锁功能、语音识别系统,再到无人驾驶、智能医疗、智能投顾等热门领域,处处都有人工智能的身影。神经网络作为当前人工智能的核心技术,应用到多因子选股领域效果到底如何?本文挑选了具有时间序列预测能力的循环神经网络,并将主要关注如下几方面的问题:

 

1.     循环神经网络模型相比传统神经网络模型有何区别与联系?循环神经网络模型包含哪些模型,关键参数都有哪些?

 

2.     LSTM网络和GRU网络相比传统RNN的优势在哪里?

 

3.     循环神经网络模型如何构建,参数如何选取,如何解释模型的训练过程?

 

4.     最后是组合构建的问题。在衡量过不同模型的表现之后,应如何利用模型的预测结果构建策略组合进行回测?全部A股票池内选股效果(超额收益、最大回撤、信息比率等)的异同是什么?

 

我们将围绕以上问题进行系统性的测试,希望为读者提供一些扎实的证据,并寻找到有效的分类方法,能够对本领域的投资者产生参考价值。


循环神经网络简介


  当我们对新事物进行思考时,其实并不每次都是从零开始,过往的经验总会给我们一些启发。对于一段连续的语音、一篇连续的文章,我们可以根据句子的开头去猜测结尾,但传统的神经网络却很难做到这一点。循环神经网络(Recurrent Neural Networks)正是处理这一系列问题的专家。RNN的前身是1982年由John Hopfield 提出的Hopfield模型,由于实现困难外加没有合适的应用领域,一直没有得到学界重视,近年来由于自然语言处理的需求,RNN得以深度发展。


循环神经网络与传统神经网络(ANN)的区别

        循环神经网络与传统神经网络模型最大不同之处是加入了对时序数据的处理。以股票多因子为例,ANN将某支股票某一时间截面的因子数据作为输入值,下期超额收益作为输出值;而RNN是将某支股票的长期因子数据作为时间序列,取过去一段时间内的数据作为输入值。这样做最大的好处便是保持了信息的持久化,这和我们的直观感受也是相符的,正如古希腊哲学家修昔底德所说的一样,“历史会重演”。

循环神经网络RNN

RNN概述

顾名思义,RNN是包含循环的网络,如图表1左侧所示,神经网络的模块正在读取某个输入x,并输出一个值o,循环可以使得信息从当前步传递到下一步。从表面看,这样的网络结构较难理解,因此将其展开为图表1右侧。对于从序列索引1到T的时间序列数据,如果关注t时刻附近的网络结构,                                               代表了在序列索引号t时刻训练样本的输入,同理和代表了在序列索引号t-1时刻和t+1时刻训练样本的输入;代表在t时刻模型的隐藏状态,与ANN不同的是,不仅由决定,也受到的影响;代表在t时刻模型的输出,只由模型当前的隐藏状态决定;是t时刻样本序列的真实值;是t时刻模型的损失函数,通过和计算得出;U、V、W这三个矩阵是模型的参数,它们在整个模型中是共享的,这和传统的ANN模型不太一样,同时也体现了RNN模型循环反馈的思想



RNN的使用形式

        使用RNN时的主要形式有4种,如图表2所示。

1.      Many to many,每一个输入都有相对应的输出,例如给视频的每一帧贴标签;

2.      Many to one,整个序列只有一个输出,例如文本的情感分析;

3.      One to many,通过一个输入产生一个序列,例如给一张图片加上一串解说词;

4.      Many to many,并不一一对应,典型应用是翻译领域。

 

        本文的目的是希望通过RNN模型来对股票进行分类,因此选用Many to one这种形式。



RNN分类算法基本步骤

我们先关注RNN的前向传播算法,对于任意t时刻,隐藏状态ht可由xt和xt-1得到

        其中,   σ为RNN的激活函数,此处一般为tanh,b为线性关系的偏倚。模型的输出的表达式比较简单


最终,t时刻的预测输出为

        注意由于我们的RNN是分类模型,所以此处的激活函数一般是softmax。

        有了前向传播算法的基础,下面进行反向传播算法的推导。与传统神经网络模型一致,RNN也是通过梯度下降的方法来寻找U、V、W这三个参数的最优解,此处我们考虑较复杂的Many to Many形式,损失函数暂定为对数损失函数,由于序列的每个位置都有损失函数,因此最终损失为

        其中,V、c的梯度计算比较简单

        由于t时刻的梯度损失为当前位置输出对应的梯度损失和t+1时刻的梯度损失两部分之和,我们定义t时刻隐藏状态的梯度为


        再根据δt求得W、U、b的梯度表达式

        接下来的步骤与ANN类似,初始化权值,迭代更新权值至小于阈值或超出预定次数为止,在此就不再赘述了。需要注意的是,本文所涉及的股票分类问题属于上文所述的RNN使用形式2(Many to one),梯度表达式实际与ANN并无区别,本部分所做推导只是RNN的一般形式。


RNN主要参数

        图表3中列出了RNN的主要参数,参数分两大类,一类是神经单元参数,一类是训练模型参数。


RNN存在的问题

      相对于传统ANN,深度神经网络的头号问题就是梯度消失,RNN作为模型复杂度较高的神经网络模型,使得问题更加棘手,本文从两个角度展开探讨。

 

1.     具体表现

        通过下面这个例子我们可以看出,RNN作为专门处理信息持久化的一种模型,也会遇到从长期记忆退化到短期记忆的窘境,尝试处理下面这段文字:

小明是小刚的朋友。小明今年15岁,小刚今年25岁。小明是一名学生,认真刻苦,成绩优异,小刚是一名教师,尽心尽力,诲人不倦。小明借给小刚五元钱,小明是小刚的______?

 

2.     数学推导

        Yoshua Bengio在1994年给出了RNN梯度消失的数学解释.在每个时刻,RNN的隐层输出可以表示为:

        在反向传播时, 我们需要将RNN沿时间维度展开, 隐层梯度在沿时间维度反向传播时需要反复乘以系数,因此,尽管理论上RNN可以捕获长距离依赖,但实际应用中,由于谱半径(spectral radius)的不同,RNN将会面临两个挑战:梯度爆炸(gradient explosion)和梯度消失(vanishing gradient)。梯度爆炸会影响训练的收敛,甚至导致网络不收敛;而梯度消失会使梯度趋向于0,导致模型收敛速度非常慢,网络学习长距离依赖的难度增加。这两者相比,梯度爆炸相对比较好处理,可以用梯度裁剪(gradient clipping)来解决,而如何缓解梯度消失是RNN及几乎其他所有深度学习方法研究的关键所在。



长短期记忆网络LSTM

LSTM概述

传统RNN模型容易产生梯度消失的问题,难以处理长序列的数据。而造成梯度消失的原因,本质上是因为隐藏层状态ℎ?的计算方式导致梯度被表示为连乘积的形式,因此Hochreater和Schmidhuber在1997年提出了长短期记忆网络LSTM,通过精心设计的隐藏层神经元缓解了传统RNN的梯度消失问题。

 

LSTM与RNN的区别

        在RNN 模型中,在每个序列索引位置都有一个隐藏状态ℎ?,如果我们略去每层都有的??,??和 ??,那么模型可以简化为如图表4 的形式,通过线条指示的路径可以清晰地看出隐藏状态ℎ?由ℎ?−1和??共同决定。ℎ?将一方面用于计算当前层模型的损失,另一方面用于计算下一层的ℎ?+1。



        与RNN不同的是,LSTM被设计拥有了更为精巧的隐藏状态网络模型结构,如图表5,可以看到对比RNN较为简单的结构,LSTM要复杂的多,为了能够清晰的表达出LSTM设计的独到之处,我们将对其隐藏状态结构进行分析。



LSTM隐藏状态结构

        LSTM 模型中,每个序列索引位置t 时刻被向前传播的,除了和RNN 一样的隐藏状态ℎ?,还多了另一个隐藏状态,如图表6 中的标黑横线。这个隐藏状态被我们称为细胞状态??(Cell State),??在LSTM 中实质上起到了RNN 中隐层状态ℎ?的作用。除了细胞状态,图中还有其他许多结构,这些结构一般称之为门控结构(Gate)。LSTM 模型在每个序列索引位置t 的门控结构一般包括遗忘门,输入门和输出门三种,下面我们将对门控结构和细胞状态一一分析。



        图表7 是LSTM 模型的遗忘门部分,遗忘门负责以一定的概率控制是否遗忘上一层的隐藏细胞状态,数学表达式为:

        ?为sigmoid 激活函数。由于??的值在[0,1]之间,因此代表了遗忘上一层细胞状态的概率。语言模型角度看,当遇到新的主语??并希望对下一个词进行预测时,我们希望能够忘记旧主语ℎ?−1的一些特征。



        图表8 是LSTM模型的输入门部分,输入门负责控制是否将当前时刻输入??融入细胞状态,数学表达式为:

        ?为sigmoid 激活函数。由于??的值在[0,1]之间,因此代表了记住这一层输入信息的概率。通过??和? ̃?两者相乘获得当前细胞状态需要添加的信息。从语言模型角度看,即当遇到新主语??时,我们希望在细胞状态? ̃?中添加新主语??的属性信息。


        图表9 是LSTM 模型的细胞状态更新部分,在研究输出门之前,我们先关注细胞状态是如何更新的。遗忘门和输入门的结果都会作用于当前细胞状态??,数学表达式为:

        ⨀是矩阵的Hadamard 积(两个矩阵相同位置元素的乘积)。新状态即为旧状态乘以需要忘记的概率,加上新的候选值乘以需要更新的比率。从语言模型角度看,这里就是我们实际丢弃旧主语属性信息,并根据之前步骤添加新信息的地方。


        图表10 是LSTM 模型的输出门部分,输出门是对当前细胞状态的过滤,目的是从细胞状态??产生隐藏状态ℎ?,数学表达式为:

        ?为sigmoid 激活函数。由于??的值在[0,1]之间,决定了细胞状态中哪些部分需要输出。然后将细胞状态输入到tanh 函数中,乘以输出门限值,最终只输出我们想要输出的那部分。从语言模型角度看,模型可能输出主语的单复数信息,那么我们就能确定到底是“他”还是“他们”。



LSTM如何缓解梯度消失问题

        为了方便分析,我们把上一节中介绍LSTM隐藏状态结构的所有公式都罗列如下:

        联立上面的式子可得:

    

        由以上两式可以看出,ℎ?不仅要由ℎ?−1计算得到,还要由??计算得到,??的计算本身不依赖于系数??,当遗忘门??被打开时,??的梯度可以有效地反向传递给??−1。而系数??正是造成传统RNN 模型梯度消失的根源所在,所以通过引入另一个隐藏状态??和3 个门控结

构,LSTM 缓解了神经网络训练中的梯度消失问题。



门控循环单元GRU

        门控循环单元(Gated Recurrent Units)由 Cho 在2014 年提出,是LSTM 模型的一类常见变种。与LSTM 不同的是,GRU 将遗忘门和输入门合成为单一的更新门。如图表11,GRU将输入门??和遗忘门??融合成单一的更新门??,并且融合了细胞状态??和隐藏状态ℎ?。

 



GRU 隐藏状态结构

        图表11 中??是GRU 模型的重置门部分,用于控制前一时刻隐藏状态ℎ?−1对当前状态的影响。若ℎ?−1不重要,从语言模型角度看,即从当前开始表达新的意思,与上文无关,则重置门关闭,数学表达式为:


        图表11 中??是GRU 模型的更新门部分,用于决定是否忽略当前输入??,类似LSTM 中的输入门??。从语言模型角度看,即判断当前词??对整体意思的表达是否重要,数学表达式为:


        定义完GRU 的重置门和更新门之后,我们再来看GRU 的细胞更新。当更新门打开时,ℎ?由ℎ?−1和??决定;当更新门被关闭时,ℎ?将仅由ℎ?−1决定,帮助梯度反向传播,与LSTM相同,这种机制有效地缓解了梯度消失现象。数学表达式为:


GRU对比LSTM

Greff在2015年比较了LSTM常见的变种,发现它们的学习效果相差无几;GRU的主要优势在于其构造简单,相比LSTM减少了一个门控结构,少了很多矩阵乘法运算,因此在训练数据量很大的情况下,GRU相比LSTM能节省很多时间。


循环神经网络模型测试流程


测试流程


        本文将要测试的循环神经网络模型有3种:传统RNN,LSTM,GRU,为了保证三种模型的一致性和可比性,对它们采用完全相同的测试流程。循环神经网络模型的构建方法包含下列步骤:

1.  数据获取:

a)       股票池:全A股。剔除ST股票,剔除每个截面期下一交易日停牌的股票,剔除上市3个月内的股票,每只股票视作一个样本。

b)       回测区间:2011-01-31 至 2017-10-31。分7个阶段回测,如图表14所示。

2.  特征和标签提取:每个自然月的最后一个交易日,计算之前报告里的70个因子暴露度,作为样本的原始特征;计算下一整个自然月的个股超额收益(以沪深300指数为基准),作为样本的标签。因子池如图表13所示。

3.  特征预处理:

a)       中位数去极值:设第T期某因子在所有个股上的暴露度序列为                                               ,为该序列中位数,为序列的中位数,则将序列中所有大于的数重设为,将序列中所有小于的数重设为;

b)       缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一级行业相同个股的平均值。

c)       行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值做线性回归,取残差作为新的因子暴露度。

d)       标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差,得到一个新的近似服从分布的序列。

4.  训练集和交叉验证集的合成:在每个月末截面期,选取下月收益排名前30%的股票作为正例(),后30%的股票作为负例()。将训练样本合并,随机选取90%的样本作为训练集,余下10%的样本作为交叉验证集。

5.  样本内训练:使用RNN模型对训练集进行训练,考虑到我们将回测区间按年份划分为7个子区间,因此需要对每个子回测的不同训练集重复训练。

6.  交叉验证调参:模型训练过程中,观察交叉验证集loss的变化,当交叉验证集的loss在连续10轮迭代后都没有提升时,停止模型训练。选取交叉验证集loss最低的一组参数作为模型的最优参数。

7.  样本外测试:确定最优参数后,以T月月末截面期所有样本预处理后的特征作为模型的输入,得到每个样本的预测值,将预测值视作合成后的因子。进行单因子分层回测。回测方法和之前的单因子测试报告相同,具体步骤参考下一小节。

8.  模型评价:我们以分层回测的结果作为模型评价指标。我们还将给出测试集的正确率、AUC等衡量模型性能的指标。



循环神经网络参数选择和网络结构

        LSTM缓解了传统RNN的梯度消失问题,近年来在文本分析、时间序列预测方面有广泛的用途。因此本文以LSTM模型为例,对模型的参数选择和测试结果进行说明,其他模型与之类似。

 

        由于神经网络模型训练缓慢且参数众多,难以借助本系列之前报告中所提到的网格搜索进行参数寻优。因此LSTM的参数设置中加入了一些经验选择的方法。具体参数选择如下:

1.       输入维度(input_shape):70,对应70个因子。

2.       输出维度(units):2,对应二分类。

3.       输入序列数目(time_steps):5。这是循环神经网络独有的参数,即预测当前时点输出所使用的历史输入序列数目。在月频的多因子选股中,该参数太大会使得满足要求的样本太少(因为股票停牌造成因子缺失),太小又难以发挥循环神经网络的特性,因此设定为5,即预测下个月股票的涨跌使用过去5个月的因子为输入。

4.       隐藏层数:2层。在测试中,我们发现1层隐藏层的LSTM预测能力有限,而2层以上的LSTM具有了不错的预测能力,因此把隐藏层数目定为2层,这兼顾了模型的预测能力和低复杂度。

5.       隐藏层神经元数(units):每层都为100个。考虑到因子数目为70个,选择100个隐藏层神经元数顾了模型的预测能力和低复杂度。

6.       随机断开输入神经元比率(dropout):0.2。该参数主要用来避免过拟合。

7.       初始化权值方法(kernel_initializer):RandomUniform。使用正态分布初始化权值。

8.       神经元激活函数(activation):tanh。这是LSTM中最常用的激活函数。

9.       单个训练批次样本数(batch_size):1000。

10.    优化器(optimizer):RMSProp。该优化函数相比随机梯度下降(SGD)收敛速度快很多,可以大大节省训练时间。

11.    学习速率(learning_rate):0.001。该速率兼顾了收敛速度和收敛稳定性。

12.    损失函数(loss function):categorical_crossentropy。该损失函数适合二分类情景。

 

        在设置了以上参数后,LSTM网络的结构如图15所示。可以看到,该模型的输入是一个5*70的向量,两个LSTM隐藏层都有100个神经元,每个隐藏层之后都有一次dropout,最后通过一个全连接层(Dense)输出,输出维度是2,对应二分类。Num代表输入模型的样本数量。




循环神经网络模型测试结果

循环神经网络正确率与AUC分析

        图16和图17展示了LSTM、GRU、传统RNN每一期样本外的正确率和AUC值随时间的变化情况。我们在2011-01-31 至 2017-10-31 的回测区间中分7 个阶段训练并测试模

型,三种模型样本外平均AUC分别为0.5429,0.5576,0.5410,样本外平均正确率分别为58.57%,57.61%,56.85%。


        图表18和图表19展示了LSTM模型训练过程中训练集和验证集正确率和loss的变化情况,可以看到,当迭代次数超过1000次以后,验证集的正确率和loss不再变得更优,LSTM模型可以停止训练了。



LSTM模型训练过程分析

        一直以来,神经网络一类模型都在模型可解释性上受到诟病,模型结构的复杂使人们对于模型的分析难以下手,人们普遍认为神经网络是一个黑箱。但是实际上随着实现工具的完善,分析神经网络的内部结构逐渐变得可行,我们借助Python Keras包中相关功能,初步对LSTM模型训练过程进行了分析。

 

       为了让读者能够更好地理解LSTM 模型的迭代优化过程,我们在这里以模型权重为例展开讨论。第一层LSTM 有四类权重矩阵,包括输入部分、遗忘部分、细胞状态部分以及输出部分,为了能直观的展示权重变化的过程,我们截取第一层LSTM 连接当前输入??和当前状态ℎ?的输入部分权重,即上文中的??。图表20 是In_capital 因子所对应的权重,由于全部显示In_capital 因子连接的100 个隐藏状态需要的空间较大,因此我们截取了前15 个隐藏状态。图中纵坐标为迭代次数,数值为当前权重值,可以看到随着迭代的加深,部分权重值的渐变过程很明显(例如第1、3、4、7、15 列),即这部分权重被训练的越来越好,对预测下期收益率的重要性越来越大。



        图表21是assetturnover_ttm因子对应的权重变化过程,可以看到随着迭代的进行,权重值的渐变过程并不明显,即模型误差的反向传播并没有对这部分参数进行过多的修正,代表着assetturnover_ttm因子可能对下月收益率的解释性弱于In_capital因子。


        图表22是对LSTM第一层参数总体的描述,横坐标代表权重值,纵坐标为迭代次数,可以发现迭代越深,参数总体描述曲线越扁平,参数分布的范围越广;即随着模型的训练,各参数的权重被区分得越来越好。


        第二层LSTM的100个神经元与第一层的100个神经元相连接,为了直观显示变化过程,我们选取第二层LSTM的第一个神经元连接的权重值。图表23是其与第一层前15个神经元对应的权重值,可以看到部分列的颜色渐变比较明显,这说明模型的训练是有效的。

        与第一层类似,图表24是对第二层LSTM参数总体的描述,随着模型的训练,各参数被区分得越来越好。


LSTM模型分层回测分析

        循环神经网络模型,最终在每个月底可以产生对全部个股下月上涨或下跌的预测值。因此可以将其看作一个因子合成模型,即在每个月底将因子池中所有因子合成为一个“因子”。接下来,我们对该模型合成的这个“因子”(即个股下期收益预测值)进行分层回测,从各方面考察该模型的效果。仿照华泰单因子测试系列报告中的思路,分层回测模型构建方法如下:

 

1.      股票池:全A股,剔除ST股票,剔除每个截面期下一交易日停牌的股票,剔除上市3个月以内的股票。

2.      回测区间:2011-01-31至2017-10-31(按年度分为7个子区间)。

3.      换仓期:在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日按当日收盘价换仓。

4.      数据处理方法:将LSTM模型的预测值视作单因子,因子值为空的股票不参与分层。

5.      分层方法:在每个一级行业内部对所有个股按因子大小进行排序,每个行业内均分成N个分层组合。如图表25所示,黄色方块代表各行业内个股初始权重,可以相等也可以不等(我们直接取相等权重进行测试),分层具体操作方法为N等分行业内个股权重累加值,例如图示行业1中,5只个股初始权重相等(不妨设每只个股权重为0.2),假设我们欲分成3层,则分层组合1在权重累加值1/3处截断,即分层组合1包含个股1和个股2,它们的权重配比为0.2:(1/3-0.2)=3:2,同样推理,分层组合2包含个股2、3、4,配比为(0.4-1/3):0.2:(2/3-0.6)=1:3:1,分层组合4包含个股4、5,配比为2:3。以上方法是用来计算各个一级行业内部个股权重配比的,行业间权重配比与基准组合(我们使用沪深300)相同,也即行业中性。

6.      评价方法:回测年化收益率、夏普比率、信息比率、最大回撤、胜率等。

        这里我们将展示LSTM模型的分层测试结果。

 

        下图是分五层组合回测绩效分析表(20110131~20171031)。其中组合1~组合5为

按LSTM 模型打分从大到小排序构造的行业中性的分层组合。基准组合为行业中性的等权组合,具体来说就是将组合1~组合5合并,一级行业内部个股等权配置,行业权重按当期沪深300行业权重配置。多空组合是在假设所有个股可以卖空的基础上,每月调仓时买入组合1,卖空组合5。回测模型在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日按当日收盘价调仓。


        下面四个图依次为:

1.      分五层组合回测净值图。按前面说明的回测方法计算组合1~组合5、基准组合的净值,与沪深300、中证500净值对比作图。

2.      分五层组合回测,用组合1~组合5的净值除以基准组合净值的示意图。可以更清晰地展示各层组合在不同时期的效果。

3.      组合1相对沪深300月超额收益分布直方图。该直方图以[-0.5%,0.5%]为中心区间,向正负无穷方向保持组距为1%延伸,在正负两个方向上均延伸到最后一个频数不为零的组为止(即维持组距一致,组数是根据样本情况自适应调整的)。

4.     分五层时的多空组合收益图。再重复一下,多空组合是买入组合1、卖空组合5(月度调仓)的一个资产组合。多空组合收益率是由组合1的净值除以组合5的净值近似核算的。


        下图为分十层组合回测时,各层组合在不同年份间的收益率及排名表。每个单元格的内容为在指定年度某层组合的收益率(均为整年收益率),以及某层组合在全部十层组合中的收益率排名。最后一列是分层组合在2011~2017的排名的均值。


        下图是不同市值区间分层组合回测绩效指标对比图(分十层)。我们将全市场股票按市值排名前1/3,1/3~2/3,后1/3分成三个大类,在这三类股票中分别进行分层测试,基准组合构成方法同前面所述(注意每个大类对应的基准组合并不相同)。


        下图是不同行业间分层组合回测绩效分析表(分五层)。我们在不同一级行业内部都做了分层测试,基准组合为各行业内该因子非空值的个股等权组合(注意每个行业对应的基准组合并不相同)。




循环神经网络选股指标比较

        我们比较了传统RNN、LSTM、GRU三种不同模型。并设置统一对照组:7阶段线性回归模型。

 

        我们构建了全A选股策略并进行回测,各项指标详见图表34和图表35。选股策略分为两类:一类是行业中性策略,策略组合的行业配置与基准(沪深300、中证500、中证全指)保持一致,各一级行业中选N个股票等权配置(N=2,5,10,15,20);另一类是个股等权策略,直接在票池内不区分行业选N个股票等权配置(N=20,50,100,150,200),比较基准取为300等权、500等权、中证全指指数。三类策略均为月频调仓,个股入选顺序为它们在被测模型中的当月的预测值顺序。

 

        从图表34和图表35中可以看出,对于行业中性和个股等权的全A选股,LSTM模型和GRU模型在年化超额收益率、信息比率整体上优于其他模型,但是最大回撤要大于线性回归模型。

 

        我们没有构建沪深300和中证500成分内选股策略,这是因为神经网络模型适合于数据量较大的场景,而沪深300和中证500成分股组成的月频多因子数据偏少,不适合应用在神经网络模型中。


LSTM选股策略详细分析

        下面我们对策略组合的详细回测情况加以展示。因为篇幅有限,我们根据上面的比较测试结果,选择展示LSTM模型选股策略。下图中,我们展示了全A选股(基准:中证500)策略的各种详细评价指标。

 

        观察下面的图表可知,对于LSTM模型的行业中性策略来说,随着每个行业入选个股数目增多,年化收益率在下降、信息比率和Calmar比率先升后降,最优每个行业入选个股数目在14个左右。


我们有选择性地展示LSTM和线性回归的月度超额收益对比图:


各种循环神经网络策略详细分析

为了方便比较,我们在图表38和图表39中比较了传统RNN、LSTM、GRU的月度超额收益,我们同时加入了XGBoost、ANN和线性回归进行比较。从图表38和图表39中可以看出,在行业中性的全A选股方面,XGBoost在年化收益率、信息比率和Calmer比率都表现最好。LSTM和GRU相比其他神经网络模型在年化收益率、信息比率上有一定的优势。


总结和展望



        以上我们对包括传统RNN、LSTM以及GRU在内的三种循环神经网络模型进行了系统的测试,并且利用三种方法构建了全A选股策略,初步得到以下几个结论:

 

一、我们在2011-01-31 至 2017-10-31的回测区间中分7个阶段训练并测试模型,传统RNN、LSTM以及GRU三种模型样本外平均AUC分别为0.5410,0. 5429,0. 5576,样本外平均正确率分别为56.85%,58.57%,57.61%。可以看出,循环神经网络具有出色的样本外平均正确率,但是样本外平均AUC值表现一般。

 

二、我们以全A股为股票池,利用循环神经网络构建选股策略。在2011-01-31 至 2017-10-31的回测区间中,对于全A选股的行业中性策略(每个行业分别选股数目为2,5,10,15,20),LSTM模型相对于中证500的超额收益在20.36%~25.05%之间,超额收益最大回撤在13.13%~16.84%之间,信息比率在2.95~3.76之间,除了最大回撤,表现优于线性回归。总的来看,LSTM模型在年化超额收益率、信息比率上优于线性回归算法,但是最大回撤普遍大于线性回归算法。在目前测试的所有神经网络模型中,LSTM表现最好,GRU与之相近,但是LSTM在全A选股的表现仍然不如XGBoost。

 

三、循环神经网络的参数较多,且模型训练速度缓慢,调参较为困难,需要人工辅助确定参数。我们通过分析LSTM网络训练过程中神经元的权重更新过程,打开了神经网络这个“黑箱”,使得模型具有可解释性。

 

四、目前看来,以LSTM为代表的神经网络在月频的多因子选股上表现并不突出。我们认为这是因为月频的多因子数据量较小,并不利于神经网络模型发挥其优势。之后我们将尝试在更加高频、数据量更大的场景中继续研究神经网络模型。

 

        通过以上的测试和讨论,我们初步理解了循环神经网络模型应用于月频多因子选股的一些规律。接下来我们的人工智能系列研究将进一步研究各种人工智能算法的特性,寻找它们最适合的应用场景,敬请期待。


风险提示

            

        风险提示:通过循环神经网络模型构建选股策略面临市场风险,是历史经验的总结,存在失效的可能。

 


免责声明




本报告仅供华泰证券股份有限公司(以下简称“本公司”)客户使用。本公司不因接收人收到本报告而视其为客户。


        本报告基于本公司认为可靠的、已公开的信息编制,但本公司对该等信息的准确性及完整性不作任何保证。本报告所载的意见、评估及预测仅反映报告发布当日的观点和判断。在不同时期,本公司可能会发出与本报告所载意见、评估及预测不一致的研究报告。同时,本报告所指的证券或投资标的的价格、价值及投资收入可能会波动。本公司不保证本报告所含信息保持在最新状态。本公司对本报告所含信息可在不发出通知的情形下做出修改,投资者应当自行关注相应的更新或修改。


        本公司力求报告内容客观、公正,但本报告所载的观点、结论和建议仅供参考,不构成所述证券的买卖出价或征价。该等观点、建议并未考虑到个别投资者的具体投资目的、财务状况以及特定需求,在任何时候均不构成对客户私人投资建议。投资者应当充分考虑自身特定状况,并完整理解和使用本报告内容,不应视本报告为做出投资决策的唯一因素。对依据或者使用本报告所造成的一切后果,本公司及作者均不承担任何法律责任。任何形式的分享证券投资收益或者分担证券投资损失的书面或口头承诺均为无效。

        

       本公司及作者在自身所知情的范围内,与本报告所指的证券或投资标的不存在法律禁止的利害关系。在法律许可的情况下,本公司及其所属关联机构可能会持有报告中提到的公司所发行的证券头寸并进行交易,也可能为之提供或者争取提供投资银行、财务顾问或者金融产品等相关服务。本公司的资产管理部门、自营部门以及其他投资业务部门可能独立做出与本报告中的意见或建议不一致的投资决策。


       本报告版权仅为本公司所有。未经本公司书面许可,任何机构或个人不得以翻版、复制、发表、引用或再次分发他人等任何形式侵犯本公司版权。如征得本公司同意进行引用、刊发的,需在允许的范围内使用,并注明出处为“华泰证券研究所”,且不得对本报告进行任何有悖原意的引用、删节和修改。本公司保留追究相关责任的权力。所有本报告中使用的商标、服务标记及标记均为本公司的商标、服务标记及标记。


        本公司具有中国证监会核准的“证券投资咨询”业务资格,经营许可证编号为:Z23032000。

全资子公司华泰金融控股(香港)有限公司具有香港证监会核准的“就证券提供意见”业务资格,经营许可证编号为:AOK809

        ©版权所有2017年华泰证券股份有限公司

林晓明

执业证书编号:S0570516010001