【研报分享】华泰证券-人工智能选股之随机森林模型

人工智能
研报干货
随机森林
华泰证券
标签: #<Tag:0x00007faff4c09b48> #<Tag:0x00007faff4c09a08> #<Tag:0x00007faff4c09878> #<Tag:0x00007faff4c09738>

#1

摘要:

随机森林模型是以 Bagging 并行方法集成决策树而得到的强分类器

随机森林(Random Forest)是近年来备受青睐的机器学习方法之一。随 机森林是以 Bagging 并行方法集成一系列决策树而训练出的强分类器,可 以较好地应用于分类和回归的不同场景下。本篇报告我们将对随机森林模 型进行系统性的测试,并分析它们应用于多因子选股的异同,希望对本领 域的投资者产生有实用意义的参考价值。

随机森林模型的构建:7 阶段样本内训练与交叉验证、样本外测试

随机森林的构建包括特征和标签提取、特征预处理、样本内训练、交叉验 证和样本外测试等步骤。最终在每个月底可以产生对全部个股下期上涨概 率的预测值,然后根据正确率、AUC 等指标以及策略回测结果对模型进行 评价。我们的模型设置为月频换仓,为了让模型及时学习到市场特征的变 化并兼顾计算效率,我们采用了 7 阶段滚动回测方法,即从 2010 年底开 始,每年底重新构建一次模型,在下一年进行测试。我们还根据模型的预 测结果构建了沪深300成份内选股、中证500成份内选股和全A选股策略, 通过年化收益率、信息比率、最大回撤等指标综合评价策略效果。

随机森林选股模型的收益和信息比率相较于线性回归具有较大优势

对于沪深 300 成份股内选股的行业中性策略(每个行业选 6 只个股),随 机森林模型的超额收益为 6.2%,信息比率为 1.74。对于中证 500 成份股 内选股的行业中性策略,随机森林的超额收益为 8.4%,信息比率为 2.16。 对于全 A 选股的行业中性策略,随机森林相对于中证 500 的超额收益为 30.6%,信息比率为 4.17。总体而言,随机森林模型在多数情况下能获取 更高的超额收益和信息比率,相较于前度报告中广义线性模型、支持向量 机模型、朴素贝叶斯模型在此方面具有比较大的优势,而对回撤的控制不 具备优势。

市值和反转因子在随机森林模型中重要性评分较高

模型训练出的因子重要性评分表显示,随机森林模型主要受市值和反转因 子影响较大。基于树的分类方法一般在大环境不发生变化的前提下能够获 取比较好的预测效果,而此类方法对于参数、噪音、环境变化等因素也比 较敏感,即泛化能力不够强。所以随机森林模型在 2011~2016 年这段小 盘股风格主导的时期展示出了强大的选股能力,但 2017 年以来确实遭遇 一定幅度的困境。我们将在后续报告中持续关注基于树的分类方法,希望 寻找到有效的手段解决这一难题。

风险提示:通过随机森林模型构建选股策略是历史经验的总结,存在失效的可能。

本文研究导读

在华泰人工智能选股系列的前三篇报告中,我们分别探讨了广义线性模型、核支持向量机 模型和朴素贝叶斯模型。本文是人工智能系列第五篇报告,我们将开始探讨另一类应用比 较广的方法——基于树的回归和分类方法。简单来说,基于树的方法主要根据分层和分割 的方式将预测变量空间划分为一系列简单区域,对于给定观测值依照其所属区域训练集的 表现进行预测。分类规则可以被概括展示为一棵树,所以这类方法通常称为决策树方法。 决策树方法简单自然,符合人脑的思维逻辑,除了构建单棵决策树,我们还可以建立多棵 决策树并通过某种方式将它们结合在一起,综合投票产生最后的预测值。本篇报告中我们 将若干决策树(弱分类器)进行组合后得到随机森林模型,并将这个模型应用于多因子选 股,主要关注如下几方面的问题:

  1. 首先是模型构建的意义。从整体构建上看,树模型和传统线性模型有什么区别呢? 依照单独特征逐层划分与整体概率估计相比的好处在哪里?树模型的可解释性与 实际预测结果是否一致?我们为什么选择构建随机森林,树与树之间又存在怎样 的关系呢? 2. 其次是参数寻优的问题。与朴素贝叶斯模型和支持向量机模型相比,随机森林模 型的参数更多,其对参数的依赖程度也更高,我们选择重要性最大的四个参数进 行讨论:树棵数 n,最大特征数 m,节点分裂所需最小样本数 s 和叶子节点最小 样本数 l。在与多因子结合的问题背景下,参数取值多少最为合理?我们依照判断 标准选出的参数又是否合适?

  2. 最后是组合构建的问题。在探究过随机森林模型的表现之后,应如何利用模型的 预测结果构建策略组合进行回测?各模型在沪深 300、中证 500 和全部 A 股票池 内选股效果的异同是什么?

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

随机森林模型简介

随机森林(Random Forest)作为一种比较新机器学习方法,近年来在界内的关注度与受 欢迎程度得到逐步提升。经典的机器学习模型是神经网络,其预测精确,但计算量也大。 上世纪 80 年代,决策树算法首次出现,通过反复二分数据进行分类或回归,计算量大大 降低。2001 年 Breiman 在此基础提出一种新的算法,这一算法是由多个随机子集生成决 策树的实例组成,故我们将其形象地称为“随机森林”。下面我们将从决策树入手,一起 逐步探索随机森林的奥秘。

决策树

日常生活中,我们对于事物的认知都是基于特征的判断与分类,譬如通过胎生与否可判断 哺乳动物,根据肚脐尖圆来挑选螃蟹公母。决策树就是采用这样的思想,基于多个特征进 行分类决策。在树的每个结点处,根据特征的表现通过某种规则分裂出下一层的叶子节点, 终端的叶子节点即为最终的分类结果。决策树学习的关键是选择最优划分属性。随着逐层 划分,决策树分支结点所包含的样本类别会逐渐趋于一致,即节点分裂时要使得节点分裂 后的信息增益(Information Gain)最大。

CART 算法

目前主流的决策树算法包括 C4.5 和 CART:C4.5 每个节点可分裂成多个子节点,不支持 特征的组合,只能用于分类问题;CART 每个节点只分裂成两个子节点,支持特征的组合, 可用于分类和回归问题。而在随机森林中,通常采用 CART 算法来选择划分属性,并使用 “基尼指数” (Gini Index)来定义信息增益程度。分类问题中,假设有 K 个类,样本集 D 中的点属于第 k 类的概率为𝑃𝑘,则其 Gini 指数为

image

Gini(D)反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率, Gini(D)越小, 数据集 D 的纯度越高。二分类问题中,若对于给定的样本集合 D(|D|表示集合元素个数), 根据特征 A 分裂为𝐷1和𝐷2两不相交部分,则分裂后的

image

从根节点开始,递归地在每个结点分裂时选取Gini(𝐷,A)最小的特征 A 为划分属性,将训 练集依特征分配到两个子结点中去。照此逐层划分,直至结点中样本个数小于预定阈值, 或样本集的 Gini 指数小于预定阈值,或者没有更多特征,即生成了一棵可进行分类预测的 决策树。下面我们试举一例说明。

假如我们希望根据当前市场股票的市值风格(大、中或小)和板块风格(消费、周期或成 长)预测涨跌情况,模拟数据如图表 1。直观地看,大市值股票全部属于“涨”类别,中 小市值股票绝大多数属于“跌”类别。似乎以“是否为大市值”为规则进行首次分裂比较 好。那么决策树将如何学习这一步呢?

image

前面提到,节点分裂的原则是使得分裂后的信息增益最大,即挑选Gini(𝐷,A)最小的特征 A 为划分属性。第一步分裂前,全部 8 个样本中有 3 个属于“涨”类别,概率为𝑃(𝜔涨) = 3 8 ⁄ ; 5 个属于“跌”类别,概率为𝑃(𝜔跌) = 5 8 ⁄ 。因此分裂前的 Gini 指数为:

image

如果我们以“是否为大市值”作为规则将全样本分裂成两个子节点,在 2 个大市值样本中 属于“涨”类别的概率为𝑃(𝜔涨) = 0,属于“跌”类别的概率为𝑃(𝜔跌) = 1,该子节点的 Gini 指数为

image

类似地,中小市值子节点的 Gini 指数为:

image

上述分裂过程中,分裂到大市值的概率为𝑃(𝜔大市值) = 2 8 ⁄ ,分裂到中小市值的概率为 𝑃(𝜔中小市值) = 6 8 ⁄ 。因此Gini(𝐷,市值)为:

image

如果换成“是否为小市值”或“是否为消费类”作为分裂规则,计算出 Gini 指数为:

image

事实上,在所有可能的分裂规则中,“是否为大市值”的 Gini 指数最小。我们据此进行首 次分裂,如图表 2 所示。接下来依照相同办法,继续对子节点进行分裂,直到每个样本都 归入终端的叶子节点,如图表 3 所示,最终完成整棵决策树的学习。

特征重要性评分

在具体的决策树模型构建中,我们将当期股票的各个因子作为输入特征,按照股票下月收 益情况分为不同类别,以此进行模型训练。对于决策树这一非线性分类器,我们依然可以 通过特征划分过程来计算评估各个因子特征的重要性,这与传统线性回归模型中的因子权重相仿。

特征影响力的计算需要借助于结点分裂时 Gini 指数,方法如下:

image

其中,𝐼𝑖(𝐴)表示结点 i 根据特征 A 分裂为两个子结点后,Gini 指数相对于母结点分裂前的 下降值。故而可定义特征 A 的绝对重要性𝑆(𝐴)为所有按特征 A 分裂的结点处的𝐼𝑖(𝐴)之和。 将所有特征的绝对重要性归一化,即可得到各个特征的重要性评分(所有特征重要性评分 之和为 1) 。 如上,我们逐层地根据特征对训练集进行划分,这样便形成了一个分类准则,即决策树算 法的本质所在。相较于其他机器学习算法,决策树的优势主要包括:1.训练速度快;2.可 以处理非数值类的特征,如不同板块风格股票涨跌分类问题;3.可以实现非线性分类,如 图表 4 的异或问题(横纵坐标 x、 y 相同则分类为 1,不同则分类为 0),该问题在逻辑回归、 线性核的支持向量机下无解,但是使用决策树可以轻松解决。但同时,决策树的缺陷在于 不稳定,对训练样本很敏感,并且容易过拟合。

树剪枝

我们利用训练样本来生成决策树时,在不加限制条件下会递归地选取特征进行二分类直到 不能继续下去为止。诚然这样产生的树对训练集数据的分类很准确,模拟分类效果如图表 5 所示。但不难发现对于个别点的分类区域划分有些“牵强附会”的意味,我们称之过拟 合现象;这样的分类器对测试集数据的分类并不会有那么准确。为此,我们希望通过降低 决策树的复杂程度来减小过拟合的风险,故可以主动地去掉一些分支进行简化,这一过程 称为剪枝(Pruning)。

image

决策树的剪枝有两种思路:预剪枝(Pre-Pruning)和后剪枝(Post-Pruning)。预剪枝是 在构造决策树的同时进行剪枝。每个节点在划分前需先进行估计,若当前结点的划分不能 带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。后剪枝即从已生成的 树上裁掉一些子树或叶节点,并将其父节点作为新的叶节点,从而简化分类树模型。

预剪枝

在预剪枝过程中,常用的判断停止树生长方法包括以下几种:
1、 达到最大树深度(Maximum Tree Depth),如图表 6 中设置 max_depth=3;
2、 设置最优划分下内部/叶结点的最小样本数:小于阈值即停止子树的划分或对叶节点进 行剪枝;
3、 (在特征为离散状态下)到达此结点的样本具有相同的特征(不必一定属于同一类);
4、 计算每次生长对系统性能的增益,如果这个增益值小于某个阈值则不进行生长。

image

在此过程中我们通过判断泛化能力是否提升来决定具体结点划分和剪枝操作。那么如何判 断泛化性能是否提升呢?可以采用性能评估方法,对上述停止树生长方式中数值变量设定 阈值,并通过验证来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个“验 证集”来检验学习器对新样本的判别能力,然后以验证集上的验证误差作为泛化误差的近 似。我们选取验证样本与训练样本为互斥集合,“留出法”直接将数据集 D 划分为两个互 斥集合,其中一个集合作为训练集 S,另一个作为验证集 T,即D = S∪ T,S∩T = ∅。在 S 上训练出模型后,用 T 来评估其验证误差,作为对泛化误差的估计。

预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著缩短 了决策树的训练及测试时间。但另一方面,有些结点的当前划分虽不能提升泛化性能,但 在此基础上进行后续的划分却有可能显著提高泛化性能,一定程度上增加了欠拟合的风险。

后剪枝

后剪枝(Post-Pruning)的剪枝过程是在决策树构造完成后删除一些子树,往往是递归地 自上而下或自下而上进行。后剪枝常见的算法包括:错误率降低剪枝(Reduced-Error Pruning)、悲观剪枝(Pessimistic Error Pruning)、代价复杂度剪枝(Cost-Complexity Pruning)、基于错误的剪枝(Error-Based Pruning),我们以代价复杂度剪枝为例来认识 一下后剪枝的过程。

设树 T 的叶节点个数为|T|,t 是树 T 的叶节点,该叶节点有𝑁𝑡个样本点,其中 k 类的样本 点有𝑁𝑡𝑘个,k=1,2,…,K,𝐻𝑡(𝑇)为叶节点 t 上的经验熵,α ≥ 0为参数,则决策树学习的损 失函数可以定义为

image

其中,经验熵为

image

在损失函数中,记

image

这时有
image

其中,𝐶(𝑇)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型 复杂度,参数α ≥ 0控制两者之间的影响。简言之,后剪枝就是在给定α下选择损失函数最 小的子树。损失函数刻画出了训练集拟合程度与模型复杂度之间的平衡,通过优化损失函 数在进行更好拟合的同时考虑了减小模型复杂度。

image

随机森林

通过前面的介绍我们已经对决策树有了清晰的了解,随机森林(Random Forest)正是一 种由诸多决策树通过 Bagging 的方式组成的分类器。其中,Bagging 是分类器集成学习的 两大渊薮中区别于 Boosting 派系(串行方法)一种并行方法,它的特点是各个弱学习器 之间没有依赖关系,可以并行拟合。Bagging 方法是 Bootstrap 随机采样思想在机器学习 上的应用。如图表 8 所示,我们由原始数据集生成 N 个 Bootstrap 数据集,对于每个 Bootstrap 数据集分别训练一个弱分类器,最终用投票、取平均值等方法组合成强分类器。

上文提及的 Bootstrap 随机采样思想就是从我们的训练集里面有放回地采集固定个数的样 本。也就是说,被采集过的样本在放回后有可能不止一次被采集到。Bagging 算法中,对 有 m 个样本训练集做 T 次的随机采样,则由于随机性,一般来说 T 个采样集各不相同。 正是由于 Bagging 算法每次利用不同采样集来训练模型,故其泛化能力很强,有助于降低 模型的方差。但是不可避免地其对训练集的拟合程度就会差一些,即增大了模型的偏倚。

image

具体地,随机森林根据以下两步方法建造每棵决策树。第一步称为“行采样”,从全体训 练样本中有放回地抽样,得到一个 Bootstrap 数据集。第二步称为“列采样”,从全部 M 个特征中随机选择 m 个特征(m 小于 M) ,以 Bootstrap 数据集的 m 个特征为新的训练集, 训练一棵决策树。如果是分类预测,则 N 棵决策树投出最多票数的类别或者类别之一为最 终类别。如果是对连续数值回归预测,则对 N 棵决策树得到的回归或 0-1 分类结果进行算 术平均得到的值为最终的模型输出。

在我们简单介绍和回顾完随机森林原理后,不妨想一下其相较于决策树的改进提升在哪里 呢?其实,决策树有一个明显的缺点是容易受到训练集中极端数据影响出现过拟合,而我 们通过随机森林模型构建则可以达到降低过拟合几率的效果。在随机森林中,虽然每棵树 只利用 m 个因子特征进行划分,单独来看分类效果并不出色但是组合在一起后反而更加稳 定。不妨这样理解,每一棵决策树就是一个精通于某一个窄领域(从 M 个因子中选取 m 个让每棵树学习)的专家,随机森林则包含很多个精通不同领域的专家,对一个新的问题 (新数据集),可以用不同的角度去看待它,最终投票得到结果。

除良好的稳定性之外,随机森林的训练和预测速度较快,同时继承了决策树可对特征进行 重要性评分的特性。即在对数据进行分类的同时,可以给出各个特征在分类过程中的影响 力大小,根据该评分能够筛选出相对重要的因子特征。这一点,与传统线性回归模型中的 因子权重有着相似的意义,对于我们判断各时期因子重要性的变化趋势和市场动向具有一 定的指导作用。

随机森林模型测试流程

Uploading: image.png…

如图表 9 所示,随机森林模型的构建方法包含下列步骤:
1. 数据获取: a) 股票池:全 A 股,剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除 上市 3 个月以内的股票。每只股票视作一个样本。 b) 回测区间:2011-01-31 至 2017-07-31。
2. 特征和标签提取:每个自然月的最后一个交易日,计算之前报告里的 70 个因子暴露 度,作为样本的原始特征;计算下一整个自然月的个股超额收益(以沪深 300 指数为 基准),作为样本的标签。因子池如图表 10 所示。
3. 特征预处理:
a) 中位数去极值:设第 T 期某因子在所有个股上的暴露度序列为𝐷𝑖,𝐷𝑀为该序列 中位数,𝐷𝑀1为序列|𝐷𝑖−𝐷𝑀|的中位数,则将序列𝐷𝑖中所有大于𝐷𝑀 +5𝐷𝑀1的数重 设为𝐷𝑀 +5𝐷𝑀1,将序列𝐷𝑖中所有小于𝐷𝑀 −5𝐷𝑀1的数重设为𝐷𝑀 −5𝐷𝑀1;
b) 缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一 级行业相同个股的平均值。
c) 行业市值中性化:将填充缺失值后的因子暴露度对行业哑变量和取对数后的市值 做线性回归,取残差作为新的因子暴露度。
d) 标准化:将中性化处理后的因子暴露度序列在横截面上取序,并除以当期票池中 的股票数,得到(0,1]上均匀分布的序列。
4. 训练集和交叉验证集合成: 在每个月末截面期,选取下月收益排名前 30%的股票作为正例(y = 1), 后 30%的 股票作为负例(y = 0)。
a) 全 A 选股模型:将当前年份往前推 72 个月的样本合并,随机选取 90%的样本作 为训练集,余下 10%的样本作为交叉验证集。
b) 沪深 300/中证 500 成分股内选股模型:将当前年份往前推 72 个月的样本合并, 采用 10 折交互验证方法或每次随机选取 90%的样本作为训练集,余下 10%的样本作 为交叉验证集,如上重复 10 次。 其中,不同回测年份训练集样本的具体选取方式可参考图表 11。
5. 样本内训练:使用随机森林模型对训练集进行训练,考虑到我们将回测区间按年份划 分为 7 个子区间,因此需要对每个子回测的不同训练集重复训练。同时设置两个统一 对照组:①沿用本系列第二、三篇报告中的 12 个月滚动回测的线性回归模型;②利 用与随机森林模型相同的训练周期和训练集构建线性回归模型。
6. 交叉验证调参:选择第一区段(样本内数据为 2005-2010 年)训练模型,训练完成 后,使用该模型对交叉验证集进行预测。选取交叉验证集 AUC(或平均 AUC)最高 的一组参数作为模型的最优参数。
7. 样本外测试:确定最优参数后,以 T 月月末截面期所有样本(即个股)预处理后的特 征作为模型的输入,得到每个样本的 T+1 月的预测值𝑓(𝒙)(合成因子,即随机森林中 各决策树分类结果的投票平均值),可以根据该预测值构建策略组合,具体细节参考 下文。
8. 模型评价:评价指标包括两方面,一是测试集的正确率、AUC 等衡量模型性能的指 标;二是上一步中构建的策略组合的各项表现(包括年化超额收益率、信息比率等等)。


image

随机森林模型测试结果

参数敏感性分析

由于随机森林模型是由诸多决策树通过 Bagging 的方式组成的,我们考虑模型参数时可以 从决策树自身参数入手,包括特征个数、内部节点再划分所需最小样本数以及叶节点最小 样本数。此外还可以调整随机森林中决策树棵数来提升模型的训练准确度。下面我们以全 A 选股模型为例,对随机森林模型参数优化进行探究。

树棵数

我们将随机森林中最大的弱学习器(决策树)的个数称为树棵数(简记为 n)。一般来说如 果树棵数太小,则无法发挥 Bagging 集成算法的优势而容易产生欠拟合;树棵数过大,会 增大计算量,并且树棵数到一定的数量后,再增大树棵数获得的模型提升会很小,所以我 们要寻找一个适中的数值。在实际调参的过程中,我们常常将树棵数和学习效率一起考虑。 依据如下 AUC 曲线随决策树棵数变化图,可见在 1000 棵范围内决策树棵数的增加可以 提升模型的预测效果,但考虑到其提升效果的边际效应,例如 1000 棵模型训练时间是 500 棵模型的 2 倍,但效果提升仅不到 1‰。故综合训练时间和效果提升考量,在随机森林模 型中我们选取决策树棵数为 500。

image

特征个数

特征个数(max_features)即每个决策树在进行分类时需要考虑的最大特征数,对于决策 树的生成时间和具体分类情况有影响作用。当输入样本的总特征个数不多,比如小于 50, 则可以不对最大个数进行限制(即全部选入)。由于我们训练模型中特征因子共 70 个,故 考虑通过限制最大特征个数来优化模型训练过程,我们对不同参数的模型效果进行评估, 结果如下:

image

由交叉验证集中 AUC 曲线图可看出,随着最大特征数 m 的指数型增长,AUC 值的增长逐 渐进入平台期,故从模型效率角度考量,我们最终选择最大特征个数为 8。此外,考虑决 策树自身易受异常值影响产生过拟合问题,我们通过以下两个参数的设置进行预剪枝操作。

内部节点再划分需最小样本数

在对每个内部节点划分前,若节点样本数少于内部节点再划分需最小样本数(简记为 s) 则不再尝试选择最优特征来划分。该参数限制了子树继续划分的条件,考虑到我们训练集 样本数目较大,故对该值进行参数优化探究。

叶节点最小样本数

若某叶子节点样本数目小于叶节点最小样本数(简记为 l),则会和兄弟节点一起被剪枝。 该参数限制了叶子节点最少的样本数,对决策树的构建形态有较大影响,当训练集样本数 量较多时,增加该值可以对决策树进行有效的剪枝。

对以上两个参数选择时我们采取遍历方法,寻找全局最优解。参数寻优最常用的方法是网 格搜索。取 s = (2,10,20,30,50,70,100,200),l = (1,5,10,15,20,30,50,100),测试每一组 s 和 l 值,得到交叉验证集的 AUC 值,全局最优解为 s=50,l=10。如下,我们在图表 16 中 展示了交叉验证集和测试集的正确率、AUC 和预测值与收益秩相关系数的详细结果,并 在图表 17 中给出不同选股模型训练选取的最优参数。

image

模型正确率与 AUC 分析

下图展示了随机森林模型(n=500,m=8,s=50,l=10)和两个统一对照组:12 个月滚动线性 回归模型、7 阶段训练线性回归模型的各期测试集正确率与 AUC 随时间的变化情况。随 机森林模型交叉验证集合平均正确率为58.4%,AUC为0.615。样本外平均正确率为57.0%, 平均 AUC 为 0.599。12 个月滚动线性回归模型样本外平均正确率为 53.8%,平均 AUC 为 0.568;7 阶段训练线性回归模型样本外平均正确率为 53.7%,平均 AUC 为 0.577。

对比图表 18~21 可以看出,由于具有相同的训练周期和训练集,随机森林模型与 7 阶段 训练线性回归模型的评估指标波动情况更加相似,且除了少数月份外,随机森林模型测试 集的正确率和AUC均高于线性回归。而相较于沿用前几篇模型中的12个月滚动线性模型, 随机森林模型的正确率与 AUC 曲线也均伴随着更大的幅度变动。同时从数值上看,两个 线性模型对照组的指标均值相差不大。

image

image

image

image

模型因子特征重要性统计

前面我们在决策树介绍部分提及过“特征重要性评分”这一概念和计算方法,同样地在随 机森林每一个阶段模型训练中我们均可以通过各个决策树节点分裂的 Gini 指数变化来确 定输入特征的重要性评分。下面我们给出 2011-2017 年间七个测试模型的特征重要性评分 表:

分层回测分析

依照因子值对股票进行打分,构建投资组合回测,是最直观的衡量因子优劣的手段。随机 森林属于分类器,最终在每个月底可以产生对全部个股下月上涨或下跌的预测值(即各决 策树分类结果的投票平均值),因此可以将两者都看作一个因子合成模型,即在每个月底 将因子池中所有因子合成为一个“因子”。接下来,我们对该模型合成的这个“因子”(即 个股下期预测值)进行分层回测,从各方面考察该模型的效果。仿照华泰单因子测试系列 报告中的思路,分层回测模型构建方法如下:

  1. 股票池:全 A 股,剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除上市 3 个月以内的股票。
  2. 回测区间:2011-01-31 至 2017-07-31(按年度分为 7 个子区间) 。
  3. 换仓期:在每个自然月最后一个交易日核算因子值,在下个自然月首个交易日按当日 收盘价换仓。
  4. 数据处理方法:将随机森林模型的预测值视作单因子,因子值为空的股票不参与分层。
  5. 分层方法:在每个一级行业内部对所有个股按因子大小进行排序,每个行业内均分成 N 个分层组合。如图表 24 所示,黄色方块代表各行业内个股初始权重,可以相等也 可以不等(我们直接取相等权重进行测试),分层具体操作方法为 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. 评价方法:回测年化收益率、夏普比率、信息比率、最大回撤、胜率等。

image

这里我们将展示随机森林模型(n=500,m=8,s=50,l=10)的分层测试结果。

下图是分五层组合回测绩效分析表(20110131~20170731)。其中组合 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/3,1/3~2/3,后 1/3 分成三个大类,在这三类股票中分别进行分层测试,基准组 合构成方法同前面所述(注意每个大类对应的基准组合并不相同)。

image

构建策略组合及回测分析

我们采用了随机森林算法,并对其重要参数进行了敏感性分析。我们将回测区间按年度划 分为 7 个子区间,训练集为当前回测年度往前推 72 个月的月频数据,为确定模型参数, 我们选取第一个回测时期模型为代表,对 n 和 m 进行调整测试,并对 s 和 l 进行遍历,选 取交叉验证集 AUC 最高的组合作为最终选定的参数,并在其后模型中沿用此参数。同时 考量两个统一对照组:①沿用本系列第二、三篇报告中的 12 个月滚动回测的线性回归模 型;②利用与随机森林模型相同的训练周期和训练集构成构建 7 阶段线性回归模型。此外 从滚动模型角度出发选取前一篇朴素贝叶斯模型进行比较探究。

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

对于沪深 300 成份股内选股的行业中性策略,当每个行业选股数小于等于 10 只时,随机 森林模型的年化超额收益率、信息比率和 Calmar 比率均明显高于统一对照组①的线性回 归模型,超额收益最大回撤小于 12 月滚动线性回归,与朴素贝叶斯模型相比各指标表现 也略胜一筹。和统一对照组②相比,随机森林仅在行业选股数较小(选股数为 2)时表现 稍弱,其他情况下均略胜一些。对于沪深 300 成份股内选股的个股等权策略,策略表现受 总选股数影响较大,总选股数为 50 时,各指标均优于两组线性回归统一对照组和朴素贝 叶斯模型。但其他选股条件下,随机森林模型仅有年化超额收益率高于线性回归,而回撤 则相对较大。

对于中证 500 成份股内选股的行业中性策略,当每个行业选股数小于等于 10 只时,随机 森林模型的年化超额收益率、信息比率和 Calmar 比率均明显高于统一对照组①的线性回 归模型,回撤也相对较小。不同行业选股数情况下策略表现与朴素贝叶斯模型及统一对照 ②的 7 阶段线性回归模型相比总体持平,无大幅优势。对于中证 500 成份股内选股的个股 等权策略,选取不同的总选股数,随机森林模型年化超额收益率、信息比率和 Calmar 比 率均明显高于 12 月滚动线性回归模型,超额收益最大回撤小于线性回归。与朴素贝叶斯 模型相比,随机森林模型的信息比率总体较高,而超额收益最大回撤更大,由此在 Calmar 比率上表现略逊色。与行业中性情况相同,整体来看随机森林模型与对照组②的 7 阶段滚 动线性回归相比无明显优势。

图表34展示了全A选股策略的回测结果。对于全A选股的行业中性策略和个股等权策略, 随机森林的年化超额收益率和信息比率都远胜于两组统一对照组的线性回归模型和朴素 贝叶斯模型,但是超额收益最大回撤都明显高于线性回归模型。值得注意的是,在成分股 选股策略中表现较好、能与随机森林模型持平的 7 阶段滚动线性回归模型,在全 A 选股策 略中与对照组①中线性回归模型的回测结果相差无几,可见选股策略的构建对于模型应用 效果有不小的影响。

总的来看,随机森林模型的表现在不同选股方式下差异较大。在沪深 300 与中证 500 成 分股选股策略下,随机森林模型的表现并不亮眼,与相同训练周期和训练集构成的 7 阶段 线性回归模型相比提升不大;而在全 A 选股策略中,随机森林模型能获取更高的超额收益, 综合提升也较大。从整体指标情况看:收益方面,随机森林模型在多数选股策略下能获取 更高的超额收益;而回撤部分,随机森林模型相比于两种对照的线性回归模型和朴素贝叶 斯不具备明显优势,很多时候回撤会更大。



随机森林模型选股策略详细分析

下面我们对随机森林模型策略组合的详细回测情况加以展示。下图中,我们分别展示了沪 深 300 成份股内选股(基准:沪深 300)、中证 500 成份股内选股(基准:中证 500)、全 A 选股(基准:中证 500)策略的各种详细评价指标。

观察下面的图表可知,对于随机森林模型沪深 300 成分股内选股行业中性策略来说,随着 每个行业入选个股数目增多,年化收益率在下降、信息比率和 Calmar 比率先升后降,最 优每个行业入选个股数目在 6 个左右;对于随机森林模型中证 500 成份股内选股行业中性 策略来说,随着每个行业入选个股数目增多,年化收益率在下降,信息比率和 Calmar 比 率先升后降,最优每个行业入选个股数目在 6 个左右;对于随机森林模型全 A 选股行业中 性策略来说,随着入选个股总数目增多,年化收益率在下降,信息比率先升后降,Calmar 比率也大体呈下降趋势。最优每个行业入选个股数目在 10 个左右。



我们有选择性地展示三个策略的月度超额收益图:

image

image

image

总结和展望

以上我们对随机森林进行了系统的测试,并且利用支持向量机模型构建沪深 300、中证 500 成份内和全 A 选股策略,初步得到以下几个结论:

一、随机森林模型具备不错的预测能力。为了让模型及时学习到市场特征的变化,我们采 用了 7 阶段滚动回测方法。例如第一阶段滚动回测中,选取 2005-2010 年的月频因子及 下期收益作为样本内集合,2011 年的数据为样本外测试集。同时,我们选取两个统一对 照组:12 个月滚动线性回归模型、7 阶段训练线性回归模型。随机森林全 A 选股模型交 叉验证集正确率为 58.4%,AUC 为 0.615。样本外测试集平均正确率为 57.0%,平均 AUC 为 0.599。随机森林模型的预测正确率和 AUC 均显著高于两组统一对照组的线性模型。

二、我们分别以沪深 300、中证 500 和全 A 股为票池,利用随机森林模型构建选股策略。 对于沪深 300 成份股内选股的行业中性策略,随机森林模型的超额收益在 2.5%~7.5%之 间,信息比率在 0.8~1.8 之间,在收益端和回撤端的表现仍优于 12 个月滚动线性回归模 型,但较 7 阶段线性回归模型而言提升不明显。对于中证 500 成份股内选股的行业中性策 略,随机森林模型的超额收益在 4%~9%之间,信息比率在 1.5~2.2 之间,Calmar 比率在 1.0~2.5 之间,表现远优于 12 个月滚动线性回归模型,较 7 阶段线性回归模型而言提升同 样不明显。对于全 A 选股的行业中性策略,随机森林模型能获取更高的超额收益,综合 提升也较大:相对于中证 500 的超额收益在 24%~34%之间,超额收益最大回撤在 13%~16% 之间,信息比率在 3.8~4.3 之间。总体而言:收益方面,随机森林模型在多数选股策略下 能获取更高的超额收益;而回撤部分,随机森林模型相比于两种对照的线性回归模型不具 备明显优势,很多时候回撤会更大。随机森林在收益和信息比率方面表现不错,各种策略 构建方式下都能稳定地优于线性回归模型。

三、在我们的测试中,由于随机森林模型相较于朴素贝叶斯而言对参数的依赖性较大,故 需要利用交叉验证集对参数进行选择。考虑到逐月滚动调参的方法会涉及到未来信息的使 用,我们遵循第三篇报告支持向量机模型中设定固定训练集思想,同时考虑到市场风格的 切换轮动,将原固定测试集按年度划分为 7 个阶段,选取当前年度之前 72 个月数据作为 训练集,并对逐个阶段进行随机森林模型训练。

基于这一滚动回测模型,我们以第一阶段训练集的交叉验证集 AUC 为据,进行网格搜索 寻找最优参数。同时综合网格搜索时间成本与效果提升度,考虑逐年进行参数寻优过于冗 余浪费,故在第一阶段确定随机模型参数后,此后的六个模型训练中均不做调整和改变。 这在一定程度上不仅提升了模型的训练时效性,也由于引入新的市场数据而使模型的灵活 与准确度得到增加。

四、文中随机森林模型总体表现略优于线性回归,但是最大回撤普遍大于线性回归。尤其 是全A选股模型,相较于中证500的超额收益自2017年初出现了较大的回撤。我们从输出 的因子重要性表格中可以看出随机森林模型训练过程中受市值因子、反转因子以及波动率 因子影响较大,同时市值因子的特征重要性在训练模型中逐年增加。考虑到今年以来市场 大小盘风格轮动现象,使得市值因子失效,因此我们认为这一阶段的回撤与之相关。在不 同选股策略中,我们对比两种滚动线性模型:不难看出,与随机森林模型具有相同训练周 期和训练集的7阶段线性回归模型,其超额收益表现在全A策略中更好,而综合回撤较12 月滚动线性模型更大。这在一定程度上表明机器学习方法训练中既要确保训练集数据足够 多,又要提升数据集的时效性。我们通过设置以上两组统一对照组,从模型训练方法和训 练集选取方式上分别对随机森林模型的效果做出来评估考量。

基于本文的测试和讨论,我们对随机森林选股模型有了一些初步认识。接下来我们的人工 智能系列研究将继续探讨Boosting、神经网络等方法与多因子结合选股的表现,敬请期待.

风险提示

通过随机森林模型构建选股策略是历史经验的总结,存在失效的可能。