【历史文档】高阶技巧-如何固化深度学习、随机森林和StockRanker模型|模型固化
由qxiao创建,最终由qxiao 被浏览 1009 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发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
深度学习模型的固化
由于深度学习中牵扯到Dropout和随机种子等多处随机项,因此如果无法固化模型,当缓存丢失后会模拟交易/回测会触发重新训练,导致模型变化,本帖介绍固化已有的模型的步骤。
调试策略
好的策略应该经过多次训练查看模型的回测效果稳定性,如果发现同样参数下多次训练模型得到的回测结果变动范围较大,多半是模型不稳定。模型稳定后可以考虑固化模型并开启模拟交易。
记录模型文件到userlib文件夹
以上图DNN模型为例,首先查看最后一次满意的模型结果缓存id,如上图m5模块是训练出来的模型结果。 ds = m5.data
运行查看记录DataSourceid到变量ds_id中。 执行下面的代码,将模型文件保存在userlib文件夹下model.csv文件中。
pd.DataFrame([DataSource(ds.id).read()]).to_pickle('/home/bigquant/work/userlib/model.csv')
可以到编写策略界面下的userlib文件夹查看是否增加了model.csv文件。
修改原始模版
修改前请备份。
参考上图,将原模型的深度学习训练模块相关模块删除,并新建一个自定义模块连接m11预测模块
自定义模块中添加如下代码:
# Python 代码入口函数,input_1/2/3 对应三个输入端,data_1/2/3 对应三个输出端
def bigquant_run(input_1, input_2, input_3):
# 示例代码如下。在这里编写您的代码
data = pd.read_pickle('/home/bigquant/work/userlib/model.csv')
model_ds = DataSource.write_pickle(data.iloc[0].to_dict())
return Outputs(data_1=model_ds)
即从文件中读取保存的model.csv文件到缓存中,并将模型传给预测模块
回测验证并模拟交易
运行修改后的模版,如果能跑出结果说明模型固化完成,固化后点击模拟交易即可。
https://bigquant.com/experimentshare/645fb3fd24ef49e2835927ebe4171586
随机森林模型的固化
随机森林模型的固化跟深度学习比较类似,保存模型训练结果,然后用自定义模块读取后传入预测模块即可。
模型保存
参照如下代码,从随机森林-回归模块中读取模型训练结果并保存到uselib目录:
model_data = m12.output_model.read()
pd.DataFrame([model_data]).to_pickle('/home/bigquant/work/userlib/RF_model.csv')
模型读取
添加自定义python模块,参照如下代码读取模型文件,然后接入随机森林-回归模块进行预测。
def bigquant_run(input_1, input_2, input_3):
data = pd.read_pickle('/home/bigquant/work/userlib/RF_model.csv')
model_ds = DataSource.write_pickle(data.iloc[0].to_dict())
return Outputs(data_1=model_ds)
参照样例
如下样例中,模型的保存和读取放在了一个notebook方便参照,但在使用时需要分别用两个notebook,一个用于模型的训练和保存,另外一个是模型的预测和回测。
https://bigquant.com/experimentshare/ac4d7be0c0b7485c81c57e4d26c52845
\
StockRanker模型的固化
针对StockRanker模型,我们只需要保存训练模型的model_id到用户目录即可,model_id对应的模型参数会长期保留在平台。
-
训练结束后保存训练模块的model_id到用户目录,如下样例代码中的m6需要修改成实际的训练模块编号
import pandas as pd pd.DataFrame([m6.model_id]).to_pickle('/home/bigquant/work/userlib/model_stockranker.csv')
-
添加自定义python模块,读取model_id
def bigquant_run(input_1, input_2, input_3): # 示例代码如下。在这里编写您的代码 data = pd.read_pickle('/home/bigquant/work/userlib/model_stockranker.csv') model_ds = DataSource.write_pickle(data.iloc[0].values[0]) return Outputs(data_1=model_ds)
-
把自定义python模块的输出连接到预测模块即可
可以参见如下样例:
https://bigquant.com/experimentshare/eadcbbf907ce456f94ffb54f40385266
\