Python 处理过多的零

Python 处理过多的零,python,machine-learning,time-series,zero,Python,Machine Learning,Time Series,Zero,我有一个数据文件,用于计算24000个价格,用于时间序列预测问题。我没有尝试预测价格,而是尝试预测对数回报,即log(P_t/P_P{t-1})。我已经在价格和所有功能上应用了日志返回。预测结果不错,但趋势倾向于预测为零。如上所示,~76%的数据是零 现在的想法可能是“寻找一个膨胀为零的估计器:首先预测它是否为零;如果不是,预测值” 具体来说,处理过多的零的最佳方法是什么?零膨胀估计器能帮我什么忙?要知道我本来不是概率论者 p.S.我正在努力预测对数回报率,其中单位为“秒”,用于高频交易研究。请

我有一个数据文件,用于计算24000个价格,用于时间序列预测问题。我没有尝试预测价格,而是尝试预测对数回报,即
log(P_t/P_P{t-1})
。我已经在价格和所有功能上应用了日志返回。预测结果不错,但趋势倾向于预测为零。如上所示,
~76%
的数据是零

现在的想法可能是“寻找一个膨胀为零的估计器:首先预测它是否为零;如果不是,预测值”

具体来说,处理过多的零的最佳方法是什么?零膨胀估计器能帮我什么忙?要知道我本来不是概率论者

p.S.我正在努力预测对数回报率,其中单位为“秒”,用于高频交易研究。请注意,这是一个回归问题(不是分类问题)

更新

这张图片可能是我对日志返回的最佳预测,即
log(p_t/p_{t-1})
。虽然这并不坏,但其余的预测倾向于预测为零。正如您在上面的问题中所看到的,零太多了。我在特性内部可能也有同样的问题,因为我也会在特性上获取日志返回,即如果
F
是一个特定的特性,那么我应用
log(F_t/F_{t-1})


这是一个一天的数据,形状
(23369,30161)
。对不起,我不知道有什么功能。当我在所有特性和目标(即价格)上应用log(F_t/F_{t-1})时,请注意,在应用log return操作之前,我在所有特性上添加了1e-8,以避免除以0。

好的,因此从您的图中判断:这是数据的性质,价格实际上不会经常变化

试着对原始数据进行一点二次抽样(可能是5倍,只要看看数据就可以了),这样你就可以在每次滴答声中看到价格的变化。这将使任何建模变得更加容易

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


如果出于任何原因,这不是您的选择,请看一看可以处理多个时间尺度的东西,例如,或。

您熟悉术语稀疏矩阵吗?你可能想看看与此相关的一些事情。比如COO或CSRformat@MattR我看不出稀疏矩阵的概念在这里有什么用处。我一直认为这是一个实现问题(为了节省空间和可能的计算;从未见过75%的零稀疏到足以麻烦,但我的经验是有限的),而OP似乎正在处理一个数据建模问题。你到底在想什么?@dedObed,要点很好。TBH-我不知道OP到底需要什么。这就是为什么我的评论模糊不清,“也许我的评论会帮助他/她的谷歌搜索”是我评论背后的理由。@MattR我认为没有模糊不清的地方。你能告诉我更多关于你的困惑吗?我正在寻找一种处理多余零的方法。假设在一个时间T fixe,我有一个零。我正在寻找一种方法,根据某种标准来处理这个特定的零。我可能希望在不影响数据结构的情况下删除零和相关功能。好的,让我花几分钟时间更新问题。我已经更新了答案。简言之:尽可能简单地开始。你链接的论文在这里并不适用,它是关于删除整个培训示例的——在你的例子中,就是整个时间序列。我会等一等其他答案,但你的答案很有趣!
ipdb> np.count_nonzero(test==0) / len(ytrue) * 100                                                                                          
76.44815766923736