处理过多的零

时间:2018-11-14 15:02:30

标签: python machine-learning time-series zero

ipdb> np.count_nonzero(test==0) / len(ytrue) * 100                                                                                          
76.44815766923736

我有一个数据文件,用于计算24000的价格,将它们用于时间序列预测问题。我没有尝试预测价格,而是尝试预测对数回报,即log(P_t/P_P{t-1})。我已将对数收益应用于价格以及所有功能。预测还不错,但是趋势倾向于预测为零。如上所示,数据~76%为零。

现在,这个想法可能是“寻找一个零膨胀的估计量:首先预测它是否将为零;否则,预测该值”。

详细来说,处理过多零的最佳方法是什么?零膨胀估算器如何帮助我呢?首先要知道我不是概率论者。

P.S。。我正在尝试预测高频交易研究中单位为“秒”的对数回报。请注意,这是一个回归问题(不是分类问题)。

更新

enter image description here

该图片可能是我对数返回的最佳预测,即log(P_t/P_{t-1})。尽管还不错,但其余的预测往往会预测为零。正如您在上面的问题中看到的那样,零太多了。在功能内部我可能也遇到了同样的问题,因为我也对功能进行了日志返回,即,如果F是特定功能,那么我将应用log(F_t/F_{t-1})

这是一日数据log_return_with_features.pkl,其形状为(23369, 30, 161)。抱歉,但是我不能告诉你这些功能是什么。当我在所有功能和目标(即价格)上应用对数(F_t / F_ {t-1})时,请注意,在应用对数返回操作以避免划分之前,我对所有功能都添加了1e-8乘以0。

1 个答案:

答案 0 :(得分:1)

好吧,所以从您的情节来看:这是数据的本质,价格并不经常改变。

尝试对原始数据进行一些子采样(也许是5倍,只看数据),这样通常您会发现每笔价格变动都伴随着价格变动。这样可以简化任何建模过程。非常

对于二次采样:我建议您在时域中进行简单的常规下采样。因此,如果您具有第二种分辨率的价格数据(即每秒一个价格标签),则只需获取第五个数据点。然后像平常一样继续进行操作,具体来说,就是从该次抽样数据中计算价格的对数增长。请记住,无论您做什么,它都必须在测试期间是可复制的。

如果出于某种原因您都不愿意这样做,请看一下可以处理多个时间范围的内容,例如WaveNetClockwork RNN