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