【研报复现】:华泰证券—⼈⼯智能选股之随机森林模型
⼀、随机森林模型简介
随机森林(Random Forest)作为⼀种⽐较新的机器学习⽅法,近年来在业界内的关注度与受欢迎程度得到逐步提升。
经典的机器学习模型是神经⽹络,其预测精确,但计算量也⼤。上世纪80年代,决策树算法⾸次出现,通过反复⼆分数
据进⾏分类或回归,计算量⼤⼤降低。2001年Breiman在此基础上提出⼀种新的算法,这⼀算法由多个随机⼦集⽣成决
策树的实例组成,故我们将其形象地称为“随机森林”。下⾯我们从决策树⼊⼿,⼀起逐步探讨随机森林的奥秘。
1.1 决策树
⽇常⽣活中,我们对于事物的认知都是基于特征的判断与分类,例如通过胎⽣与否判断是否哺乳动物,根据肚脐尖圆来
挑选螃蟹公母。决策树就是采⽤这样的思想,基于多个特征进⾏分类决策。在树的每个结点处,根据特征的表现通过某
种规则分裂出下⼀层的叶⼦节点,终端的叶⼦节点即为最终的分类结果。决策树学习的关键是选择最优划分属性。随着
逐层划分,决策树分⽀结点所包含的样本类别会逐渐趋于⼀致,即节点分裂时要使得节点分裂后的信息增益
(Information Gain)最⼤。
1.2 CART算法
⽬前主流的决策树算法包括C4.5和CART:C4.5每个节点可分裂为多个⼦节点,不⽀持特征的组合,只能⽤于分类问
题:CART每个节点只分裂成两个节点,⽀持特征的组合,可⽤于分类和回归问题。在随机森林中,通常采⽤CART算
法来选择划分属性,并使⽤“基尼指数”(Gini Index)来定义信息增益程度。分类问题中,假设有K个类,样本集D中的
点属于第k类的概率为Pk,则其Gini指数为
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不⼀致的概率,Gini(D)越⼩,数据集D的纯度越⾼。⼆分类
问题中,若对于给定的样本集合D(|D|表⽰集合元素个数),根据特征A分裂为D1和D2两个不想交的部分,则分裂后
的
从根节点开始,递归地在每个节点分裂时选取Gini(D,A)最⼩的特征A为划分属性,将训练集依特征分配到两个⼦节点中
取,照此逐层划分,直到满⾜停⽌条件(例如信息增益⼩于预设阈值或达到最⼤层次数等)。即⽣成⼀颗可以进⾏分类
取,照此逐层划分,直到满⾜停⽌条件(例如信息增益⼩于预设阈值或达到最⼤层次数等)。即⽣成⼀颗可以进⾏分类
预测的决策树。
1.3 树剪枝
我们利⽤训练样本来⽣成决策树时,在不加限制的条件下会递归地选取特征进⾏⼆次分类直到不能继续下去为⽌。诚然
这样产⽣的树对训练集数据的分类很准确,,模拟分类效果如下图所⽰。但不难发现对于个别点的分类区域划分有
些“牵强附会”,即出现过拟合现象,造成的结果是,分类器对于样本外数据的分类效果会明显劣于样本内数据,换⽽⾔
之,模型预测结果的可靠性存疑。为此,我们希望通过降低决策树的复杂程度来减少过拟合的风险,故可以主动地去掉
⼀些分⽀进⾏简化,这⼀过程称为剪枝(Pruning)。
决策树的剪枝有两种思路:预剪枝(Pre-Pruning)和后剪枝(Post-Pruning)。预剪枝是在构造决策树的同时进⾏剪
枝。每个节点在划分前需进⾏估计,若当前节点的划分不能带来决策树泛化性能的提升,则停⽌划分并将当前节点标记
为叶节点。后剪枝即从已⽣成的决策树上裁减掉⼀些⼦树或叶节点,并将其⽗节点作为新的叶节点。从⽽简化分类树模
型
1.3.1预剪枝
在预剪枝过程中,常⽤的判断停⽌树⽣长⽅法包括以下⼏种:
1、达到最⼤树深度(Maximum Tree Depth),如下图中设置max_depth=3;
2、设置最优划分下内部/叶节点的最⼩样本数:⼩于阈值即停⽌⼦树的划分或对叶节点进⾏剪枝;
3、(在特征为离散状态下)到达此节点的样本具有相同的特征(不必⼀定属于同⼀类);
4、计算每次⽣长对系统性能的增益,如果这个增益值⼩于某个阈值则不进⾏⽣长。
1.3.2后剪枝
后剪枝(Post-Pruning)的剪枝过程是在决策树构造完成后删除⼀些⼦树,往往是递归地⾃上⽽下进⾏。后剪枝常见的
算法包括:错误率降低剪枝、悲观剪枝、代价复杂度剪枝、基于错误的剪枝等。我们以代价复杂度剪枝为例来进⾏说
明。
设树T的叶节点个数为|T|,t是树T的叶节点,该叶节点有t个样本点,其中k类的样本点有tk个,k=1,2,…,K,Ht(T)为
叶节点t上的经验熵,alpha>0为参数,则决策树学习的损失函数可以定义为:
其中,经验熵为
在损失函数中记
这时有
其中C(T)表⽰模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表⽰模型的复杂度,参数alpha控制两者
之间的关系。简⽽⾔之,后剪枝就是在给定alpha的条件下选择损失函数最⼩的⼦树。损失函数刻画了训练集拟合程度
与模型复杂度之间的平衡,通过优化损失函数在进⾏更好拟合的同时考虑了减⼩模型复杂度。
1.4 随机森林
通过前⾯的介绍我们已经对决策树有了清晰的了解,随机森林(RandomForest)正是⼀种由诸多决策树通过Bagging
的⽅式组成的分类器。其中,Bagging是分类器集成学习的两⼤渊薮中区别于Boosting派系(串⾏⽅法)的⼀种并⾏⽅
法,它的特点是各个弱学习器之间没有依赖关系,可以并⾏拟合。Bagging⽅法是Bootstrap随机采样思想在机器学习上
的应⽤。如下图所⽰,我们由原始数据集⽣成个Bootstrap数据集,对于每个Bootstrap数据集分别训练⼀个弱分类器,
最终⽤投票、取平均值等⽅法组合成强分类器。
具体地说,随机森林根据以下两步⽅法建造每棵决策树。第⼀步称为“⾏采样”,从全体训练样本中有放回地抽样,得到
⼀个Bootstrap数据集。第⼆步称为“列采样”,从全部M个特征中随机选择m个特征(m 特征为新的训练集训练⼀棵决策树。如果是分类预测,则棵决策树投出最多票数的类别或者类别之⼀为最终类别。如 果是对连续数值回归预测,则对棵决策树得到的回归或0-1分类结果进⾏算术平均得到的值为最终的模型输出。 ⼆、数据说明 1、特征选取:由于AT中暂时⽆法获取包括财务指标在内的许多基本⾯数据,我们这⾥的特征以技术⾯指标为主。具体 包括: (1)动量反转因⼦:包括股票过去1-6周⾥的对数收益率。 (2)波动率因⼦:包括股票过去1-6周⾥的收益率标准差与沪深300指数同期标准差的差值,⼤于0表明该股票在此期间 的波动超过⼤盘,⼩于0表⽰波动⼩于⼤盘。 (3)资⾦流量因⼦:包括股票过去1-6周⾥的累计资⾦净流量。由于不同上市公司的规模相差很⼤,为了使不同股票的 资⾦流量具有可⽐性,我们需要对其进⾏标准化处理。 (4)技术指标因⼦:取常⽤的技术指标MACD(长周期26天,短周期12天,DEA周期9天)和RSI(周期为20天)。 以上总计为20个特征指标。并以股票的超额收益率(相对于沪深300指数)作为分类指标。 以上总计为20个特征指标。并以股票的超额收益率(相对于沪深300指数)作为分类指标。 2、以沪深300指数的成分股为候选股票池,并剔除测试期间未上市的以及期间累计停牌超过30天的股票。以沪深300指 数成分股作为候选股票池的好处在于其中多数为业绩良好的蓝筹股,短时间⾥发⽣破产、退市等的可能性较⼩,因此在 使⽤历史数据时可以减少幸存者偏差。但缺点是公司类型较为单⼀,训练样本的数据也较为有限。 3、训练样本期间为2013-2015年。 4、投资⽅式:每次选股的投资期为1个⽉,之后进⾏平仓并重新选股投资。 (注:为便于数据处理,我们以连续的5个交易⽇视为1周,20个交易⽇视为1个⽉。) 三、模型训练 以当前的沪深300成分股为股票池,扣除13年尚未上市以及13-15年期间累计停牌超过30天的股票,数据规模为727个交 易⽇×155只股票,经整理得到5270组样本。对原始数据进⾏0-1特征分类时,上述特征指标的阈值分别取0(动量因 ⼦)、0(波动率因⼦)、0(资⾦流因⼦)、0(MACD)、50(RSI)和0(⽬标类别)。 我们在全体样本中随机取90%的样本作为训练集,剩下的10%样本作为验证模型泛化能⼒的测试集。森林规模为200棵 树,特征标签的数量我们从5-20进⾏讨论。对于剪枝⽅⾯的考虑,我们采取前⽂预剪枝中的⽅法4,即设定信息增益阈 值,当分类带来的信息增益过⼩时便不再进⾏细分。 表3.1特征个数选择与相关指标评估 注:本表格的数据是在信息增益阈值取0.0001的条件下取得的。 关于上表指标的说明: 我们记tp为真正例,即实际上涨并且模型判定为上涨的样本;fp为伪正例,即实际下跌但模型判定为上涨的样本;tn为 真负例,即实际下跌且模型判定为下跌的样本;fn为伪负例,即实际上涨但模型判定为下跌的样本。 则准确率=(tp+tn)/(tp+fp+tn+fn)表⽰模型做出⼀个判断时,该判断的的正确率; 精确率=tp/(tp+fp)表⽰模型判断为上涨的样本中实际也是上涨的⽐率; 召回率=tp/(tp+fn)表⽰在整个市场的所有上涨机会中,模型能够抓住的机会的⽐率。 上表的数据⼤体上反映出了⼏个情况: (1)对于训练集数据,随着特征数量的增加,准确率和召回率都呈明显的上涨趋势,⽽精确率基本都超过0.8这⼀相当 ⾼的数据,但对于测试集数据,各项指标基本上都明显⼩于训练集数据。表明模型依然存在过拟合现象。 (2)我们的评估应以测试集的指标为主,其中精确率反映了投资标的(预测上涨)中真正上涨的⽐率,因此是我们主 要的决策指标,同时召回率不应过低,否则当市场机会较少时可能会出现不出投资标的的情况(即模型全部判定为下 跌)。综合这两个指标,我们认为特征数量应在10-15区间为宜。 (3)由于模型本⾝是⼀种随机算法,因此即使在相同的参数下,每次计算的结果也会有所出⼊,为了进⼀步确保模型 的可靠性,我们还应多次计算并考察指标的分布情况 关于过拟合,我们调整了信息增益阈值的参数,但依然不能很好地消除该问题。由于时间关系,我们暂时不讨论其他剪 枝⽅法下是否能更好地解决过拟合的问题。 我们选择上表中指标较为出⾊的特征个数参数(10、11和14)进⾏进⼀步的验证。考虑到计算时间的问题,每⼀个参 数我们都只进⾏10次计算,并将每⼀次的计算结果如下表所⽰: 表3.2关于模型稳定性的多次训练 总的来讲,当特征个数在10个左右时,模型在样本外也有较好的预测效果 四、策略回测 我们⽤表3.2中测试集指标中精确率最⾼的森林⽹络(特征个数为10时的第六次训练结果)进⾏2016年的回测,回测效 果如下图所⽰: 主要业绩指标:年化收益15.6%,最⼤回撤18.5%,夏普⽐率0.63,Calmar⽐率0.74,胜率57.41%。 总结:总的来说,随机森林算法只是提供了⼀种分类⽅法,该⽅法在实践中的有效性除了受算法本⾝的影响以外,更依 赖于分类的依据(特征指标),如果选取的特征指标对事件的预测(相关)能⼒较弱,那么再好的算法可能也很难在样 本外取得很好的分类效果。因此对于本⽂的进⼀步改进⽅向笔者认为⼀是关于所选取特征指标的考量,⼆是如何改进算 法(例如剪枝部分)以提⾼模型的泛化能⼒。 代码部分:(基本的数据处理部分的代码从略) 1.单棵决策树代码: 2.随机森林训练代码: 3.策略代码: 4.策略执⾏代码:
本文发布于:2023-05-24 21:47:35,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/falv/fa/78/107958.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |