【历史文档】高阶技巧-XGBoost模型增量训练
由qxiao创建,最终由small_q 被浏览 117 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发IDE(AIStudio):
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
什么是模型增量训练
模型增量训练是在原有模型的基础上利用新的数据集对模型进行再次训练. 举个很简单的例子, 人从出生开始会被教导认识这个世界的事物, 并且每次认识事物都是基于已有认知的基础上去学习新的知识. 人的成长过程就是增量更新的过程.
当我们使用传统的机器学习方法建立量化投资模型时,通常需要使用历史数据进行训练,并使用该模型对新数据进行预测。然而,如果市场发生了变化,我们需要重新训练整个模型,以保持其预测能力。这个过程可能非常耗时,并且无法及时捕捉到市场的变化。
相比之下,增量更新是一种更加高效和实用的机器学习模型更新方式。它可以仅仅使用新的数据来更新模型,而不需要重新训练整个模型。具体来说,增量更新可以分为两个步骤:
- 在原有模型的基础上,使用新的数据进行训练,得到一个新的模型。
- 使用一定的策略将原有模型和新模型进行融合,得到一个更新后的模型。
增量更新的优点在于,它可以快速响应市场变化,并且不需要花费大量的时间和计算资源进行重新训练。此外,增量更新还可以避免过拟合问题,因为只有新数据被用来更新模型,而不是整个数据集。
在量化投资领域中, 成千上百万条的训练数据是常有的事, 虽然样本量成千上百万不算多, 但如果因子数量过多, 那数据集将会十分恐怖,所以,增量更新的需求越来越多.
XGBoost增量更新
这里我们以XGBoost模型为载体进行增量训练,采用保存模型和加载模型的逻辑进行增量训练和预测:
https://bigquant.com/codeshare/8561bea9-8eb8-44b2-984c-4b32c3a86cb1
代码逻辑较为简单:
- 建立一个XGBoost模型对鸢尾花数据集建模, 挑选10%的数据作为增量数据. 对剩下的80%的数据, 采用7比3的比例划分训练集和测试集;
- 插入一个判断条件, 利用 os.path.exists(‘你设置的路径‘) 方法判断某一文件夹下是否有历史训练模型, 若有,则在历史模型的基础上继续训练, 若没有, 则重新训练一个XGBoost模型;
- 最后利用 accuracy_score(ypre, ytrue) 方法对比增量前后的模型效果.
\
XGBoost增量训练在量化中的应用
现在我们需要实现一个需求:使用XGBoost对2010年1月1日至2014年1月1日数据进行建模, 进一步使用2014年1月1日至2015年1月1日的数据对XGBoost进行增量更新:
https://bigquant.com/codeshare/022debc7-4709-4ca1-936e-6111f4ed0791
1. 数据预处理
首先, 抽取2010年1月1日至2014年1月1日的13个因子:
进一步根据收益率分箱排序进行等级标注:
最后剔除包含缺失值的样本.
\
2. 增量模型设置
接下来需要引入一个自定义的Python模块来编写相关程序:
首先提取训练数据的特征和标签,将它们打包成矩阵格式.
进一步定义XGBoost的参数. 由于是对股票数据进行排序, 故这里使用pairwise目标函数对模型进行优化, 并且, 这是一个由十颗决策树集成而成的XGBoost模型, 每棵树的深度为6, 并且不加入模型的惩罚项(gamma=0).
接下来就可以开始编写增量训练的程序了:
若之前模型没有训练, 则程序会建立一个新的模型, 若有, 则会在已有模型的基础上进行增量训练, 最后训练结果会被保存下来.
将预测结果和股票名称和日期匹配,以这种形式传入回测框架.
\