【研报分享】华泰证券-人工智能之全连接神经网络

人工智能
研报分享
全连接神经网络
标签: #<Tag:0x00007fb0011e8170> #<Tag:0x00007fb0011e8030> #<Tag:0x00007fb0011efda8>

#1

摘要:

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

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

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

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

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

全连接神经网络模型的构建包括特征和标签提取、特征预处理、样本内训 练、交叉验证和样本外测试等步骤。最终在每个月底可以产生对全部个股 下期上涨概率的预测值,然后根据正确率、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 所示。神经元存在兴奋和抑制两种状态。一般情况下,绝大多数神经元 处于抑制状态。一旦某个神经元的树突收到上一级感受器或神经元传来的刺激,导致它的 电位超过一定阈值,那么该神经元会被激活,处于兴奋状态,电信号经胞体沿轴突和末端 突触,继续传递至下一级神经元的树突。如此逐级传递形成一个巨型网络。

image

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

image

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

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

image

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

image

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

激活函数

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

Sigmoid 函数的表达式如下:

image

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

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

image

image

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

image

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

image

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 函数中的向量𝑥必须是 N 维的,也即上一层节点个数必须为 N。因为这一具有 N 个节点的隐藏层是 Softmax 输出层的必要条件,有时在提及神经网络结构时会省去它,例 如本报告中我们构建了一个具有 2 个隐藏层的全连接神经网络,这 2 个隐藏层就不包括 Softmax 输出层前面的那层。具体网络结构详见下下小节的描述。

ReLU(Rectified Linear Unit)函数又称为修正线性单元,其函数表达式为: 𝑓(𝑥) = max⁡ (0,𝑥) 当节点的值𝑥小于 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 函数,实 际上每个节点都可以单独设置不同的激活函数。

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

image

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

image

image

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

优化函数

上一节中我们形象化地描述了前向传播和反向传播过程,不过在实际计算中并没有那么简 单,为了兼顾速度、准确度和稳定性,我们可以选择各种优化函数来完成这一计算过程。
此处我们主要针对 TensorFlow 来简单介绍几种优化函数的特点,本篇报告中神经网络模 型的构建和训练就是基于 TensorFlow 的。TensorFlow 是 Google Brain 开发的开源机器学 习系统,其功能全面、使用简单,支持 Python 和 C/C++语言,支持 GPU/CPU 计算,在 GPU 中可以大大提升计算速度,因而在神经网络计算上具有很大优势,是当前较为主流 的神经网络和深度学习的库。在基于 TensorFlow 的神经网络中,函数 tf.train()在传统梯度 下降法基础之上,提供了更多优化损失函数的选择,如下表所示。

image

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

神经网络具体实现方法

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

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

image

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

模型评价指标

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

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

在一些特定场景下,正确率并不是最好的指标。在选股模型的实际应用中,我们的目标不 仅仅是对股票进行正确分类,更多的时候是希望选择预测值最高,即上涨可能性最大的小 部分股票进行投资。更切实际的做法是设定一个更严格的分类阈值,此时预测上涨的股票 数将变少,虚报率降低,然而召回率也随之降低,正确率未必上升。通俗地说,当法律更 严格时,抓住的坏人更多,错杀的好人也更多,社会风气并不一定会更好。由此可见,当我们侧重于某一类别的样本,或者两类样本数量不均等时,正确率、召回率、虚报率并不 是稳定的评价指标,其具体大小不仅取决于分类器性能,还和分类阈值密切相关。 是否有一种评价指标和分类阈值的选取无关,从而忠实地反映分类器性能呢?在华泰人工 智能系列第三篇报告《支持向量机模型》中,我们使用了接受者操作特征曲线(Receiver Operating Characteristic Curve,ROC 曲线)的曲线下面积(Area Under Curve,AUC) 作为模型评价的主要指标。然而 AUC 在多分类问题下无法准确地定义。实际上本报告中 我们是将个股做了三分类处理(分类详细设置参考下一章第一小节),我们在输出层选用 的 Softmax 激活函数是可以进行多分类的。因此,我们将使用另一种常用的,与分类阈值 选取无关的,同时适用于多分类问题的评价指标——F-score。

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

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

全连接神经网络测试流程

全连接神经网络构建
image

如图表 12 所示,全连接神经网络的构建方法包含下列步骤:
1. 数据获取:
a) 股票池:全 A 股,剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除 上市 3 个月以内的股票,每只股票视作一个样本。
b) 回测区间:2011-01-31 至 2017-10-31。分 7 个阶段回测,如图表 14 所示。
2. 特征和标签提取:每个自然月的最后一个交易日,计算之前报告里的 70 个因子暴露 度,作为样本的原始特征;计算下一整个自然月的个股超额收益(以沪深 300 指数为 基准),前 30%的股票标记为“上涨股”,后 30%的股票标记为“下跌股”,中间股票 标记为“中性股”,作为样本的标签。因子池如图表 13 所示。
3. 特征预处理:
a) 中位数去极值:设第 T 期某因子在所有个股上的暴露度序列为𝐷𝑖,𝐷𝑀为该序列 中位数,𝐷𝑀1为序列|𝐷𝑖 −𝐷𝑀|的中位数,则将序列𝐷𝑖中所有大于𝐷𝑀 +5𝐷𝑀1的数 重设为𝐷𝑀 +5𝐷𝑀1,将序列𝐷𝑖中所有小于𝐷𝑀 −5𝐷𝑀1的数重设为𝐷𝑀 −5𝐷𝑀1;
b) 缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一 级行业相同个股的平均值。
c) 行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值 做线性回归,取残差作为新的因子暴露度。
d) 标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差, 得到一个新的近似服从N(0,1)分布的序列。
4. 训练集和交叉验证集的合成: 对于全连接神经网络模型,在每个月末截面期,随机选 取每个月 90%的样本作为训练集,每个月余下 10%的样本作为交叉验证集。
5. 样本内训练:在样本内训练集使用全连接神经网络训练模型。
6. 交叉验证调参:模型训练完成后,使用该模型对交叉验证集进行预测。选取交叉验证 集与样本外测试集正确率一致性高、且 F1-score 高的一组参数作为模型的最优参数。
7. 样本外回测:确定最优参数后,以 T 月月末截面期所有样本预处理后的特征作为模型 的输入,得到每个样本的预测值𝑓(𝑥),将预测值视作合成后的因子,进行单因子分层 回测。回测方法和之前的单因子测试报告相同,具体步骤参考下一小节。 8. 模型评价:我们以分层回测的结果作为模型评价指标。我们还将给出测试集的正确率、 F1-score 等衡量模型性能的指标。


image

神经网络模型参数设定

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 具有高度一致性,说明本神经网络模型在样本外依然十分有效。

image

image

分层回测分析

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

分层测试详细展示图表包括:
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. 不同行业间分层组合回测绩效分析表(分五层)。我们在不同一级行业内部都做了分层 测试,基准组合为各行业内该因子非空值的个股等权组合(注意每个行业对应的基准 组合并不相同)

image

下图是分五层组合回测绩效分析表(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. 神经网络真正强大的地方在于它处理海量非线性数据的能力。如果我们将神经网络模型 应用到周频、日频甚至日内股价规律的挖掘上,是否能够显著超越其它传统量化模型?这 些我们将在后续的报告中予以探索,敬请期待。

风险提示

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