Python / Pandas-如何调整auto_arima模型参数以获得未来的预测

时间:2018-11-30 09:09:14

标签: python pandas forecasting arima pyramid-arima

Python 3.6

我的数据集如下:

例如旅行社的旅行预订航空公司/火车/巴士等。

date           bookings
2017-01-01     438
2017-01-02     167
...
2017-12-31     45
2018-01-01     748
...
2018-11-29     223

我需要这样的内容(即超出数据集的预测数据):

date           bookings
2017-01-01     438
2017-01-02     167
...
2017-12-31     45
2018-01-01     748
...
2018-11-29     223
2018-11-30     98
...
2018-12-30     73
2018-12-31     100

代码:

import pyodbc
import pandas as pd
import cufflinks as cf
import plotly.plotly as ply
from pmdarima.arima import auto_arima

sql_conn = pyodbc.connect(# connection details here)
query = #sql query here
df = pd.read_sql(query, sql_conn, index_col='date')
df.index = pd.to_datetime(df.index)

stepwise_model = auto_arima(df, start_p=1, start_q=1,
                           max_p=3, max_q=3, m=7,
                           start_P=0, seasonal=True,
                           d=1, D=1, trace=True,
                           error_action='ignore',  
                           suppress_warnings=True, 
                           stepwise=True)
stepwise_model.aic()

train = df.loc['2017-01-01':'2018-06-30']
test = df.loc['2018-07-01':]

stepwise_model.fit(train)
future_forecast = stepwise_model.predict(n_periods=len(test))
future_forecast = pd.DataFrame(future_forecast,
                               index=test.index,
                               columns=['prediction'])
pd.concat([test, future_forecast], axis=1).iplot()

结果 enter image description here

正如您所看到的那样,预测还很遥远,并且我认为问题不在使用正确的auto_arima参数。获取这些参数的最佳方法是什么?我也许可以反复试验,但最好能理解标准/非标准程序,以获取最佳拟合。

任何帮助将不胜感激。

来源:

1 个答案:

答案 0 :(得分:2)

您在2018年8月前后有结构性断裂,但您的训练只持续到2018年7月。ARIMA(或任何与此相关的单变量时间序列方法)将永远无法预测这种结构性断裂。您将必须扩展训练数据集以包括2018年8月和9月的值。

请参见the first section of this blog post,以更好地了解为什么会这样。