问答交流

为什么left连接之后衍生特征抽取的结果是错的?

由berg223创建,最终由berg223 被浏览 10 用户

问题复现步骤:

  1. 克隆 https://bigquant.com/wiki/doc/shouyi-celve-yuanma-kOZk8qYZYj 中的策略
  2. 在m2模块添加open_0和 test=shift(open_0, -2) 这两个特征
  3. 更改m1开始时间为 2020-01-01,结束时间为 2022-02-23,代码列表填 000762.SZA
  4. 运行m3
  5. 使用以下代码查看m7模块运行结果,可以看到test字段的值在2021-08-31和2021-09-03号很明显都是错误的
df = m7.data.read_df()
print(df[(df['date']>='2021-08-31')&(df['date']<='2021-09-05')][['date', 'instrument','open_0','test']])

m5直接去连m7,数据就是正确的,所以怀疑问题可能和m14这个模块的left连接有关系。

标签

shift函数
评论
  • 这个数据连接的模块是用户polll开发的,代码可以这样查看: \ ![{w:100}](/wiki/api/attachments.redirect?id=f77c9a24-d274-41b4-9b21-d77105936e99 "left-50") 点击 生成自定义模块,此时会在画布上生成一个自定义python模块,就可以查看具体代码逻辑了: ![{w:100}](/wiki/api/attachments.redirect?id=fae6fc4f-088e-43c5-8438-1d34068428b9)
  • 大胆猜一下根本原因:m5基础模块抽取的特征是按照日期排序的,因为shift函数的结果依赖顺序,所以m5直接连衍生特征模块就没有问题,但是如果进行join的话,顺序会发生变化,这样就对最终结果产生影响。这样猜测的依据是勾选m14模块的排序,结果就没有问题。能看一下根本原因是这个吗?
  • 是的,通过merge后的数据是没有排序的,所以计算出来的test因子数据就有错误,需要勾选排序选项。 ![{w:100}](/wiki/api/attachments.redirect?id=74903f2a-e9bb-4954-bf06-8d34ae69e0f4 "left-50") 排序后因子计算结果就是正确的。 ![{w:100}](/wiki/api/attachments.redirect?id=eb615bc5-2913-4df1-a4d9-006207f3eb50) [https://bigquant.com/experimentshare/90f4f9b087bf404183b33deae3bfcaf9](https://bigquant.com/experimentshare/90f4f9b087bf404183b33deae3bfcaf9) \
{link}