精品课程

基于XGBoost模型的智能选股策略

由clearyf创建,最终由qxiao 被浏览 921 用户

旧版声明

本文为旧版实现,供学习参考。

模版策略

导语

上篇报告介绍了集成学习里Bagging方法的代表算法随机森林,本文将着眼于另一种集成学习方法:Boosting,并深入介绍Boosting里的“王牌” XGBoost 模型。最后,以一个实例介绍XGBoost模型在智能选股方面的应用。


Boosting V.S. Bagging

作为集成学习的两大分支,Boosting和Bagging都秉持着“三个臭皮匠顶个诸葛亮”的想法,致力于将单个弱学习器组合成为一个强学习器。他们的不同主要在组合方式上:

Bagging如上篇报告介绍的,采用bootstrap随机抽样从整体数据集中得到很多个小数据集(小袋),用每一个小数据集分别并列训练弱学习器,最后采纳投票或者取均值的方式得到强学习器。

而Boosting的想法是加强,用整体数据集训练出第一个弱学习器后,在此基础上采用调整权值或者拟合残差的方法降低数据集的损失,最后采用加权平均或者加法原理得到强学习器。Boosting每一步的优化都要在得到上一步弱学习器的基础上进行,是一种“串行”的方法。

图1:Boosting 和 Bagging 示意{w:100} 这两种方法的主要区别如下:

{w:100}

XGBoost原理解析

XGBoost的主要原理

XGBoost(eXtreme Gradient Boosting)全名为极端梯度提升,是一种Boosting集成算法。它通过最小化损失函数(目标函数)训练单个弱学习器,然后计算得出残差,用残差集再去训练新的弱学习器,目的在于让样本的损失变得更小。在所有的弱学习器训练完成后,将得分加总得到强学习器的得分。

XGBoost的创新之处在于在单纯的损失函数:$ \sum_{i=1}^{n}L(y_i,\hat{y_i})$ 基础上增加了惩罚项:$ \sum_{k=1}^{K}\Omega(f_k)$,降低模型的复杂度,从而避免过拟合问题。

{w:100}XGBoost 的思想可以用一个通俗的例子解释,假如某人有170厘米身高,我们首先用160厘米去拟合,发现残差有10厘米,这时我们用6厘米去拟合剩下的残差,发现残差还有4厘米,第三轮我们用3厘米拟合剩下的残差,残差就只有1厘米了。如果迭代轮数还没有完,可以继续迭代下去,每一轮迭代,拟合的身高残差都会减小。

XGBoost的重要参数

框架参数

  • n_estimators:最大弱学习器的个数。一般来说n_estimators太小容易欠拟合,数量太多容易过拟合。实际调参时n_estimators与learning_rate一起考虑。
  • learning_rate:学习率,每个弱学习器的权重缩减系数v,也称作步长,取值在0到1之间。v越小,弱学习器迭代次数越多。
  • subsample:子采样率,取值在0到1之间。若取值为1,则使用全部样本。如果取值小于1,则只有部分样本会做XGBoost拟合,可以减少方差,防止过拟合;但同时会增大样本拟合的偏差,因此取值不能太低。

弱学习器参数

  • max_features:决策树划分时考虑的最大特征个数,默认全部考虑。若特征过多可以取部分特征以加快生成时间。
  • colsample_bytree:构建树时的列抽样比例。
  • colsample_bylevel:决策树每层分裂时的列抽样比例。

XGBoost的优势

  • XGBoost 在损失函数里加入了正则项,用于控制模型的复杂度。从方差和偏差权衡的角度来讲,正则项降低了模型的方差,使训练得出的模型更加简单,能防止过拟合
  • XGBoost 除了决策树外,还支持线性分类器作为弱分类器,此时XGBoost 相当于包含了L1 和L2 正则项的Logistic 回归(分类问题)或者线性回归(回归问题)。
  • XGBoost 借鉴了随机森林的做法,支持特征抽样,在训练弱学习器时,只使用抽样出来的部分特征。这样不仅能降低过拟合,还能减少计算
  • XGBoost 支持并行。但是XGBoost 的并行不是指能够并行地训练决策树,XGBoost 也是训练完一棵决策树再训练下一棵决策树的。XGBoost 是在处理特征的层面上实现并行的。我们知道,训练决策树最耗时的一步就是对各个特征的值进行排序(为了确定最佳分割点)并计算信息增益,XGBoost 对于各个特征的信息增益计算就可以在多线程中进行。

其他

  • 特征重要性排序:与随机森林类似,基于决策树的XGBoost模型也可以给出特征重要性的排序。其原理与随机森林类似,可参见随机森林专题研究
  • 模型评价:同样可参见随机森林专题研究

XGBoost智能选股

{w:100} 如图4所示,XGBoost的策略构建包含下列步骤:

  • 获取数据 :A股所有股票。
  • 特征和标签提取 :计算18个因子作为样本特征;计算未来5日的个股收益作为样本的标签。
  • 特征预处理 :进行缺失值处理。
  • 模型训练与预测 :使用XGBoost模型进行训练和预测。
  • 策略回测 :利用2010到2017年数据进行训练,预测2017到2019年的股票表现。每日买入预测排名最靠前的5只股票,至少持有五日,同时淘汰排名靠后的股票。具体而言,预测排名越靠前,分配到的资金越多且最大资金占用比例不超过20%;初始5日平均分配资金,之后,尽量使用剩余资金(这里设置最多用等量的1.5倍)。
  • 模型评价 :查看模型回测结果,并与随机森林进行对比。

回测结果如下: 图5:XGBoost回测结果{w:100}对比随机森林在同一时段的回测结果: 图6:随机森林回测结果{w:100}XGBoost与随机森林相比,明显的优势在于回测速度很快,这和其并行处理特征的特点相关。从回测结果来看,XGBoost策略不及随机森林,收益率比随机森林低10%,且最大回撤稍稍高出随机森林2%。当然,经过进一步调参,相信XGBoost的效果会有比较大的提升。

模型评估如下: 图7:XGBoost训练集评估{w:100}

{w:100}模型评估的结果也表明随机森林的拟合程度更高一些,但是从误差的角度来看,随机森林和XGBoost的差别不大。

欢迎进一步尝试:

策略案例

https://bigquant.com/experimentshare/1ec98acc4e674090a4ad72b92d6b6b66

参考文献

\

标签

XGBoost模型算法选股XGBoostxgboost
评论
  • 这个策略我clone之后,跑出来的收益率为-78.3%
  • 我跑出来为0