机器学习系列:xgboost因子择时

用xgboost模型可以提高单因子的MAE、因子的风格轮动秩相关系数,并提高多因子组合的收益和回撤表现,显示出不错的择时效果。

本文共分为四个部分,具体如下:

一、数据准备和处理;

二、预测因子的未来IC: 用xgboost静态模型、滚动模型来预测因子的下一期IC;

三、单因子选股比较:比较6个因子择时和不择时的表现。

四、多因子实证分析:利用xgboost预测的IC值合成因子,并构建组合比较合成因子的效果

备注:深度报告版权归优矿所有,禁止直接转载或编辑后转载。

一、数据准备和处理

该部分耗时 15分钟

该部分内容为:

获取6个因子的值

将因子值进行标准化

获取13个外部变量的因子值,作为模型的输入特征

计算因子的历史IC,作为模型的输入特征

将需要预测的目标(因子IC)和特征对齐,即 model_data

1.1 确定universe

查看完整代码请前往优矿量化社区

1.2 取因子数据,并对数据进行标准化

查看完整代码请前往优矿量化社区

1.3 取外部变量因子数据,作为模型特征的一部分

查看完整代码请前往优矿量化社区

上面是所需要的数据,已经更新到2018-05-31,下面的代码需要根据自己的需要更改回测时间。

1.4 计算因子的IC,用历史IC作为模型特征的一部分

查看完整代码请前往优矿量化社区

1.5 将预测值、特征值对齐

查看完整代码请前往优矿量化社区

二、预测因子的未来IC

该部分耗时 2.5小时左右

参照组:以上一期的IC来预测下一期的IC

用xgboost模型,分别以静态和滚动的方式预测IC

通过MAE、风格轮动秩相关系数比较不同预测方法的表现

2.1 参照组,以过去一期的IC代表未来一期的IC

baseline_frame的格式为:[trade_date, 各个因子的真实IC值(以_IC结尾),各个因子的预测IC值(以IC_extend结尾)]

load上面的数据,重启时候接上

查看完整代码请前往优矿量化社区

2.2 用xgboost对因子IC进行预测

static: 代表不进行滚动建模,2008-2013数据进行训练,用训练得到的模型预测因子值(6个模型)

rolling: 代表滚动建模,从2014年开始,每一个季度后将训练数据滚动一个季度训练得到新的模型,并用在下一个季度的预测上

得到的static_result/rolling_result 为 dataframe,列为 trade_date, 【各个因子的实际IC】,【各个因子的预测IC】

xgboost有很多超参数可以调整,在本文中,我们对max_depth in [3, 4], eta in [0.01, 0.02, 0.1, 0.2]进行了调参,最终选择了 max_depth=3, eta=0.01

时间说明: 该部分耗时较长,跑static的模型,在30分钟左右,跑rolling模型的时间在1-2个小时

查看完整代码请前往优矿量化社区

2.3 比较MAE、风格轮动秩相关系数

查看完整代码请前往优矿量化社区

从MAE来看,用xgboost模型预测的IC明显比baseline要高

从风格轮动秩相关系数来看,xgboost预测的结果秩相关系数更高,且更稳定。


三、单因子选股比较

该部分耗时 15分钟

查看完整代码请前往优矿量化社区

查看完整代码请前往优矿量化社区

四、多因子实证分析

根据预测的IC值合成因子

对合成后的因子构建组合并进行回测

4.1 合成因子

合成方法:

正向因子,下一期预测的IC为正,因子权重为预测的IC值

负向因子,下一期预测的IC为负,因子权重为预测的-IC值

所有因子都相反,则等权合成

最后进行归一化

等权合成因子作为对比

查看完整代码请前往优矿量化社区

4.2 利用合成后的因子构建组合并回测

组合构建和回测说明:

中证500成份股、剔除ST、停牌股票

等权买入合成因子值最大的一组(分成10组)

回测期:2014年1月到2017年12月

查看完整代码请前往优矿量化社区

4.2.1 等权合成组合

查看完整代码请前往优矿量化社区


4.2.2 xgboost静态组合

查看完整代码请前往优矿量化社区

查看完整代码请前往优矿量化社区

4.2.3 xgboost的rolling组合

查看完整代码请前往优矿量化社区

查看完整代码请前往优矿量化社区

从上表来看,xgboost能够有效的提高多因子表现(收益比等权多,回撤也更小),年化收益为负可能是由于特征选择的因素,可以通过增加更多的因子以及外部变量来增强模型的效果。

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值