使用Statsmodels VAR预测时间序列并遇到ValueError

4
我正在尝试从我的月度数据集中预测未来值(数据每年12次以每月第一天的方式总结),但遇到以下问题: ValueWarning:提供了日期索引,但它没有与频率信息相关联,因此在进行预测时将被忽略。 我试图在Google和StackO上寻找相关主题和足够好的解决方案,但没有成功。
这是我的数据框的head(13)内容:
            Occupancy rate  Average Price     RevPAR
Date                                                
2013-01-01        0.579026     105.289497  60.965332
2013-02-01        0.637415     109.396682  69.731070
2013-03-01        0.714847     117.840534  84.237901
2013-04-01        0.716446     122.765139  87.954593
2013-05-01        0.771097     105.461387  81.320985
2013-06-01        0.768777     115.252163  88.603262
2013-07-01        0.677020      81.824781  55.396987
2013-08-01        0.673639      72.489988  48.832110
2013-09-01        0.783291     125.034417  97.938296
2013-10-01        0.779694     118.724648  92.568902
2013-11-01        0.771430     113.322446  87.420366
2013-12-01        0.680166     100.950857  68.663388
2014-01-01        0.573320     102.881633  58.984090

这是我试图运行的非常基础的拟合。

model = VAR(df)
results = model.fit(2)
results.forecast(df.values[-2:], 5)
results.summary()

我认为我需要为数据框设置某种频率属性。我尝试了使用df.asfreq('M')的暴力方法,但它只是搞乱了我的数据。


你可以尝试使用 df.index.freq='M' 吗?但是这仅适用于连续时间序列中没有缺失值的情况。这是有关 Pandas 时间序列的详细信息。 https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html - Woods Chen
我认为这是一个好的方向,但我很确定我错过了一些微不足道的东西。但是这个东西不起作用,我尝试从日期时间中剥离出“%d”,以便可能使错误消失,但没有。我想到了沿着线放置“freq”属性,并使代码继续出现另一个错误。model = VAR(df, freq='M')会给出:ValueError:无法将给定的频率参数与给定的索引匹配。 - Dr Dro
1个回答

4
我不知道您使用的模型,但很可能是由于时间序列中缺失的值或不匹配的freq(月初的freq为MS)导致的。
因此,我认为您可以使用pd.date_range创建一个新的时间序列,然后使用创建的时间序列reindex数据帧。
如果输入的数据框如下:
In [10]: df
Out[10]:
            0  1
2018-01-01  2  1
2018-03-01  0  0

我们可以创建一个新的时间序列:
In [12]: index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='MS')

In [13]: index
Out[13]: DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01'], dtype='datetime64[ns]', freq='MS')

然后重新索引数据帧。
In [14]: df.reindex(index)
Out[14]:
            0    1
2018-01-01  2.0  1.0
2018-02-01  NaN  NaN
2018-03-01  0.0  0.0

此外,我们可以使用一些合适的值来填充数据框中的Nan值以满足模型训练。

对于遇到相同错误的所有人:日期时间很可能出了问题。有些东西丢失或不连续。没有NaN,但日期时间索引在中间混杂着几个日期,因此不连续。我决定自己重新填充日期,以确保天数和月份在各自的位置上(原始.csv文件已经混乱了),但是你的解决方案更加优雅,尽管需要排序才能工作(否则不会得到最终日期)。所以,谢谢你,那种.min/.max的方式是我正在使用的。 - Dr Dro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接