您的位置:首页 > 其它

基于Adaboost的短期择时模型研究 - 知乎

2020-03-19 20:28 393 查看

https://zhuanlan.zhihu.com/p/105062059


首发于 优矿金工 2020-01-21

A. 研究目的:本文利用优矿提供的行情数据、宏观行业数据、个股因子数据等,参考兴业证券《系统化资产配置系列之三:基于AdaBoost机器学习算法的市场短期择时策略》(原作者:于明明等)的方法,挑选了一批因子,并分别用CART决策树模型、AdaBoost等机器学习模型进行市场短期择时的研究,探究用机器学习模型来解决因子筛选时的非线性、相关性等一系列传统择时模型遇到的难点问题的效果,以及不同机器学习模型的表现差异。

B. 研究结论

  • 在不考虑手续费的理想条件下,利用CART决策树模型对通联全A指数在201410月到2019年12月中进行日度择时,纯做多时可获得10.2%的年化收益,日度胜率达到了57%,最大回撤为27.2%;纯做空时获得-1.8%的年化收益,日度胜率为47.8%,最大回撤为28.8%;而如果构造多空的择时模型,可获得8.3%的年化收益,胜率为52.3%,最大回撤为27.1%,对应纯持有全A指数的年化收益为8.9%,最大回撤为49%。CART择时模型在进行做多择时上表现相比做空预测更好,但并未明显超过基准;
  • 进一步,利用adaboost模型对通联全A指数在201410月到2019年12月中进行日度择时,纯做多时可获得12%的年化收益,日度胜率达到了55.8%,最大回撤为23.4%;纯做空时获得4.9%的年化收益,日度胜率为47.6%,最大回撤为24.2%;而如果构造多空的择时模型,可获得22.7%的年化收益,胜率为52.8%,最大回撤为27.5%;
  • 从收益、最大回撤等性能指标来看,adaboost模型无论是在做多择时还是做空择时上,都相比CART模型有更好的表现,远超过基准(持有不动)的表现

C. 文章结构:本文共分为4个部分,具体如下

  • 一、指标数据的获取和计算。
  • 二、利用CART决策树模型进行择时。
  • 三、利用AdaBoost模型进行择时。
  • 四、总结。

D. 时间说明

  • 一、第一部分运行需要5分钟
  • 二、第二部分运行需要10分钟
  • 三、第三部分运行需要20分钟
  • 四、第三部分运行需要1分钟
  • 总耗时35分钟左右

第一部分:指标数据的获取和计算

该部分总共计算了46个指标从 <data_start_date> 到 <data_end_date> 之间的每日值,具体内容为:

  • 1.1 取14个宏观指标
  • 1.2 计算9个商品、股指、指数因子指标
  • 1.3 计算23个指标的5日变化率指标

所有指标列表汇总如下:

计算后的指标数据存储在<save_dir>/factor.pkl中,样式具体如下:

1.1 取14个宏观指标

1.2 计算商品、股指、指数因子指标

1.3 计算指标的过去5日变化率

对上面计算的指标,每个都计算一个5日变化率的值,得到23个新的指标,计算公式和指标明细如下:

5日变化率指标=[value(t)−value(t−5)]/value(t−5),其中,value(t)为指标在t日的值

第二部分:利用CART决策树模型进行择时

该部分实现了CART决策树的择时模型,具体包括以下部分内容:

  • 2.1 CART决策树理论介绍
  • 2.2 模型训练和预测机制说明
  • 2.3 CART决策树的实现代码
  • 2.4 CART决策树的择时效果

2.1 CART决策树理论介绍

决策树(decision tree)是一种基本的分类与回归方法。决策树模型呈树状结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布,其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。建立决策树在决定先用哪些指标进行分叉时,有很多种算法,CART是其中最著名的算法之一,其算法逻辑如下所示:

参考资料:

2.2 模型训练和预测机制说明

参考 兴业证券《系统化资产配置系列之三:基于AdaBoost机器学习算法的市场短期择时策略》 中的方法,利用CART模型对通联全A指数进行日度择时,在每个月月底进行一次模型更新,意味着在每个月的月初到月末中,CART决策树模型是不变的,每天不同的输入产生对下一个交易日的不同预测结果,具体为:

  • 在每个月(T月)的最后一个交易日M日,利用M-1日及之前的所有历史数据,训练得到一个新的决策树模型Model(T+1)
  • 对于T+1月中的每一个交易日,将当日的指标值(特征值)输入到Model(T+1)中,得到对下一个交易日的涨跌预测
  • 为了保证有足够多的历史数据进行训练,从20141027日开始预测,每个训练模型至少用到了20070601到20141027之间的数据进行训练
  • 指标值中的缺失值统一用100000代替,这样既保留了缺失这一个特征状态,也不影响模型的正常运算

2.3 CART决策树的实现代码

CART决策树的超参数有很多个,其中最重要的是不纯度的度量方法(信息熵或者是基尼系数),以及所允许的最大决策树深度,为了得到更好的效果,下文使用了GridSearchCV来搜寻最佳的超参数,具体为:

  • 所有参数中,选择在5层训练集的交叉验证中,得分函数值(准确率)最高的一组
  • 事先定义了超参数的取值范围, 不纯度的度量方法取值为[信息熵, 基尼系数]之一,而最大的决策树深度为[5, 15, 20, 25, 30]之一

2.4 CART决策树的择时效果

遍历20141028到20191231的每一个交易日,对下一个交易日的涨跌进行预测,并将结果存储在predict_df中,其样式如下所示

根据模型择时结果,画出策略收益图

从上面的结果可以看出,CART决策树在进行做多预测时,有不错的表现,纯做多时可获得10.2%的年化收益,日度胜率达到了57%,最大回撤为27.2%;纯做空时获得-1.8%的年化收益,日度胜率为47.8%,最大回撤为28.8%;而如果构造多空的择时模型,可获得8.3%的年化收益,胜率为52.3%,最大回撤为27.1%,对应纯持有全A指数的年化收益为8.9%,最大回撤为49%。CART择时模型在进行做多择时上表现相比做空预测更好,但并未明显超过基准,如果考虑实际操作时的手续费,用该择时模型并不能取得超额收益,原因可能有以下几个方面:

  • 模型训练时候发生了过拟合,在样本内表现很好,但是样本外预测的泛化能力很差,这种情况可以通过分析样本内外的准确率等指标进行简单判断;
  • 所选用的指标本身效果不行
  • 机器学习模型并不适用等

下图展示了所用的CART模型在样本内的准确率,大概在71%左右,而根据上面的结果可知,在样本外预测准确率在50%左右,总体来看样本外的准确率有所下降,但是下降的并不是非常的极端,因此出了原因1,原因2和3也是需要进行深入研究的,有兴趣的读者可以将决策树图画出来进行详细的分析

第三部分:利用AdaBoost模型进行择时

该部分实现了CART决策树的择时模型,具体包括以下部分内容:

  • 3.1 AdaBoost模型理论介绍
  • 3.2 模型训练和预测机制说明
  • 3.3 AdaBoost模型的实现代码
  • 3.4 AdaBoost模型的择时效果

3.1 AdaBoost模型理论介绍


Adaboost全称为adaptive boosting,是提升模型(Boosting)的一种变形,提升方法是指:分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类器的性能。模型的示意图如下所示:

其中的基分类器一般选择CART模型,明显可以看出AdaBoost是一个包含了多个基分类器的集成模型,在进行训练时候,不同基分类器的目标不一样,后一个的分类器主要针对前一个分类器的缺点(训练集中误差较大样本)进行性能弥补,表现方式为相对于前一个分类器,后一个分类器训练时,前者误差较大的样本权重会更大,最后把多个分类器的结果等权在一起考虑得到了最终的预测结果,关于AdaBoost过程的详细理论推导,处于篇幅原因本文不进行详细描述,可以参考下面的学习资料:


3.2 模型训练和预测机制说明


该部分的模型训练和预测机制同2.2一样,如下所示:

在每个月(T月)的最后一个交易日M日,利用M-1日及之前的所有历史数据,训练得到一个新的AdaBoost模型Model(T+1)

  • 对于T+1月中的每一个交易日,将当日的指标值(特征值)输入到Model(T+1)中,得到对下一个交易日的涨跌预测
  • 为了保证有足够多的历史数据进行训练,从20141027日开始预测,每个训练模型至少用到了20070601到20141027之间的数据进行训练
  • 指标值中的缺失值统一用100000代替,这样既保留了缺失这一个特征状态,也不影响模型的正常运算

3.3 AdaBoost模型的实现代码


AdaBoost模型同样有很多个超参数,除了基分类器中的不纯度的度量方法,基分类器的个数也是很重要的参数,此外基分类器的最大深度理论上也是很重要的参数,但是参考研报中的做法,设定好最大深度为1,因此不需要进行调仓。在使用了GridSearchCV进行调优超参数时,对于AdaBoost中基分类器的参数用"__"表示

3.4 AdaBoost模型的择时效果


从上面的结果可以看出,纯做多时可获得12%的年化收益,日度胜率达到了55.8%,最大回撤为23.4%;纯做空时获得4.9%的年化收益,日度胜率为47.6%,最大回撤为24.2%;而如果构造多空的择时模型,可获得22.7%的年化收益,胜率为52.8%,最大回撤为27.5%,远超过CART模型的表现以及计准的表现,说明AdaBoost在进行短期择时上可以取得很好的效果。下图进一步分析了模型在样本内和样本外的准确性,可以看出在样本内的准确度为69%左右,上面的回测结果显示样本外的胜率为52%,样本外的准确性相比样本内下降的水平同第二章的CART接近,因此也说明CART表现不好,本身模型适用情况的关系更大。

第四部分:总结

经过上面的实证分析,CART模型在进行短周期预测时的效果并不好,但是AdaBoost择时模型可以取得2倍于基准(一直持有)的年化收益率,最大回撤也更低(23.4% VS 49%),收益风险比也从基准的0.37提高到0.96,效果非常明显,是一个很不错的择时模型,当然上述结论只是基于46个指标通过回测得到的,在投入实盘之前还应该进行选用指标的敏感性分析、不同时间区间的测试分析以进一步验证模型的鲁棒性,有兴趣的读者可以自己进行深入研究,本文起一个抛砖引玉的作用不再进行详细的论述。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  h2 决策树