历史文档

【历史文档】高阶技巧-滚动训练视角下的超参搜索实现——以AI量化选股为例

由qxiao创建,最终由small_q 被浏览 266 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发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

背景

训练好的模型并不能一直有效,因此需要更新模型,然后使用参数表现最佳的模型进行预测。滚动训练和超参搜索是平台的两个重要模块,今天结束将其组合使用。

滚动训练

我们以下面示意图介绍滚动训练的机制:

图1 滚动训练{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}可以看出,滚动训练本质是多次训练,得到不同模型的预测结果,然后将预测结果拉通起来回测。这样保证了模型会依据最新的特征数据进行更新,而不是单一固定的模型,进而与市场风格尽可能自适应。

对滚动训练还不理解的朋友可以参考之前的文章:滚动训练

滚动训练结合超参搜索

超参搜索是量化研究不得不面临的一个问题,尤其是CTA的研究,参数的寻找直接影响到业绩的好坏。

在交易过程中,很多研究员倾向于选择平原地带的参数,该参数鲁棒性较好。

https://bigquant.com/wiki/doc/jianjie-vR9oefGI0b

滚动训练+超参搜索

结合AI可视化模板策略,我们以模型训练模块的两个参数介绍如何将滚动训练和超参搜索结合起来:

number_of_trees:树的数量, 搜索空间为:[10,20,30]

learning_of_rate:学习率, 搜索空间为:[0.1,0.2]

图3 滚动训练+超参搜索{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}如图所示,一次滚动,会有6组参数(参数空间的迪卡尔集,本例是3*2),我们将最佳参数应用在未来。例如,在16年底,第1次滚动产生了6个模型,其中a2 表现最好,那么在17年预测中我们使用a2模型参数得到预测结果,18、19年以此类推,将17、18、19的预测结果再拉通回测。可以看出,较之于单一的滚动训练而言,此时拉通后的数据没有16年,拉通的回测时间会少一些,毕竟第一次选择最优参数用掉了一段时间做判断。

实践案例

我们以下述的demo演示介绍,该demo可直接克隆到自己的策略开发环境。

滚动训练的时间设置如下:

start_date='2015-01-01', # 数据开始日期
end_date='2022-09-06', # 数据结束日期
train_update_days=250, # 更新周期,按交易日计算,每多少天更新一次
train_data_min_days=250, # 最小数据天数
train_data_max_days=750, # 最大数据天数

在此设置下,模型滚动如下,一共7次滚动: 图4 滚动时间{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}超参搜索的设置如下:

 for nt in [20,30,40]: # number_of_trees
            for lr in [0.1,0.2]: # learning_of_rate

每次滚动有6个模型。实盘交易过程中,一般以上一次滚动的最佳参数作为下期模型的参数,表现的衡量是回测结果夏普比率。

结合滚动训练,因此一共有42次模型训练预测,运行过程中图表输出也较多,大家不想看特征重要性、回测收益图的话可以在对应模块将画图参数设置为False。所以,计算量比较大,建议大家使用较大的资源配置账户克隆,免得策略内核一直重启。另外,滚动训练属于高级优化模块,一般用于投研回测环节,运行画布的时候要记得点击”运行全部“,不能单独运行该模块。

该功能也能通过”自定义运行“模块实现,毕竟滚动训练是”自定义运行“的一种特例,该模块能运行效率更高,因为能将并行运行的计算任务提交到集群运行,而滚动训练是当前开发环境串行运行。下篇我们再做介绍。

滚动训练和超参搜索的逻辑都写在了”滚动训练“模块,感兴趣的朋友可以自己阅读代码,并依据自己的特定需求修改,比如参数搜索不是模型参数,而是特征列表。

https://bigquant.com/experimentshare/9b1742157dc54fa59c4b8548a1752173

\

标签

AI量化交易
{link}