打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利好:人工智能选股之全连接神经网络——华泰人工智能系列之八!

采用全连接神经网络模型挖掘个股收益与因子之间的非线性关系

人工神经网络模型具有强大的学习能力、适应能力、计算效率,可以良好地模拟出输入空间到输出空间的非线性映射关系,在很多应用领域已经取得了令人瞩目的成果。本报告作为华泰人工智能系列第八篇,开始尝试从浅层结构学习模型迈向深度学习模型的研究,探索神经网络与多因子结合选股将擦出怎样的火花。本报告主要介绍的全连接神经网络是一种结构简单、易于理解、计算效率高的模型,我们对其原理进行了形象化的描述,同时对模型结构和参数设置进行了详细剖析,最后构建选股策略进行回测,发现全连接神经网络选股模型的年化收益和信息比率优于线性模型。

全连接神经网络理论部分的精髓在于前向传播和反向传播

全连接神经网络模型一般包含输入层、若干个隐藏层、输出层,每层包含数目不等的节点。前向传播是指在给定训练数据和模型参数的情况下,通过输入层的数据层层传播至输出层,与真实值对比并计算出误差的过程。如果误差不达要求,则进入反向传播过程,这个过程主要是基于梯度下降法的,目的是在给定训练数据和损失函数的前提下,修改连接各节点的边上的权值使损失函数达到最小。神经网络模型的反向传播机制可以类比于飞机的发动机,地位十分重要,是神经网络模型具有学习能力的关键。

全连接神经网络选股模型的构建:样本内训练与交叉验证、样本外测试

全连接神经网络模型的构建包括特征和标签提取、特征预处理、样本内训练、交叉验证和样本外测试等步骤。最终在每个月底可以产生对全部个股下期上涨概率的预测值,然后根据正确率、F1-score等指标以及策略回测结果对模型进行评价。由于神经网络模型需要大量样本数据支持,我们主要在全A股票池内根据模型的预测结果构建选股策略,通过年化收益率、信息比率、最大回撤等指标综合评价策略效果。

全连接神经网络选股模型年化超额收益和信息比率优于线性回归

在回测时段2011-01-31至 2017-10-31内,全连接神经网络模型全A选股策略(行业中性,每个行业选股数目分别为2,5,10,15,20)相对于基准中证500指数的年化超额收益在19.15%~25.36%之间,超额收益最大回撤在14.72%~18.65%之间,信息比率在2.81~3.35之间。总的来看,全连接神经网络模型在年化超额收益率、信息比率上优于线性回归模型,但是最大回撤普遍大于线性回归模型。

全连接神经网络选股模型测试集表现优良,理论上具有优势

本报告中,我们采用全连接神经网络选股模型对个股做“涨、平、跌”三分类预测,模型在测试集上的正确率为42.9%、F1-score值为38.0%。全连接神经网络模型与一些更复杂的神经网络模型(如卷积神经网络、循环神经网络、长短记忆神经网络等)相比,其结构更加简单、容易理解、计算效率高;与传统的线性模型相比,能够引入非线性拟合因素,并且在大量股票数据的支持下可能会“学习”到股票市场更精确的运行规律,值得进行更深一步的研究。

风险提示:神经网络模型的输入数据为个股的因子特征,若市场投资环境发生转变,则因子可能会失效,通过神经网络模型构建的选股策略也随之有失效风险。

本文研究导读

华泰人工智能系列报告目前已经发布了七篇,在首篇报告《人工智能选股框架及经典算法简介》中,我们对主流的机器学习算法进行了分类介绍和形象化解释,接下来的第二至第六篇报告中,我们详细测试了广义线性模型、支持向量机、朴素贝叶斯、随机森林和 Boosting模型,在第七篇报告中则给出了机器学习选股的完整代码,并对一些实践细节进行详细讲解。相对于最近大火的深度学习(Deep learning)模型,以上报告实际上聚焦在人工智能领域的浅层学习(Shallow learning)模型,从本篇报告开始,我们将开始尝试进行神经网络(Neural network)的研究,一步步接近深度学习的领域。神经网络模型具有强大的学习能力、适应能力、计算效率,它可以良好地模拟出输入空间到输出空间的非线性映射关系,网络结构多种多样,例如ART网络、RBF网络、小波神经网络等,应用范围各不相同。本文构建并测试了一个结构较为简单的全连接神经网络模型,并与多因子模型结合进行选股实证,主要关注如下几方面的问题:

1. 首先是模型选择的问题。全连接神经网络作为一种非线性分类器,相比于以线性分类器在分类表现上是否具有优势?优势具体体现在哪些方面?哪些方面优势不明显?

2. 其次是参数选择的问题。神经网络模型中有许多参数,网络层数、每层网络神经元的个数、激活函数、优化函数等,在与多因子结合的问题背景下,参数取值多少最为合理?应该通过什么样的指标确定最优参数?如何在较小的计算量下确定效果较好的模型参数?

3. 再次是过拟合问题。神经网络结构与算法十分复杂,中间计算过程类似于“黑箱”,难于解释其经济学含义。如何在模型设计过程中减小过拟合的概率?如何提高模型对样本外数据的预测能力?

4. 最后是组合构建的问题。在观察过全连接神经网络模型的表现之后,应如何利用模型的预测结果构建策略组合进行回测?

我们将围绕以上的问题进行系统性的测试,希望为读者提供一些扎实的证据,并寻找到相对较优的全连接神经网络模型,希望对本领域的投资者产生有实用意义的参考价值。

人工神经网络介绍

在华泰人工智能系列首篇报告《人工智能选股框架及经典算法简介》(2017.06)中,我们简要地介绍了神经网络的理论基础和研究思路,本文将在前文基础上更为详细地介绍人工神经网络的概念和实现方法。

神经网络仿照生物大脑的组织结构设计,其工作机理近似于大脑神经元网络的活动规律。它反映了大脑的基本特征,模拟大脑的思维模式对外界刺激进行加工和判断。可以说神经网络是利用人工的方式对生物神经网络的模拟。

人类的大脑是一个由约860亿个神经元构成的巨型神经网络。神经网络中最基础的单元是神经元,如图表1所示。神经元存在兴奋和抑制两种状态。一般情况下,绝大多数神经元处于抑制状态。一旦某个神经元的树突收到上一级感受器或神经元传来的刺激,导致它的电位超过一定阈值,那么该神经元会被激活,处于兴奋状态,电信号经胞体沿轴突和末端突触,继续传递至下一级神经元的树突。如此逐级传递形成一个巨型网络。

神经网络算法中的神经元正是模拟了现实世界中神经元的架构。图表2展示了一个简易的单层神经网络,图中红色圆圈相当于一个生物神经元的胞体,也被称为神经网络的节点。左边第一列代表输入层,在该单层神经网络中y=f(x1(2))相当于输出层,其中f(·)为激活函数,其功能在后文中有详细介绍。每一根线都相当于生物神经元中的树突或轴突,表示相邻两层的两个节点之间存在信息传递关系,每根连接线都有一定的权重(weight)。每个节点可以存储一定数据,相邻两层的节点之间可以互相传递信息。

接下来我们考察两层节点之间是如何传递信息的。假设第1层(即输入层)第i个节点的数据为xi(1),第2层(即输出层)第k个节点的数据为xk(2),两个节点之间连接的权重为wik(1),数据传递的方向由第1层传往第2层。

我们称图表2神经网络中的输出层为全连接层。所谓全连接,是指该层任意一个节点都和前一层所有节点相连,即后一层的神经元从前一层的所有神经元接收数据,因此第2层第个节点的数据是第1层所有节点数据的加权和,外加一个偏置量(bias)bk(1),相当于线性模型中的截距项。最终第2层第k个节点的数据为:

用向量形式表示为:

如果第2层包含多个节点x1(2)、x2(2)、······ ,那么将第2层单个神经元上的运算推广到整个第2层,就可以得到如下的向量运算:

以矩阵的形式表达,即:

由上述信息传递方式可知,全连接层本质上是一个向量乘法和一个加法,数据X(1)、X(2)和B(1)都是向量,权重参数W(1)可以用矩阵表示。

第2层第k个节点的数据xk(2)并非直接输出为结果或者传递到下一层,而是需要先通过激活函数f(xk(2))进行处理,最终得到输出数据y,如图表2所示。设置激活函数的意义在于模仿生物神经元胞体的内部运算过程。对于胞体来说,只有当输出刺激的电位超过一定阈值,神经元才会被激活,进而向下一级神经元输出信号。为了实现上述功能,激活函数通常为非线性函数。

单个神经元的核心仍是线性模型,因此无法解决较为复杂的非线性问题。将多个神经元层层连接,就得到了含隐藏层的神经网络。神经网络的功能非常强大,多层的神经网络可以近似地拟合出任意函数。图表3展示了一个含有两个隐藏层,输入层和隐藏层节点数均为2,外加1个偏置节点的神经网络。为简单起见,图表3中所有节点的激活函数都取为f(·),实际上每个节点都可以单独设置不同的激活函数,常用的几种激活函数将在下个小节展开介绍。

激活函数

在神经网络中,激活函数的灵感来自于生物神经网络,刻画了神经元对输入信息的加工过程。激活函数通过对加权输入进行非线性组合,从而产生非线性决策边界(non-linear decision boundary)。常用的激活函数包括Sigmoid、tanh、ReLU、Softmax等。其中,Sigmoid和tanh常用于神经网络的隐藏层,ReLU常用于卷积神经网络的隐藏层,Sigmoid和Softmax常用于输出层。下面对以上四种激活函数进行简单介绍。

Sigmoid函数的表达式如下:

其中f(x)代表当前节点从上一层全部节点接收到信息的加权和。当为极小的负数时,f(x)的值趋近于0;当为极大的正数时,f(x)的值趋近于1。Sigmoid函数图像如图4所示。

Sigmoid函数的功能相当于把一个实数投影至0到1之间。压缩至0到1有什么意义呢?从生物学的角度看,神经元的发放频率存在上下限,不可能无限制地发放,而Sigmoid函数正是将节点的输出限制在(0,1)区间内,刻画了神经元的生物特性,因此Sigmoid函数常用于神经网络的隐藏层。从二分类的角度看,我们也可以把Sigmoid函数看作一种“分类的概率”,比如输出为0.9可以解释为90%的概率为正样本,因此Sigmoid函数也常用于输出层。

tanh函数的表达式如下:

与Sigmoid函数类似,tanh函数的功能是把一个实数投影至-1到1之间,tanh函数图像如图5所示。输入非常大的正数时,输出结果会接近1;而输入非常小的负数时,则会得到接近-1的结果。和Sigmoid函数相比,tanh为中心对称函数,在进行梯度下降的优化过程中具备一定优势,因此比Sigmoid更多地应用于神经网络的隐藏层。

Softmax函数相当于一个归一化函数,其作用是将一个N维实向量x“压缩”到另一个N维实向量f(x)中,使得每一个元素的范围都在0到1之间,并且所有元素的和为1。函数表达式为:

Softmax函数常用于多分类问题的输出层。例如对于一个三分类问题,我们假设输出层的上一层是一个包含3个节点的隐藏层,3个节点输出的值分别为[-0.4, 0.3, 0.5];输出层同样包含3个节点,每个节点的激活函数为Softmax函数。通过上述公式可以计算得到输出层的值分别为[0.183, 0.368, 0.449],三个数都在0到1之间,和为1。其代表的含义为:该样本属于第一类的概率为0.183,属于第二类的概率为0.368,属于第三类的概率为0.449,进而将该样本归入第三类。在上面Softmax函数表达式中,若N=2,实际上就退化为Sigmoid函数了。

当Softmax函数用于输出层时,如果神经网络最终期望分出的类别个数为N,则输入到Softmax函数中的向量x必须是N维的,也即上一层节点个数必须为N。因为这一具有N个节点的隐藏层是Softmax输出层的必要条件,有时在提及神经网络结构时会省去它,例如本报告中我们构建了一个具有2个隐藏层的全连接神经网络,这2个隐藏层就不包括Softmax输出层前面的那层。具体网络结构详见下下小节的描述。

ReLU(Rectified Linear Unit)函数又称为修正线性单元,其函数表达式为:

当节点的值x小于0时,激活函数的输出为0,相当于神经元处于抑制状态。当节点的值大于0时,激活函数的输出等于输入值,神经元的发放强度和输入的刺激强度成正比。相较于Sigmoid和tanh函数,ReLU函数的一个特点是稀疏激活性,它使得一部分神经元的输出为0,从而实现网络的稀疏性,减少参数的相互依赖,避免过拟合的发生。

ReLU函数另一个特点在于梯度特征不同。Sigmoid和tanh的梯度在两端的极值区非常平缓,接近于0,在使用梯度下降法进行最小化损失函数的过程中,很容易造成梯度耗散,从而减缓收敛速度。梯度耗散在网络层数多的时候尤为明显,是加深网络结构的主要障碍之一。相反ReLU的梯度大多数情况下是常数,有助于解决深层网络收敛问题,且收敛速度快。Sigmoid和tanh的主要优势在于全程可导,适用于层数不多的神经网络。

总结一下常用的几个激活函数及各自的特点,如下表所示。

前向传播与反向传播

前向传播(Forward propagation)与反向传播(Backward propagation,或简写为Back propagation)是神经网络理论的精髓部分。在给定训练数据和模型参数的情况下,将输入层的数据通过隐藏层中的节点层层传输计算,一直传播到输出层,用最终的输出值和真实值作比较,计算出误差,这个过程就叫前向传播。实际上图表2、3及其前后的描述性文字就聚焦于前向传播的过程。对于图表3中展示的神经网络模型,我们可以用图表8来展示其前向传播的过程,以及每一步的详细计算公式。初始状态下,我们有输入层数据和每条边的权值的初值,为简单起见,图表8中所有节点的激活函数都取为Sigmoid函数,实际上每个节点都可以单独设置不同的激活函数。

如果前向传播最终计算出来的误差达不到期望值,则进入反向传播过程,这个过程是基于梯度下降法的(梯度下降法在本系列报告第二篇《人工智能选股之广义线性模型》中有详细描述)。反向传播的目的是在给定训练数据和损失函数的前提下,修改权值wik(t)和bk(t)使损失函数达到最小。在反向传播的过程中,首先通过链式法则从后向前逐层求出误差函数对各权值的偏导数,即误差函数对权值的梯度,再结合自己设置的学习速度,就可以计算出各权值的修改量。一次反向传播结束后,再通过前向传播计算误差,若误差达到期望值,则停止训练,否则继续下一轮的反向传播、前向传播过程,一直迭代下去,直至触发训练的终止条件为止(除误差要求外,还可能存在迭代次数上限等其它训练终止条件)。

因为反向传播的计算过程比较复杂,我们将结合图表9进行更详细的讲解。假设损失函数为

其中

是网络输出值,z是真实值,定义

首先以权值w11(3)为例,我们想知道微小改变w11(3)的值会对误差产生多少影响,于是根据链式法则计算

假设学习速度(迭代步长)为η, 则在该次反向传播过程中,w11(3)的修正值为

请注意,所有权值的修改公式都可视作是在反向传播结束后同时生效的,此处只是逐个展示计算过程。下面我们再举一个稍微复杂些的算例——权值w11(2)的修改,同样地,先计算

若定义

于是在该次反向传播过程中,w11(2)的修正公式为

类似地,其它权值在该次反向传播过程中的修改公式推导过程如图表9所示。

上述推导过程是针对一组输入数据(x1(1), x2(1))展示的,比较易于理解,实际问题中输入数据一般会有成千上万组,前面公式中很多求导符号实际是在对向量求导,公式写法比较抽象,这里就不赘述了,对反向传播理论有进一步了解需求的读者推荐去阅读相关书籍。

优化函数

上一节中我们形象化地描述了前向传播和反向传播过程,不过在实际计算中并没有那么简单,为了兼顾速度、准确度和稳定性,我们可以选择各种优化函数来完成这一计算过程。

此处我们主要针对TensorFlow来简单介绍几种优化函数的特点,本篇报告中神经网络模型的构建和训练就是基于TensorFlow的。TensorFlow是Google Brain开发的开源机器学习系统,其功能全面、使用简单,支持Python和C/C 语言,支持GPU/CPU计算,在GPU中可以大大提升计算速度,因而在神经网络计算上具有很大优势,是当前较为主流的神经网络和深度学习的库。在基于TensorFlow的神经网络中,函数tf.train()在传统梯度下降法基础之上,提供了更多优化损失函数的选择,如下表所示。

本研究报告采用AdamOptimizer优化函数,读者也可以根据自己的研究特点选择合适的优化函数。

神经网络具体实现方法

理论上,隐藏层数目越多,隐藏层节点数越多,模型对数据的拟合程度越好。但是在实际运用中,人们研究发现增加层数和节点数将带来诸多问题。首先,权重参数的数目将随之急剧增加,使得优化问题的解空间过大,算法难以收敛。其次,反向传播算法也会失效,误差梯度在经过好几层的传递之后变得极小,对于前几层连接权重的修改变得近乎不可能,这一现象称为梯度消失。再次,模型复杂度的增大带来过拟合的问题。最后,在历史时期CPU/GPU的计算能力无法胜任超大规模的参数优化问题。这些缺陷一度限制了神经网络的广泛使用。

受限于计算量,本报告采用基于TensorFlow的2层隐藏层的全连接人工神经网络,在普通的家用电脑中可以实现,从输入层nput到输出层y的具体结构如下:

全连接层fc1 激活函数tanh(隐藏层1):

全连接层fc2 激活函数tanh(隐藏层2):

全连接层fc3 激活函数Softmax(输出层):

本报告中,权重初始化采用TensorFlow中截断正态分布函数tf.truncated_normal,隐藏层的激活函数采用tanh函数,输出层的激活函数采用Softmax函数。读者也可以根据具体案例研究选择其它合适的激活函数。

模型评价指标

在人工智能系列第一篇报告中,我们介绍了常见的模型评价指标。对于分类问题,除了分类正确率(Accuracy)之外,还可以采用召回率(Recall,又称敏感度Sensitivity)、精确率(Precision)、虚报率和特异度(Specificity),它们都是衡量模型好坏的常用指标,详细定义如图表11所示。在众多模型评价指标中,正确率的概念清晰并且计算简便,使用较为广泛。

针对具体的神经网络选股模型,如何计算上表中的各项指标呢?比如,我们通过历史数据训练得到一个全连接神经网络模型,将当前时刻股票的特征(因子值)输入网络,就可以得到股票下期上涨或下跌的预测值f(x),这是一个连续值。如果以中位数作为分类阈值将股票分为相对强势和相对弱势两类,那么根据预测值向量就可以得到预测的分类标签,随后和真实的分类标签进行比较,从而就能计算正确率、召回率、虚报率等各项指标了。

在一些特定场景下,正确率并不是最好的指标。在选股模型的实际应用中,我们的目标不仅仅是对股票进行正确分类,更多的时候是希望选择预测值最高,即上涨可能性最大的小部分股票进行投资。更切实际的做法是设定一个更严格的分类阈值,此时预测上涨的股票数将变少,虚报率降低,然而召回率也随之降低,正确率未必上升。通俗地说,当法律更严格时,抓住的坏人更多,错杀的好人也更多,社会风气并不一定会更好。由此可见,当我们侧重于某一类别的样本,或者两类样本数量不均等时,正确率、召回率、虚报率并不是稳定的评价指标,其具体大小不仅取决于分类器性能,还和分类阈值密切相关。

是否有一种评价指标和分类阈值的选取无关,从而忠实地反映分类器性能呢?在华泰人工智能系列第三篇报告《支持向量机模型》中,我们使用了接受者操作特征曲线(Receiver Operating Characteristic Curve,ROC曲线)的曲线下面积(Area Under Curve,AUC)作为模型评价的主要指标。然而AUC在多分类问题下无法准确地定义。实际上本报告中我们是将个股做了三分类处理(分类详细设置参考下一章第一小节),我们在输出层选用的Softmax激活函数是可以进行多分类的。因此,我们将使用另一种常用的,与分类阈值选取无关的,同时适用于多分类问题的评价指标——F-score。

通常而言,准确率和召回率是互相影响的,虽然两者都高是一种期望的理想情况,但实际情况常常是准确率高、召回率低,或者召回率低、准确率高。所以在应用中常常需要根据具体情况做出取舍,例如对一般搜索的情况是在保证召回率的情况下提升准确率,而如果是疾病监测、反垃圾邮件等,则是在保证准确率的条件下,提升召回率。但有时候,需要兼顾两者,那么就可以用F-score指标。F-score指标定义如下:

其中,当b=1时,认为精确率和召回率的重要性相当,就是F1-score。通过定义可知,召回率体现了分类模型对正样本的识别能力,召回率越高,说明模型对正样本的识别能力越强;精确率体现了模型对负样本的区分能力,精确率越高说明模型对负样本的区分能力越强。F1-score是两者的综合体现,F1-score较高时说明模型稳健,分类效果较理想。我们在后续的测试中,将使用正确率和F1-score作为调参的主要依据。

全连接神经网络测试流程

全连接神经网络构建

如图表12所示,全连接神经网络的构建方法包含下列步骤:

1. 数据获取:

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

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

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

3. 特征预处理:

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

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

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

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

4. 训练集和交叉验证集合成:对于全连接神经网络模型,在每个月末截面期,随机选取每个月90%的样本作为训练集,每个月余下10%的样本作为交叉验证集。

5. 样本内训练:在样本内训练集使用全连接神经网络训练模型。

6. 交叉验证调参:模型训练完成后,使用该模型对交叉验证集进行预测。选取交叉验证集与样本外测试集正确率一致性高、且F1-score高的一组参数作为模型的最优参数。

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

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

神经网络模型参数设定

1. 隐藏层(hidden layer):神经网络理论上可以采用4层或者更多的层,但是过多的隐藏层个数计算量过大,且容易造成过拟合,考虑到以上因素,本研究报告中采用含有2层隐藏层的神经网络。

2. 神经元:网络输入层神经元节点数就是系统的因子(自变量)个数,输出层神经元节点数就是系统目标分类数。隐层节点选取按经验选取,一般设为输入层节点数的75%。在系统训练时,实际还要对不同的隐层节点数分别进行比较,最后确定出最合理的网络结构。在本研究报告中,网络输入层节点个数是70(70个因子),最终输出层节点个数为分类数量,我们采用三分类(上涨、中性、下跌)则输出层节点个数为3,第1、2层隐藏层节点个数分别取为40、10,最终我们构建了一个70-40-10-3的全连接神经网络模型。

3. 激活函数(activation):由上文介绍,激活函数可以为神经网络加入非线性因素,以弥补线性模型的不足。考虑不同激活函数的特点,我们在隐藏层采用tanh激活函数,在输出层采用Softmax激活函数。

4. dropout:使用dropout可以有效减小过拟合概率。试想,训练多个神经网络让它们共同表决,会比只训练一个神经网络更靠谱,因为每个神经网络“过拟合”的方式各不相同,取它们的平均值可以就降低过拟合概率。dropout的原理是每次迭代时都随机地从隐藏层上去除一部分神经元,每个神经元都随机地与其他神经元进行组合,减小彼此之间的相互影响。dropout在大型深层网络中特别有用。

5. 学习速率(learning rate):在经典的反向传播算法中,学习速率是由经验确定,学习速率越大,权重变化越大,收敛越快,但学习速率过大,会引起系统的振荡;学习速率越小,系统更加稳定,但收敛速度会变慢。因此,训练速率在不导致振荡前提下,越大越好。

6. 优化函数(optimizer):神经网络通过优化函数,改善训练方式,来最小化(或最大化)损失函数。我们在模型测试过程中比较了GradientDescentOptimizer、MomentumOptimizer、AdamOptimizer优化函数的效果。

7. 最大迭代次数:一般期望模型在最大迭代次数内收敛,但由于神经网络并不能保证在各种参数配置下迭代收敛,当结果不收敛时,需要设置一个最大迭代次数避免程序陷入死循环。受限于计算能力,本研究报告中最大迭代次数取10000次。

全连接神经网络模型测试结果

模型正确率与F1-score分析

下图展示了全连接神经网络模型每一期测试集的正确率和F1-score随时间的变化情况。本研究报告采用三分类,在完全随机的情况下,正确率值应该为33.3%,F1-score的值应该为0.333,交叉验证集和测试集上的正确率和F1-score越高说明模型越好。全连接神经网络模型交叉验证集正确率为42.9%和样本外测试集平均正确率为42.8%,交叉验证集F1-score为0.39和样本外测试集平均F1-score为0.38,交叉验证集与样本外测试集的正确率与F1-score具有高度一致性,说明本神经网络模型在样本外依然十分有效。

分层回测分析

使用神经网络对股价做预测,在每个月底可以产生对全部个股下月收益的预测值。因此可以将神经网络看作一个因子合成模型,即在每个月底将因子池中所有因子合成为一个“因子”。接下来,我们对该模型合成的这个“因子”(即个股下期收益预测值)进行分层回测,从各方面考察该模型的效果。这里的分层测试逻辑和华泰金工前期单因子测试系列报告保持一致。

分层测试详细展示图表包括:

1. 分五层组合回测绩效分析表(20110131~20171031)。其中组合1~组合5为按该因子从小到大排序构造的行业中性的分层组合。基准组合为行业中性的等权组合,具体来说就是将组合1~组合5合并,一级行业内部个股等权配置,行业权重按当期沪深300行业权重配置。多空组合是在假设所有个股可以卖空的基础上,每月调仓时买入组合1,卖空组合5。回测模型在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日按当日收盘价调仓(分层组合构建法等更多细节参见上一章“分层模型回测”小节)。

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

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

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

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

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

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

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

下图是分五层组合回测绩效分析表(20110131~20171031)。其中组合1~组合5为按该因子从小到大排序构造的行业中性的分层组合。基准组合为行业中性的等权组合,具体来说就是将组合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和组合10的表现十分稳定,在这7年间一直保持头、尾的位次不变。整体来看组合1~10的年度排名均值服从单调关系,说明全连接神经网络模型分层回测稳定性上佳。

全连接神经网络选股指标比较

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

从图表25和图表26中可以看出,对于行业中性和个股等权的全A选股,全连接神经网络相比线性回归在年化超额收益率、信息比率整体上表现更好,但是最大回撤要大于线性回归模型。

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

全连接神经网络选股策略详细分析

下面我们对策略组合的详细回测情况加以展示。下图中,我们展示了全A选股(行业中性,基准为中证500)策略的各种详细评价指标。

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

我们展示某组参数下全连接神经网络(ANN)和线性回归的月度超额收益对比图:

总结与展望

以上本文对结构简单的全连接神经网络模型进行了系统的测试,并且考察了部分模型参数的敏感性,初步得到以下几个结论:

1. 全连接神经网络模型本身已具备不错的选股能力。全连接神经网络对个股做“涨、平、跌”三分类时在测试集正确率为42.9%,F1-score为38.0%。全连接神经网络模型与一些更复杂的神经网络模型(如卷积神经网络、循环神经网络、长短记忆神经网络等)相比,其结构更加简单、容易理解、计算效率高;与传统的线性模型相比,能够引入非线性拟合因素,并且在大量股票数据的支持下可能会“学习”到股票市场更精确的运行规律。

2. 我们以全部A股作为股票池,利用全连接神经网络模型构建选股策略。在回测时段2011-01-31至 2017-10-31内,全连接神经网络模型行业中性选股策略(每个行业选股数目分别为2,5,10,15,20)相对于基准中证500指数的年化超额收益在19.15%~25.36%之间,超额收益最大回撤在14.72%~18.65%之间,信息比率在2.81~3.35之间,除了最大回撤,表现优于线性回归。总的来看,全连接神经网络在年化超额收益率、信息比率上优于线性回归算法,但是最大回撤普遍大于线性回归算法。

通过以上的测试和讨论,我们初步理解了神经网络模型应用于多因子选股的一些规律。同时也引申出更多的问题。例如:

1. 在神经网络构建过程中,网络层数、神经元个数、激活函数、优化函数、网格结构等等使得神经模型变得十分复杂,在实际问题中无法对所有网络结构进行遍历选择最优模型。如何在有限的计算资源下,设计出预测能力更强的神经网络模型?

2. 神经网络模型训练与预测过程比传统线性模型的所需的计算资源与时间要多许多,如何在一定计算条件下合理优化模型,提高计算效率?

3. 在结构相对简单的全连接神经网络中,其算法已经比较复杂,具有经济学含义的因子在模型训练过程中解释起来变得十分困难,如何合理解释复杂神经网络模型的投资逻辑,明白模型的经济学含义,对于神经网络模型在投资领域的推广具有重要的意义。

4. 神经网络真正强大的地方在于它处理海量非线性数据的能力。如果我们将神经网络模型应用到周频、日频甚至日内股价规律的挖掘上,是否能够显著超越其它传统量化模型?这些我们将在后续的报告中予以探索,敬请期待。

风险提示

神经网络模型的输入数据为个股的因子特征,若市场投资环境发生转变,则因子可能会失效,通过神经网络模型构建的选股策略也随之有失效风险。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
神经网络
UFLDL 笔记 01 神经网络
深度学习与神经网络入门
BP算法
循环神经网络
神经网络如何工作?8分钟入门
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服