我在尝试使用我的月度数据集预测未来的数值(数据按每年的12个月的第一天汇总),但遇到了以下问题:
ValueWarning: 已提供日期索引,但它没有关联的频率信息,因此在预测等操作时将被忽略。
我在Google和StackOverflow上搜索了很久,但没有找到相关的讨论和足够好的解决方案。
这是我数据框的前13行:
Occupancy rate Average Price RevPARDate 2013-01-01 0.579026 105.289497 60.9653322013-02-01 0.637415 109.396682 69.7310702013-03-01 0.714847 117.840534 84.2379012013-04-01 0.716446 122.765139 87.9545932013-05-01 0.771097 105.461387 81.3209852013-06-01 0.768777 115.252163 88.6032622013-07-01 0.677020 81.824781 55.3969872013-08-01 0.673639 72.489988 48.8321102013-09-01 0.783291 125.034417 97.9382962013-10-01 0.779694 118.724648 92.5689022013-11-01 0.771430 113.322446 87.4203662013-12-01 0.680166 100.950857 68.6633882014-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’),但这只是打乱了我的数据。
回答:
我不清楚您使用的模型是什么,但很可能是由于时间序列中的缺失值或freq
不匹配导致的(月初的freq
是MS
)。
所以我认为,您可以使用pd.date_range创建一个新的时间序列,然后用创建的时间序列重新索引数据框。
如果输入的数据框是:
In [10]: dfOut[10]: 0 12018-01-01 2 12018-03-01 0 0
那么我们可以创建一个新的时间序列:
In [12]: index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='MS')In [13]: indexOut[13]: DatetimeIndex(['2018-01-01', '2018-02-01', '2018-03-01'], dtype='datetime64[ns]', freq='MS')
然后重新索引数据框
In [14]: df.reindex(index)Out[14]: 0 12018-01-01 2.0 1.02018-02-01 NaN NaN2018-03-01 0.0 0.0
此外,我们还可以用一些合适的值填充数据框中的Nan
值,以满足模型训练的需求。