收藏 分享(赏)

人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf

上传人:a****2 文档编号:3057424 上传时间:2024-01-19 格式:PDF 页数:26 大小:1.68MB
下载 相关 举报
人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf_第1页
第1页 / 共26页
人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf_第2页
第2页 / 共26页
人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf_第3页
第3页 / 共26页
人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf_第4页
第4页 / 共26页
人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf_第5页
第5页 / 共26页
人工智能系列之二十:必然中的偶然机器学习中的随机数-20190429-华泰证券-24页 - 副本.pdf_第6页
第6页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、谨请参阅尾页重要声明及华泰证券股票和行业评级标准 1 证券研究报告证券研究报告金工研究/深度研究 2019年04月29日 林晓明林晓明 执业证书编号:S0570516010001 研究员 0755-82080134 陈烨陈烨 执业证书编号:S0570518080004 研究员 010-56793942 李子钰李子钰 0755-23987436 联系人 何康何康 021-28972039 联系人 1金工金工:偶然中的必然:重采样技术检验过拟合偶然中的必然:重采样技术检验过拟合2019.04 2金工金工:机器学习选股模型的调仓频率实证机器学习选股模型的调仓频率实证2019.04 3金工金工:市值因

2、子收益与经济结构的关系市值因子收益与经济结构的关系2019.03 必然中的偶然必然中的偶然:机器学习中的随机数机器学习中的随机数 华泰人工智能系列之二十不同机器学习模型对随机数种子的敏感程度不同不同机器学习模型对随机数种子的敏感程度不同 本文考察逻辑回归、XGBoost、随机森林和全连接神经网络四种机器学习算法在 100 组不同随机数种子下的模型性能和单因子回测表现。结果表明,当随机数种子变化时,逻辑回归的结果几乎保持不变,对随机数不敏感;全连接神经网络的结果可能发生较大变化,对随机数较敏感;XGBoost 和随机森林对随机数的敏感程度介于上述两者之间。机器学习模型看似“必然”的结果背后包含一

3、定“偶然”因素,投资者应认识到机器学习选股模型可能存在的随机数种子选择偏差。机器学习多个机器学习多个环节涉及随机数,目的在于环节涉及随机数,目的在于增强模型增强模型的的泛化能力泛化能力 机器学习多个环节涉及随机数,例如训练集、验证集和测试集的随机划分,对神经网络权值进行随机初始化,利用随机梯度下降法求损失函数最优解,随机森林、XGBoost 等决策树集成模型的行列采样,神经网络训练过程中使用 Dropout 技术等。引入这些随机数具有重要意义,它们或是为了保证损失函数更易达到最优解,或是为了避免极端值对模型训练造成不良影响,或是为了产生具有差异性的样本以便进一步集成,最终目的都在于增强模型的泛

4、化能力。使用使用 Python 常用机器学习包时可进行若干常用机器学习包时可进行若干设置保证训练结果可重复设置保证训练结果可重复 由于机器学习模型中随机数的存在,为了保证结果的可重复性,需要对模型进行若干设置。我们测试了多种常用 Python 机器学习包随机数种子设置方法,结果表明 sklearn 和 xgboost 包设置 random_state 超参数后就能保证结果可完全复现;当以 tensorflow 作为后端使用 keras 包时,如果不使用 GPU,在单线程环境下同时固定 numpy 和 tensorflow 两处随机数种子就能确保全连接神经网络模型得到可重复的结果。机器机器学习模

5、型受随机数影响程度与模型复杂度及学习模型受随机数影响程度与模型复杂度及随机数作用方式有关随机数作用方式有关 逻辑回归本身比较简单,在使用随机梯度下降算法拟合参数时引入了随机数,由于损失函数为凸函数,参数最终大概率收敛到理论最优参数附近,而较少受随机数影响。神经网络参数量大,在初始化网络权重,利用优化算法最小化损失函数,前向传播进行 Dropout 等环节均引入了随机数,模型整体具有较高的复杂度,受随机数影响较大。XGBoost 和随机森林模型复杂度也较高,行列采样环节涉及随机数,但是由于模型已经进行集成,最终结果的不确定性有所降低。风险提示:机器学习选股方法是对历史投资规律的挖掘,若未来市场投

6、资环境发生变化导致基学习器失效,则该方法存在失效的可能。机器学习存在一定过拟合风险。当机器学习算法涉及随机数时,不同随机数种子可能得到不同结果。相关研究相关研究 2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 2 正文目录正文目录 本文研究导读.4 机器学习中的随机数.5 从计算机中的随机数生成谈起.5 数据集的随机划分.5 优化算法中的随机数.6 赋予参数随机初始值.6 随机梯度下降.6 集成学习中的随机数.8 神经网络中的随机数.9 P

7、ython 环境下如何设置随机数种子.10 机器学习选股模型随机性的来源.11 方法.12 人工智能选股模型测试流程.12 全连接神经网络模型参数设定.14 单因子测试.14 回归法和 IC 值分析法.14 分层回测法.15 结果.16 模型性能.16 回归法和 IC 值分析法.17 分层测试法.18 不同随机性来源的横向比较.20 总结.22 风险提示.23 图表目录图表目录 图表 1:机器学习中随机数所涉及的环节、作用和代表模型.5 图表 2:二元损失函数示意图.7 图表 3:损失函数为凸函数(左)和非凸函数(右).7 图表 4:梯度下降法(左)和随机梯度下降法(右).7 图表 5:Boo

8、tstrap 重采样示意图.8 图表 6:Bagging 并行集成方法示意图.9 图表 7:Dropout 方法示意图.10 图表 8:Python 常用机器学习包中随机数种子参数设置方法.11 图表 9:keras 包(tensorflow 作为后端)设置随机数种子代码实例.11 图表 10:机器学习选股模型随机性的可能来源和对应的考察方式.11 2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 3 图表 11:人工智能选股模型测试流程示意

9、图.12 图表 12:年度滚动训练示意图.12 图表 13:选股模型中涉及的全部因子及其描述.13 图表 14:模型历年滚动训练最优超参数.14 图表 15:20112018 年四种模型样本外平均正确率分布.16 图表 16:20112018 年四种模型样本外平均 AUC 分布.16 图表 17:2018 年四种模型样本外平均正确率分布.16 图表 18:2018 年四种模型样本外平均 AUC 分布.16 图表 19:20112018 年四种模型平均 t 值分布.17 图表 20:20112018 年四种模型平均|t|值分布.17 图表 21:20112018 年四种模型平均因子收益率分布.1

10、7 图表 22:20112018 年四种模型平均 Rank IC 分布.17 图表 23:20112018 年逻辑回归模型累积 Rank IC 及波动情况.18 图表 24:20112018 年 XGBoost 模型累积 Rank IC 及波动情况.18 图表 25:20112018 年随机森林模型累积 Rank IC 及波动情况.18 图表 26:20112018 年全连接神经网络模型累积 Rank IC 及波动情况.18 图表 27:20112018 年四种模型多空组合年化收益率分布.18 图表 28:20112018 年四种模型多空组合夏普比率分布.18 图表 29:20112018 年

11、四种模型 Top 组合年化收益率分布.19 图表 30:20112018 年四种模型 Top 组合夏普比率分布.19 图表 31:20112018 年逻辑回归模型多空组合净值及波动情况.19 图表 32:20112018 年 XGBoost 模型多空组合净值及波动情况.19 图表 33:20112018 年随机森林模型多空组合净值及波动情况.19 图表 34:20112018 年全连接神经网络模型多空组合净值及波动情况.19 图表 35:20112018 年逻辑回归模型多空组合平均和最优最差净值.20 图表 36:20112018 年 XGBoost 模型多空组合平均和最优最差净值.20 图表

12、 37:20112018 年随机森林模型多空组合平均和最优最差净值.20 图表 38:20112018 年全连接神经网络多空组合平均和最优最差净值.20 图表 39:XGBoost 模型四种随机性来源比较.21 2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 4 本文本文研究研究导读导读 世界上没有完全相同的两片叶子。诸多看似“必然”的现象背后,可能蕴藏着不为人熟知的“偶然”因素。人类的局限性之一,就是我们往往热衷于追逐确定性的结论,而忽视

13、了同样关键的“必然中的偶然”。以机器学习算法为例,有一个问题常常困扰机器学习的使用者:使用相同的算法训练相同的数据集为什么会得到不同的结果?产生这种现象的主要原因是:机器学习的诸多环节都涉及随机数。例如训练集、验证集和测试集的随机划分,对神经网络的权值进行随机初始化,利用随机梯度下降法求损失函数最优解,随机森林、XGBoost 等决策树集成模型的行列随机采样,训练神经网络时通过 Dropout 技术随机删除部分神经元等。引入这些随机数具有重要意义,它们或是为了保证损失函数更易达到最优解,或是为了产生差异化的样本以便进一步集成,或是为了避免极端值对模型造成不良影响,最终目标都是增强模型的泛化能力

14、。在每次训练过程中,计算机产生的随机数不同,因而造成训练结果不能完全重复。为了确保研究的可重复性,我们通常会事先固定随机数种子,最终也仅仅汇报该随机数种子对应的结果。这就引入了新的问题当投资者阅读人工智能和机器学习相关研究报告时,可能对报告中算法的泛化能力产生怀疑:是否可能是作者运气好,选择了一个特殊的随机数种子,得到看似完美的结果,但是更换随机数种子后结论不再成立?为了回应投资者的上述质疑,全面展示机器学习“必然中的偶然”,本文将系统性地整理和分析机器学习选股模型涉及的随机数,具体关注下列问题:1.首先梳理分析随机数在机器学习中的用途。机器学习选股流程中哪些环节涉及随机数?这些环节引入随机数

15、又是基于何种考虑?2.其次测试不同选股模型对随机数种子的敏感程度。为了得到可重复的结果,针对特定算法,应固定哪几处随机数种子?当变更这几处随机数种子时,机器学习选股的训练及回测表现会发生怎样的变化?2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 5 机器学习中的随机数机器学习中的随机数 机器学习的多个环节涉及到随机数,例如:训练集、验证集和测试集的随机划分,对神经网络的权值进行随机初始化,利用随机梯度下降法求损失函数最优解,对随机森林进行行

16、列随机采样,训练神经网络时通过 Dropout 技术随机删除部分神经元等。引入这些随机数对于构建机器学习模型有何帮助?在具体的算法实现层面,这些随机数是如何起作用的?图表图表1:机器学习中随机数所涉及的环节、作用和代表模型机器学习中随机数所涉及的环节、作用和代表模型 随机数涉及环节随机数涉及环节 随机数的作用随机数的作用 代表模型代表模型 数据集的划分 划分训练集、验证集和测试集-优化算法 赋予参数随机初始值;随机梯度下降 逻辑回归、神经网络 集成学习 行、列随机采样 随机森林、XGBoost 神经网络 Dropout 技术删除部分神经元 神经网络 资料来源:华泰证券研究所 从计算机中的随机数

17、生成从计算机中的随机数生成谈起谈起 构建机器学习模型所需的随机数,是由计算机的随机数生成器产生的。计算机是如何生成随机数的呢?是在内部设置一个均分的轮盘,每次向轮盘撒黄豆;还是在内部产生一个虚拟的硬币,反复地抛掷硬币?实际上,计算机无法产生绝对随机的随机数,计算机能产生的仅仅是“伪随机数”,即相对的随机数。需要强调的是,伪随机数并不是假的,这里的“伪”,表示有规律。换言之,计算机产生的随机数既是随机的,又是有规律的。何谓“随机且有规律”?例如,世界上没有两片完全相同的树叶,这突出了事物的随机性。但是每种树的叶子都有相似的形状和颜色,这就是规律性。计算机产生的随机数是可预测、有周期的,是由某些公

18、式和函数生成的。因此,对于同一随机种子与函数,得到的随机数同一随机种子与函数,得到的随机数列是一定的列是一定的。在计算机中,如果没有设置随机数种子,那么将默认采用当前时钟作为随机数种子,代入生成函数,产生随机数。伪随机数生成函数虽然只是几个简单的函数,却是科学家数十年研究的成果。图灵奖首位亚裔获得者姚期智教授的研究方向之一就是伪随机数生成。目前常用的随机数生成法有同余法(congruential method)和梅森旋转算法(Mersenne twister)。伪随机数的产生机理,确保了使用相同随机数种子产生的序列是完全相同的,从而保证使用者在固定随机数种子后能得到可重复的确定性结果。数据集的

19、数据集的随机划分随机划分 了解计算机中随机数的生成模式后,我们将进一步梳理机器学习算法每步可能用到的随机数。在训练机器学习模型前,不可缺少的一步是数据集的随机划分数据集的随机划分:将原始样本按照一定方法,随机划分成训练集(training set)、验证集(validation set)和测试集(test set)。训练集的作用是训练模型,形成模型的内部结构和参数估计。例如线性回归模型,每个自变量前的参数都是基于训练集估计得到。验证集的作用是模型选择或超参数选择。例如随机森林中树的棵数,每个基决策树的特征个数,内部节点再划分需要的最小样本数等,都是基于模型在验证集的表现,通过不同模型或超参数的

20、对比得到。测试集的作用是测试已经训练完成模型的表现。测试集不参与模型的训练和选择,仅仅用以展示模型的性能,不为模型提供任何信息。实践中,多种方法可用于数据集的随机划分。以留出法(hold-out)为例,首先对原始数据进行一次或若干次混洗(shuffle);其次按照混洗后的顺序,取一定比例样本作为总体训练集,剩余样本作为测试集;随后从总体训练集中依照同样方法,划分出训练集和验证集。对于原始数据中的每条样本,我们无法确定它应被分到哪类数据集中,但是它被分到每类数据集的概率应服从给定的样本比例。单次划分数据集得到的结果可能不稳定,一般需要进行多次随机划分,重复实验后再考虑其平均结果。2 0 5 6

21、8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 6 将原始数据集进行随机划分,确保了划分后每类数据集的内部结构(数据分布)尽可能与原始数据集保持一致,避免因划分过程引入额外偏差对最终结果造成的影响,使得基于训练集得到的模型能够适用于全体样本。需要说明的是,当原始数据集为时间序列时,随机划分可能破坏样本的时序信息,更常用的方法是不进行混洗,直接按时序划分为训练集、验证集和测试集。此处不涉及随机数。优化算法中的随机数优化算法中的随机数 划分完数据集后,核心环节

22、是在训练集上利用特定学习算法拟合模型利用特定学习算法拟合模型。诸多机器学习算法会用到各种形式的损失函数,如何快速有效地对损失函数求最小值,从而估计出模型的参数,这就涉及到优化问题。各种优化方法也会用到随机数,一方面用来“跳出”局部极值点,使得优化结果更接近全局最优解,另一方面用于消除极端值对优化结果的影响。赋予参数随机初始值赋予参数随机初始值 除少数简单模型外,机器学习涉及到的优化问题通常无法直接给出显式解,实践中需借助数值优化算法进行求解。数值优化算法通常从某个初始参数值出发,按照一定规则搜索并更新参数,直到优化目标函数变化小于容忍幅度,或者搜索次数达到最大迭代次数为止。对于凸目标函数,优化

23、问题在理论上存在唯一解,只要搜寻次数足够长,总可以得到近似最优数值解。然而,无论采用何种参数搜索方法,如果优化在触及最大迭代次数后停止,最终参数所能到达的位置会依赖于初始出发位置。换言之,如果赋予参数不同的初始值,如果赋予参数不同的初始值,我们可能我们可能得到不同的优化结果得到不同的优化结果。对于非凸目标函数,该问题仍然存在。更为严重的是,由于非凸目标存在局部极值,即使迭代次数足够长,也无法确保从不同的初始参数出发最终能够得到相近的结果。以经典的梯度下降搜寻算法为例,如果给定的初始值恰好落在某个非全局最优的局部极值点附近,由于该点附近梯度近似为 0,参数更新极度缓慢,导致最终结果只能取到该点附

24、近;而如果选择另一个远离该点的初始值,那么最终结果有可能落在全局最优点。为了解决上述问题,可以随机赋予优化问题若干组不同的初始解,按照某种特定搜索算法求解模型后,将得到与每组初始值对应的一组“最优”参数及局部最优目标值。如果结果与初始值无关,那么全部结果应较接近,任意一组解都可以作为备选最优解;如果结果与初始值相关,那么取各组“局部”最优解中的“全局”最优解对应参数作为最终参数即可。总之,在赋予参数随机初始值的过程中,使用随机数的作用是:防止 1)迭代次数不足或者 2)参数搜索“陷入”局部最优对优化结果的负面影响。随机梯度下降随机梯度下降 梯度下降(gradient decent)是经典的数值

25、优化搜索算法,我们曾在华泰金工人工智能2:广义线性模型(20170622)中详细介绍过该方法。梯度下降法通过计算损失函数的梯度,找到使损失函数下降最快的方向进行迭代搜索,最终找到最优值。不妨把损失函数想象成一处山谷,如下图所示,小球从四周某处自由滚下,那么小球将落在谷底,即损失函数的极小值处。用数学的语言来说,损失函数的导数描述了山谷中局部的“形态”,而万有引力定律则保证能够牵引小球沿着山谷下降方向走。梯度下降法正是模拟小球在每一步都沿着山谷的下降方向(损失函数梯度的负方向)滚动。2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度

26、研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 7 图表图表2:二元损失函数示意图二元损失函数示意图 资料来源:华泰证券研究所 然而在实际应用中,梯度下降法存在诸多缺陷。首先,为了计算损失函数的梯度,需要遍历每条训练样本,当训练样本量较大时,会耗费大量内存,整个训练过程变得较为缓慢。其次由于不同样本间的梯度可能相互抵消,导致参数变化幅度过小,参数收敛速度随之变慢。最后对于非凸的损失函数来说,参数值趋于局部极值点时,梯度将趋于零,参数值几乎不再更新,最终损失函数只能优化到局部极值点。图表图表3:损失函数为凸函数损失函数为凸函数(左)(左)和非凸函数和非凸

27、函数(右)(右)ABCDEF 资料来源:华泰证券研究所 针对以上不足,研究者提出随机梯度下降法(stochastic gradient decent,SGD)。随机梯度下降法的核心思想是每次随机选取全部训练样本中的单个样本计算其方向梯度,并据此立即更新模型参数。在具体的算法实现上,通常首先将所有训练样本进行混洗(shuffle),然后依次遍历重排后的样本,每次根据遍历到的样本计算梯度并立即更新参数。将全部打乱后的训练样本全部遍历一次,称为一轮(epoch)迭代。多轮迭代后,模型参数将可能收敛到全局最优值附近。图表图表4:梯度下降法(左)和随机梯度下降法(右)梯度下降法(左)和随机梯度下降法(右

28、)资料来源:华泰证券研究所 2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 8 随机梯度下降法的优点在于,每次更新参数时,只需要检验单个样本,无需遍历所有样本,因此适用于大规模数据的模型优化问题。由其算法实现过程可知,在同样执行 N 轮迭代后,经典梯度下降方法参数只更新了 N 次,而随机梯度下降方法参数更新了 N 乘以训练样本数量次,这意味着参数变动更为频繁。当样本量较大时,可能无需训练完所有样本,就能得到一个损失值在可接受范围之内的模型。

29、另外,当损失函数为凸函数,无论是经典梯度下降法还是随机梯度下降法,在初始几步迭代过程中,损失函数下降速度较快。而当参数逼近最优值时,多数样本对应的损失函数已经优化得足够好,仅少数点尚未优化到位。为了继续优化这些样本点,梯度下降法至少需要一次迭代,遍历全体样本使参数更新到最优,尽管其中多数样本对于总的梯度值已经没有贡献。随机梯度下降法也至少需要再执行一次迭代,但是由于样本是随机打乱的,运气足够好的情形下,靠前的几条样本便是尚未优化的样本,利用它们更新参数后就能提前结束本轮迭代,运气最差的情形下需要遍历全体样本,平均而言只需要遍历一半的样本。当损失函数为非凸函数,使用梯度下降法时,可能“陷入”到局

30、部极值域中。但是对于随机梯度下降法,即使参数在搜索中进入到局部极值域,由于下次取到的样本是随机的,所以仍有一定概率“跳出”该区域,从而进一步搜索到全局最优参数。总的来看,随机梯度下降法使用随机数的作用是:避免样本极端性对优化结果的影响;同时利用随机性使参数搜索“跳出”梯度为 0 的区域,从而获得更接近全局最优的结果。集成学习中的随机数集成学习中的随机数 划分训练集、验证集和测试集,利用随机优化算法基于训练集拟合出模型,再根据验证集选择超参数后,通常可得到弱学习器。单个弱学习器的预测能力有限,要想进一步增强模型的泛化能力,就需要进行集成学习。集成学习算法主要有两大类:Bagging(并行)和Bo

31、osting(串行)。集成学习中随机数的使用首先出现在 Bagging,随后扩展到 Boosting。Bagging(全称 bootstrap aggrating)是 Bootstrap 重采样思想在机器学习中的应用。Bootstrap 重采样是指从数据集里有放回地随机抽取相同数量的样本。一般而言,欲得到泛化性能强的集成模型,集成学习中的基学习器应尽可能保证互相独立。实践中,由于训练都是基于同一数据集,无法严格保证独立性,可行的办法是保证弱学习器之间存在较大差异。如果弱学习器完全一致,集成过程就会失效。图表图表5:Bootstrap 重采样重采样示意图示意图 资料来源:华泰证券研究所 Bagg

32、ing 方法通过对数据集进行多次 Bootstrap 重采样,产生具有差异的基学习器。如上图所示,我们基于原始数据集生成 N 个 Bootstrap 数据集,对于每个 Bootstrap 数据集分别训练单个弱分类器,最终用投票、取平均值等方法组合成强分类器。Bagging 算法中,对包含 M 条样本的训练集做 N 次随机重采样,由于随机性的存在,N 个重采样集各不相同。Bagging 算法采用不同的重采样集,训练得到差异化的基学习器,故其泛化能力较强,模型的方差较低。2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019

33、 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 9 图表图表6:Bagging 并行并行集成集成方法示意方法示意图图 资料来源:华泰证券研究所 随机森林是 Bagging 模型的一个扩展变体。随机森林在以决策树为基学习器构建 Bagging集成的基础上,进一步在基决策树的训练中引入随机特征选择。具体而言,随机森林根据以下两步方法构建每棵决策树。第一步称为“行采样”,从全体训练样本中有放回地抽样,得到若干个 Bootstrap 数据集,并建立对应的弱学习器。第二步称为“列采样”,对于每一棵基决策树,传统决策树算法在每一步选择特征划分时,从全部 d 个特征集合中选出一个

34、最优特征;随机森林算法不考虑全部特征,而是随机抽取其中 k 个特征,选择其中的最优特征进行划分。列采样保证了即使 Bootstrap 数据集完全相同,也可能生成不同的决策树。这里的 k 决定了引入随机性的程度,当 k=d 时,随机森林中基决策树的构建与传统决策树相同。决策树的缺陷之一是易受训练集中极端样本的影响而导致过拟合,随机森林能够降低过拟合程度。极端样本之所以极端,是由于其出现概率小。对于随机森林,只有少数情况下极端样本才会被抽样进入 Bootstrap 数据集中,即使它被抽样进入 Bootstrap 数据集中,也只有少数情况下才被选中参与学习,从而有效降低极端样本对结果的影响。随着研究

35、者对 Bagging 并行集成方法的日益认可,其核心的行列采样思想也逐渐拓展到Boosting 串行集成学习方法中。具有代表性的决策树串行集成学习方法 XGBoost 包含行采样超参数subsample和列采样超参数系列colsample_by*,该方法同样受到随机数影响。总的来看,在集成学习中,使用随机数的作用是:产生差异性的样本,进而基于这些样本训练出具有差异性的弱学习器,最终得到泛化能力更强的集成学习器。神经网络中的随机数神经网络中的随机数 过拟合是机器学习常被人诟病的问题之一。神经网络由于参数数量众多,过拟合问题尤为突出。如果模型存在过拟合,那么其实际使用效果将大打折扣。上一节介绍的集

36、成模型通过组合多个具有差异性的基模型,一定程度上缓解了过拟合。然而,集成模型需要训练多个基模型,对于神经网络模型而言,训练单个基模型就已较为耗时,进行后端集成学习不现实。研究者如何缓解神经网络的过拟合?2012 年,Hinton 等人在论文Improving neural networks by preventing co-adaptation of feature detectors中提出 Dropout 技术。Dropout 技术的核心思想是在神经网络进行前向传播时,令神经元的激活值以一定的概率 p 停止工作,使得模型不会过于依赖某些局部特征,从而增强模型的泛化能力。训练神经网络的常规流程

37、是:每一轮迭代,首先将特征 X 通过网络前向传播,随后将误差e 反向传播,以决定如何更新参数使得网络进行学习。使用 Dropout 时,每一轮迭代的训练流程为:1.基于当前参数,拷贝一份临时神经网络,从临时网络中随机地删除一部分隐藏神经元,注意需要保持输入输出神经元不变,如下图。2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 10 2.基于删除一部分神经元的临时网络进行一次前向传播,然后把得到的损失结果反向传播。一小批训练样本执行完上述步骤

38、后,对于原始网络没有被删除的神经元,按照随机梯度下降法更新对应临时网络位置的参数;对于原始网络上被删除的神经元,参数保持不变。图表图表7:Dropout 方法示意方法示意图图 资料来源:华泰证券研究所 在实际训练时,可设定每个隐藏层的 Dropout 比例,当 Dropout 比例为 1 时,相当于经典的训练算法。直观上 Dropout 不同的隐藏神经元类似于训练不同的神经网络(随机删掉部分隐藏神经元导致网络结构发生改变),整个 Dropout 过程相当于对多个不同的神经网络取多次平均。不同的神经网络可能产生不同程度的过拟合,一些“反向”的拟合互相抵消,能够在整体上缓解过拟合。总的来看,Dro

39、pout 技术使用随机数的作用是:随机选取部分隐藏层神经元,每次基于不同的网络结构训练参数,从而缓解神经网络中的过拟合问题。神经网络的权值初始化和随机梯度下降的环节也涉及随机数,这里不再赘述。Python 环境下如何设置随机数种子环境下如何设置随机数种子 以上我们简单梳理了机器学习各环节可能用到的随机数。理论上,固定随机数种子后,机器学习的结果应保持不变。然而在实践过程中,不同机器学习方法固定随机数种子的方法不尽相同,技术实现并非易事。本节我们将介绍 Python 环境下如何设置随机数种子。我们以逻辑回归,XGBoost,随机森林和全连接神经网络四种常用的机器学习方法为例。上述算法依赖 skl

40、earn、xgboost、keras 和 tensorflow 等机器学习包实现,这些包提供的外部调用接口并不一致。使用 sklearn 和 xgboost 包时,构建学习模型这步可显式地控制random_state 参数,实现随机数种子的设置。而 keras 并没有提供这一选项,其官方的常见问题说明中指出,如果想得到完全可重复的结果,需要同时控制 Python 解释器、Python标准库随机数模块、numpy 和 tensorflow 的全局随机数种子,此外还需考虑 GPU 和多线程的使用。我们针对多个不同的随机数种子,测试比较每个种子的多次训练结果。结果表明,当使用sklearn 和 xg

41、boost 包时,对于几个常见学习模型,设置 random_state 参数就能保证结果可以完全重现;当以 tensorflow 作为后端使用 keras 包时,如果不使用 GPU,且在单线程环境下,无需考虑 Python 标准库随机数模块种子设置,同时固定住 numpy 和 tensorflow的随机数种子,即可保证全连接神经网络模型得到可重复的结果。2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 11 图表图表8:Python 常用机器

42、学习包中随机数种子参数设置方法常用机器学习包中随机数种子参数设置方法 Python 包包 参数参数 说明说明 sklearn random_state 构建 LogisticRegression,RandomForestClassifier 时设置 random_state 参数。xgboost random_state 构建 XGBClassifier 模型时设置好 random_state 参数。keras 无 无显式设置方式,需要在单线程环境下控制 numpy 和 tensorflow 两处随机数种子。资料来源:华泰证券研究所 图表图表9:keras 包包(tensorflow 作为后端

43、)作为后端)设置随机数种子代码实例设置随机数种子代码实例 资料来源:华泰证券研究所 机器学习机器学习选股选股模型模型随机随机性的来源性的来源 在华泰金工 人工智能 19:偶然中的必然:重采样技术检验过拟合(20190422)报告中,我们提出机器学习选股模型随机性的三种来源:样本内数据集中因子的随机扰动,样本外数据集因子的随机扰动,回测时间段的选择。针对上述三种随机性的可能来源,我们认为可以采用 Bootstrap 重采样技术模拟这些随机性,通过 Bootstrap 样本内数据集、Bootstrap样本外数据集和 Bootstrap 回测时间考察不同环节随机性对模型的影响。本文是对上篇报告的进一

44、步拓展,关注随机性的第四种来源:算法本身包含的随机数。考察方式和上篇报告稍有不同,我们将直接对随机数种子点进行遍历,分析 100 组不同随机数种子下模型表现的分布,详细方法请见下一章节。图表图表10:机器学习选股模型随机性的可能来源机器学习选股模型随机性的可能来源和对应的考察方式和对应的考察方式 资料来源:华泰证券研究所 2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 12 方法方法 人工智能选股模型测试流程人工智能选股模型测试流程 图表图

45、表11:人工智能选股模型测试流程示意图人工智能选股模型测试流程示意图 资料来源:华泰证券研究所 本文考察逻辑回归,XGBoost,随机森林,全连接神经网络四种机器学习模型(后文图表中分别以 Logit、XGBoost、RandomForest、ANN 指代)在 100 组不同随机数种子下的结果分布。机器学习模型的测试流程包含如下步骤:1.数据获取:a)股票池:全 A 股。剔除 ST 股票,剔除每个截面期下一交易日停牌的股票,剔除上市 3 个月内的股票,每只股票视作一个样本。b)回测区间:2011 年 1 月 31 日至 2019 年 1 月 31 日。2.特征和标签提取:每个自然月的最后一个交

46、易日,计算之前报告里的 70 个因子暴露度,作为样本的原始特征,因子池如图表 13 所示。计算下一整个自然月的个股超额收益(以沪深 300 指数为基准),在每个月末截面期,选取下月收益排名前 30%的股票作为正例(y=1),后 30%的股票作为负例(y=0),作为样本的标签。3.特征预处理:a)中位数去极值:设第 T 期某因子在所有个股上的暴露度序列为,为该序列中位数,1为序列|的中位数,则将序列中所有大于+51的数重设为+51,将序列中所有小于 51的数重设为 51;b)缺失值处理:得到新的因子暴露度序列后,将因子暴露度缺失的地方设为中信一级行业相同个股的平均值;c)行业市值中性化:将填充缺

47、失值后的因子暴露度对行业哑变量和取对数后的市值做线性回归,取残差作为新的因子暴露度;d)标准化:将中性化处理后的因子暴露度序列减去其现在的均值、除以其标准差,得到一个新的近似服从 N(0,1)分布的序列 4.滚动训练集和验证集的划分:由于月度滚动训练模型的时间开销较大,本文采用年度滚动训练方式,全体样本内外数据共分为八个阶段,如下图所示。例如预测 2011 年时,将 20052010 年共 72 个月数据合并作为样本内数据集;预测 T 年时,将 T-6 至T-1 年的 72 个月合并作为样本内数据。交叉验证采用分组时序交叉验证,折数为 12。图表图表12:年度滚动训练示意图年度滚动训练示意图

48、资料来源:华泰证券研究所 数据获取特征和标签提取特征预处理滚动训练集和验证集划分交叉验证调参100组随机数种子的样本内训练100组随机数种子的样本外测试模型评价2 0 5 6 8 0 7 7/3 6 1 3 9/2 0 1 9 0 4 3 0 1 6:1 2 金工研究/深度研究|2019 年 04 月 29 日 谨请参阅尾页重要声明及华泰证券股票和行业评级标准 13 图表图表13:选股模型中涉及的全部因子及其描述选股模型中涉及的全部因子及其描述 大类因子大类因子 具体因子具体因子 因子描述因子描述 因子方向因子方向 估值 EP 净利润(TTM)/总市值 1 估值 EPcut 扣除非经常性损益后

49、净利润(TTM)/总市值 1 估值 BP 净资产/总市值 1 估值 SP 营业收入(TTM)/总市值 1 估值 NCFP 净现金流(TTM)/总市值 1 估值 OCFP 经营性现金流(TTM)/总市值 1 估值 DP 近 12 个月现金红利(按除息日计)/总市值 1 估值 G/PE 净利润(TTM)同比增长率/PE_TTM 1 成长 Sales_G_q 营业收入(最新财报,YTD)同比增长率 1 成长 Profit_G_q 净利润(最新财报,YTD)同比增长率 1 成长 OCF_G_q 经营性现金流(最新财报,YTD)同比增长率 1 成长 ROE_G_q ROE(最新财报,YTD)同比增长率

50、1 财务质量 ROE_q ROE(最新财报,YTD)1 财务质量 ROE_ttm ROE(最新财报,TTM)1 财务质量 ROA_q ROA(最新财报,YTD)1 财务质量 ROA_ttm ROA(最新财报,TTM)1 财务质量 grossprofitmargin_q 毛利率(最新财报,YTD)1 财务质量 grossprofitmargin_ttm 毛利率(最新财报,TTM)1 财务质量 profitmargin_q 扣除非经常性损益后净利润率(最新财报,YTD)1 财务质量 profitmargin_ttm 扣除非经常性损益后净利润率(最新财报,TTM)1 财务质量 assetturnov

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用范文 > 工作总结

copyright@ 2008-2023 wnwk.com网站版权所有

经营许可证编号:浙ICP备2024059924号-2