如何正确设置 statsmodels.predict 函数的 start/end 参数
How to properly set start/end params of statsmodels.predict function
我正在做预测:
# 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 的评论,这里的 material 问题是指数,该模型没有完整日期作为关键,因为它是澳大利亚股票指数:
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
因此,有些日期相差一天,有些日期相差三天。但是,我还是不明白为什么不能直接使用res.plot_predict。其他一些人可能有同样的问题,因为如果我使用连续的时间序列,那么它就可以工作。
Kriss在评论下提供了一个link,然后我通读了一遍,但是没能用它来解决我的问题:
在我的数据中,每个日期都是唯一的,但为了确保这一点,我遵循了答案:
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')
您正在尝试将连字符 (-) 转换为整数,这对于 int()
是一项不可能完成的任务
问题可以通过以下方式解决:
# Plot the original series and the forecasted series
res.plot_predict(start=datetime(2014,7,1), end=datetime(2018,9,28))
plt.show()
我不能使用第一个日期,因为我使用的是一阶差分
我正在做预测:
# 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 的评论,这里的 material 问题是指数,该模型没有完整日期作为关键,因为它是澳大利亚股票指数:
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
因此,有些日期相差一天,有些日期相差三天。但是,我还是不明白为什么不能直接使用res.plot_predict。其他一些人可能有同样的问题,因为如果我使用连续的时间序列,那么它就可以工作。
Kriss在评论下提供了一个link,然后我通读了一遍,但是没能用它来解决我的问题: 在我的数据中,每个日期都是唯一的,但为了确保这一点,我遵循了答案:
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')
您正在尝试将连字符 (-) 转换为整数,这对于 int()
是一项不可能完成的任务问题可以通过以下方式解决:
# Plot the original series and the forecasted series
res.plot_predict(start=datetime(2014,7,1), end=datetime(2018,9,28))
plt.show()
我不能使用第一个日期,因为我使用的是一阶差分