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

时间:2019-05-06 15:14:35

标签: python pandas matplotlib machine-learning

我正在尝试从我的每月数据集中预测未来值(数据汇总为每月的第一天,每年12次),并且遇到:

ValueWarning:已提供日期索引,但没有相关的频率信息,因此在例如预测。

我曾尝试在Google和StackO上运行,但未能获得相关的线索和足够好的解决方案。

这是我数据框的头部(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')暴力破解,但这只会弄乱我的数据。

1 个答案:

答案 0 :(得分:1)

我不知道您使用的模型是什么,但是最有可能是由于时间序列中缺少值或由不匹配的freqfreq开始的月份为{ {1}}。

我认为,您可以使用pd.date_range创建一个新的时间序列,然后使用创建的时间序列来创建reindex该数据帧。

如果输入数据框为:

MS

然后我们可以创建一个新的时间序列:

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 值,以满足模型训练的需要。