BigQuant使用文档

如何固化深度学习、随机森林和StockRanker模型|模型固化

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

深度学习模型的固化

由于深度学习中牵扯到Dropout和随机种子等多处随机项,因此如果无法固化模型,当缓存丢失后会模拟交易/回测会触发重新训练,导致模型变化,本帖介绍固化已有的模型的步骤。

调试策略

好的策略应该经过多次训练查看模型的回测效果稳定性,如果发现同样参数下多次训练模型得到的回测结果变动范围较大,多半是模型不稳定。模型稳定后可以考虑固化模型并开启模拟交易。

记录模型文件到userlib文件夹

{w:100}{w:100}

以上图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文件。

修改原始模版

修改前请备份。

{w:100}{w:100}

参考上图,将原模型的深度学习训练模块相关模块删除,并新建一个自定义模块连接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对应的模型参数会长期保留在平台。

  1. 训练结束后保存训练模块的model_id到用户目录,如下样例代码中的m6需要修改成实际的训练模块编号

    import pandas as pd
    pd.DataFrame([m6.model_id]).to_pickle('/home/bigquant/work/userlib/model_stockranker.csv')
    
  2. 添加自定义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)
    
  3. 把自定义python模块的输出连接到预测模块即可

可以参见如下样例:

https://bigquant.com/experimentshare/eadcbbf907ce456f94ffb54f40385266

\

标签

深度学习深度学习算法StockRanker算法Stockranker
评论
  • 教程十分不清晰。 import pandas as pd pd.DataFrame(\[m6.model_id\]).to_pickle('/home/bigquant/work/userlib/model_stockranker.csv')到底写哪里?
  • 请教怎样把固化的模型上传到实盘交易中,csv文件怎样连接。
  • 兄弟找到办法了吗 \
  • 加官方客服的企业wx,让客服去同步一下csv就行了,但是好像因为这几天清明放假,我上周五申请的还没弄好
  • 克隆后运行报错: --- NameError Traceback (most recent call last) in 1 import pandas as pd \----> 2 pd.DataFrame(\[m6.model_id\]).to_pickle('/home/bigquant/work/userlib/model_stockranker.csv') NameError: name 'm6' is not defined