自动标注模块有错误

策略分享
新手专区
标签: #<Tag:0x00007fcf6e05dbc0> #<Tag:0x00007fcf6e05da80>

(wfzcy1) #1

近期有一个地方用到多次取不同时期的标注历史数据,于是做了一个大范围标注历史数据, 具体使用时过滤出来。但是回测时用过滤后的标注数据和使用日期自动标注的结果就是不同,于是逐步排查数据,发现:

  1. 可视化自动标注使用的截止日期是上级“证券代码列表”的截止日期-2天

原来担心这个“证券代码列表”的截止日期与预测方的“证券代码列表”的开始日期重复时会造成已标注这一天的预测值,影响回测结果。这样看来不用担心了,但是这个方式应告知用户,本来人工智能就有黑箱之嫌,如果是策略中正好差的这2天比较关键,和自己的结论有较大差异,就让人缺乏信任感。

  1. 自动标注后丢失了某些数据。

比如:2018-03-01 的 0002765.SZA,使用自动标注后丢失了,见下策略, 而读取历史数据明明是有的。
https://i.bigquant.com/user/wfzcy1/lab/share/notebook.ipynb?_t=1528899323911


(达达) #2

002765.SZA 在2018-03-02 之后停牌了,‘shift(close, - 5) / shift(open, -1)’, 取的是五日收盘价,数据不足五天为Nan,就被过滤掉了,另外日期对不上可能是五一假期取不到数据,您可以再仔细检查一下~


(wfzcy1) #3

问题2:你是对的。但我发现问题,我之前说过我是大范围取历史数据,‘2015-01-01’ 至 '2018-06-10 ',此时标注中002765 的‘shift(close, - 5) / shift(open, -1)’就不是Nan,因此我过滤得到的数据和我直接设置开始、结束日期得到的数据就不一致,这么说吧,全股市场截止到‘2018-05-01’ 与结束日期在6月筛选出来的有好几十条,大概都是这种情况。筛选出的能否有办法和直接设置的一致?否则筛选出的有未来函数的意思。
问题1:当你设置结束日期为‘2018-05-01’ 时,标注得到的最后交易数据日期为‘2018-04-22’ 而不是‘2018-04-27’,想来也是因为‘shift(close, - 5) / shift(open, -1),但训练数据实际已超出‘2018-05-01’,最好有个设定,能按实际的训练数据,像“基础特征抽取”的向前延续天数那样,有个向后延续天数。万一策略标注1个月以上的收益表现,而训练集又不足够大,就影响了训练效果。当然如果回测开始日期与向后延续天数重叠也可能造成相当于前期的未来函数。


(达达) #4

如果按照训练集最后一天设置enddate是会存在最后的某些日期取不到数据的,这个时候是可以通过像您说的延长训练集的结束日期处理的,虽然会多出几天的label数据标签,但您可以考虑在合并特征数据后通过date做一个过滤处理。如下图所示的流程:
image
我们在连接数据后加一个数据过滤模块,再用您需要的真实enddate进行过滤一下,就能保证训练集不会超出您需要的日期了
image