处理过多的零值

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

我有一个数据文件,包含了24000个价格数据,用于时间序列预测问题。我没有尝试预测价格本身,而是尝试预测对数回报,即log(P_t/P_{t-1})。我对价格以及所有特征都应用了对数回报。预测结果还不错,但趋势往往预测为零。如上所示,数据中约有76%是零值。

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

具体来说,如何完美地处理过多的零值?零膨胀估计器如何帮助我解决这个问题?请注意,我原本不是概率学家。

附注 我在尝试预测对数回报,其单位是“秒”,用于高频交易研究。请注意,这是一个回归问题(不是分类问题)。

更新

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)。很抱歉,我无法透露特征是什么。由于我在所有特征和目标(即价格)上应用了log(F_t/F_{t-1}),因此在应用对数回报操作之前,我在所有特征上加了1e-8以避免除以零的情况。


回答:

好的,从你的图表来看:这是数据的自然特性,价格并不经常变化。

尝试对原始数据进行一些子采样(或许是5倍的子采样,只需查看数据),这样你通常能在每个时间刻度上看到价格变动。这应该会使任何建模变得更加容易,非常容易。

对于子采样:我建议你进行简单的定期时间域下采样。所以如果你有以秒为分辨率的价格数据(即每秒一个价格标签),那么只需每隔五个数据点取一个。然后按你通常的做法继续操作,特别是计算从这个子采样数据中价格的对数增长。记住,无论你做什么,必须在测试时可重现。

如果出于某些原因这对你来说不可行,请考虑一些能处理多时间尺度的方法,例如WaveNetClockwork RNN

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注