首页 > 解决方案 > pandas时间序列索引和statsmodel中的频率

问题描述

y我有一个不能很好地与statsmodel函数配合使用的熊猫时间序列。

import statsmodels.api as sm

y.tail(10)

2019-09-20     7.854
2019-10-01    44.559
2019-10-10    46.910
2019-10-20    49.053
2019-11-01    24.881
2019-11-10    52.882
2019-11-20    84.779
2019-12-01    56.215
2019-12-10    23.347
2019-12-20    31.051
Name: mean_rainfall, dtype: float64

我验证它确实是一个时间序列

type(y)
pandas.core.series.Series

type(y.index)
pandas.core.indexes.datetimes.DatetimeIndex

从这里,我可以毫无问题地通过自相关函数传递时间序列,从而产生预期的输出

plot_acf(y, lags=72, alpha=0.05)

但是,当我尝试将这个完全相同的对象传递y给 SARIMA

mod = sm.tsa.statespace.SARIMAX(y.mean_rainfall, order=pdq, seasonal_order=seasonal_pdq)
results = mod.fit()

我收到以下错误:

已提供日期索引,但它没有相关的频率信息,因此在预测时将被忽略。

问题是我的时间序列的频率不规则(它是每个月的 1 号、10 号和 20 号),所以我无法设置freq='m'freq='D'例如。在这种情况下,解决方法是什么?

我是使用时间序列的新手,任何关于如何在预测期间不忽略我的索引的建议都会有所帮助。这可以防止任何预测成为可能

标签: pythonpandasindexingtime-seriesstatsmodels

解决方案


正如我所看到的,包使用频率作为一切的前提,因为它是一个时间序列问题。因此,您将无法将其与不同频率的数据一起使用。事实上,您必须为您的分析做出一个假设,以使您的数据充足以供使用。一些选项是:

1) 考虑 3 种不同的分析(分别为第 1 天、第 10 天、第 20 天)并使用 30 天的频率。

2)由于您有约 10d 等分数据,您可以考虑使用某种插值,然后下采样到 1d 的频率。当然,此选项仅根据问题的性质和数据更改的速度才有意义。

无论哪种方式,我只想指出,在处理时间序列和一般数据科学时,如何建模问题和数据是关键。以我作为数据科学家的经验,我可以说是在域(数据来自哪里)进行分析,您可以感觉到哪种方法会更好。


推荐阅读