我正在尝试从我的每月数据集中预测未来值(数据汇总为每月的第一天,每年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')暴力破解,但这只会弄乱我的数据。
答案 0 :(得分:1)
我不知道您使用的模型是什么,但是最有可能是由于时间序列中缺少值或由不匹配的freq
(freq
开始的月份为{ {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
值,以满足模型训练的需要。