【发布时间】:2018-11-29 16:13:25
【问题描述】:
我正在尝试按照这里的时间序列教程(使用我自己的数据集):
https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/
令人惊讶的是,我能够圆满完成第 7 部分:ARIMA。在本节中,我有点磕磕绊绊。它的“预测”列中的所有值都是 NaN。
在终端中,我看到了
a date index has been provided but it has no associated frequency information and so will be ignored when forecasting
我的测试数据集在没有交易发生时有一些日期差距,所以我用
test=test.set_index('DATE').asfreq('D', fill_value=0)
.我也对我的 ARIMA 数据集做同样的事情,所以索引与测试集匹配。
其余相关代码如下:
train=df[0:180]
test=df[180:]
SARIMA=test.copy()
fit=sm.tsa.statespace.SARIMAX(train['COUNT'], order=(1,1,1), seasonal_order=(0,0,0,5)).fit()
SARIMA['SARIMA']=fit3.predict(start=0,
end=93,dynamic=True)
print(SARIMA)
print(test)
在打印输出中,测试集和 ARIMA 集的索引相同。 ARIMA 包含一列SARIMA,其中包含预测,但它们都是NaN。我错过了什么?
test
DATE COUNT
2018-06-21 1
2018-06-22 3
..
2018-11-21 3
2018-11-22 4
SARIMA
DATE COUNT SARIMA
2018-06-21 1 NaN
2018-06-22 3 NaN
..
2018-11-21 3 NaN
2018-11-22 4 NaN
编辑:
由于某种原因statsmodels 根本无法检测到索引频率。我试过了
SARIMA=SARIMA.set_index('DATE').asfreq('D',fill_value=0)
SARIMA.index=pd.to_datetime(SARIMA.index)
SARIM.index=pd.DatetimeIndex(SARIMA.index.values, freq='D')
但警告总是出现
编辑:我直接尝试在 Excel 中创建一个新数据集:
DATE COUNT
2018/01/01 1
2018/01/02 2
..
2018/01/10 3
2018/01/11 4
使用上述相同的行创建模型,除了将enforce_stationarity 和enforce invertibility 设置为False。所有预测还是NaN
edit3:使用伪造的 excel 数据集,我已经接近了 1 步。通过start='2018-01-01' 和end='2018-01-21' 得到全0 的预测,这比NaN 好。谁能理解这些结果?
edit4:设置 dynamic=False 返回合理的预测。显然我不是统计学家
【问题讨论】:
-
训练或测试数据集是否有
Nan值 -
运行
df.isnull().values.any()产生False所以我认为没有NaNs
标签: python-3.x pandas indexing statsmodels arima