M.filter.v2 参数和版本问题

用户成长系列
标签: #<Tag:0x00007fcf66de7e88>

(PAYNE) #1

1,M.filter V2,和V3 版本表达式有什么变化么?

评估数据集

m5_evaluation = M.filter.v2(data=m4.data, expr=’"%s" <= date’ % conf.split_date)
这个表达式 在V2正常运行,V3报错,V3应该怎么修改的,V3有什么改进?

2,M.filter.v2 问题描述:是想通2010-01-01至2017-01作为训练数据集,之后到2017-10-23为评估数据集,然后预测最新的 高分值股票,现在做predicton只能到2017-10-13日的;之后回溯发现在 训练步骤 m5_evaluation = M.filter.v2(data=m4.data, expr=’"%s" <= date’ % conf.split_date). 这一步的数据只能取到2017-10-13的,之后的预测值也只能到2017-10-13日,而不是最后一天。这是什么问题,如何解决呢?

关键代码部分:

start_date = ‘2010-01-01’
end_date=‘2017-10-23’
# split_date 之前的数据用于训练,之后的数据用作效果评估
split_date = ‘2017-07-01’

计算特征数据

m2 = M.general_feature_extractor.v5(
instruments=conf.instruments, start_date=conf.start_date, end_date=conf.end_date,
features=conf.features)

数据预处理:缺失数据处理,数据规范化,T.get_stock_ranker_default_transforms为StockRanker模型做数据预处理

m3 = M.transform.v2(
data=m2.data, transforms=T.get_stock_ranker_default_transforms(),
drop_null=True, astype=‘int32’, except_columns=[‘date’, ‘instrument’],
clip_lower=0, clip_upper=200000000)

合并标注和特征数据

m4 = M.join.v2(data1=m1.data, data2=m3.data, on=[‘date’, ‘instrument’], sort=True)

训练数据集

m5_training = M.filter.v2(data=m4.data, expr=‘date < “%s”’ % conf.split_date)
m5_evaluation = M.filter.v2(data=m4.data, expr=’"%s" <= date’ % conf.split_date)
策略连接
https://i.bigquant.com/user/payne/lab/share/mfilter%E9%97%AE%E9%A2%98.ipynb


(iQuant) #2

对了,你使用M.filter.v3报的是什么错呢?

查看了一下filter最新版本为:V2。
image

因为你采取的是先把所有数据2010-01-01到2017-10-23,先进行数据标注(m1),再计算特征数据(m2),再合并数据(m4),最后再进行过滤获取训练集和测试集。

你可以看到,合并数据以后,该数据只能到2017-10-13,这是因为你的hold_days 为5天。在标注数据的时候,只能标注到2017-10-23这个日期前5个交易日(包含了两个周末)。

你的代码这种方式没有问题,我们的教程之前也是这样写的代码,后来我们进行了更新,更新以后,测试集是单独拎出来进行特征抽取,因此包含2017-10-23的数据。

建议采取可视化策略开发,这样的话,一方面你能直接使用最新代码,一方面也能改动代码。


(PAYNE) #3

那就是M.join 函数处理的机制问题了,是要保留hold_days的天数来做预测么?那么所说的后来更新的单独拎出来进行特征抽取是怎么处理的呢?

V3报错的代码和你截图显示的一样


(iQuant) #4

可以参考这篇文章:AI策略详解