如何正确设置statsmodels.predict函数的开始/结束参数

时间:2018-10-15 20:22:40

标签: python statsmodels

我正在做预测:

# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima_model import ARIMA

# Forecast interest rates using an AR(1) model
mod = ARIMA(data, order=(1,1,1))
res = mod.fit()

# Plot the original series and the forecasted series
res.plot_predict(start='2014-07-02', end='2018-09-28')
plt.show()

我遇到一个错误:

KeyError: "invalid literal for int() with base 10: '2014-07-02'"

在阅读statsmodels文档后:https://www.statsmodels.org/dev/generated/statsmodels.tsa.arima_model.ARIMAResults.plot_predict.html
然后,直观的方法是检查“ 2014-07-02”的类型,即pandas.core.indexes.datetimes.DatetimeIndex。
因此,根据文档,应该允许日期时间。这就是为什么我感到困惑。

我遵循Martijn Pieters的评论,这里的实质性问题是指数,该模型没有完整的日期作为关键,因为它是澳大利亚股票指数:

            All Ordinaries closing price
Date    
2014-06-30  5382.0
2014-07-01  5366.5
2014-07-02  5441.7
2014-07-03  5479.5
2014-07-04  5511.8
2014-07-07  5506.3
2014-07-08  5498.5
2014-07-09  5442.2
2014-07-10  5454.3
2014-07-11  5474.6

因此,某些日期有一天的差异,某些日期有3天的差异。但是,我仍然不明白为什么我不能直接使用res.plot_predict。其他一些可能会遇到相同的问题,因为如果我使用连续的时间序列,那么它会起作用。

Kriss在评论下方提供了一个链接,然后我通读了该链接,但未能使用它来解决我的问题: 在我的数据中,每个日期都是唯一的,但是为了确保这一点,我遵循了答案:

data = data.groupby(pd.TimeGrouper(freq='D')).sum()


# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima_model import ARIMA
from datetime import datetime


# Forecast interest rates using an AR(1) model
mod = ARIMA(data, order=(1,1,1))
res = mod.fit()

# Plot the original series and the forecasted series
res.plot_predict(start=min(data.index), end=datetime(2018,9,28))
plt.show()

然后,我有种想撞墙的感觉,我得到了一个错误:

KeyError: Timestamp('2014-06-30 00:00:00')

2 个答案:

答案 0 :(得分:0)

可以使用以下方法解决问题:

# Plot the original series and the forecasted series
res.plot_predict(start=datetime(2014,7,1), end=datetime(2018,9,28))
plt.show()

我不能使用第一个日期,因为我使用了第一个差异

答案 1 :(得分:-1)

您正在尝试将连字符(-)转换为整数,这对于int()是不可能完成的任务