我使用python库pmdarima.arima中的auto_arima来预测时间序列。但是,该模型似乎不适用于我的数据,因为训练和测试数据的预测结果都非常糟糕。我想知道这是因为我做错了某处,或者ARIMA无法预测数据。这就是我所做的。
b是我的5个月时间序列,其中700个观测值均匀分布。我首先通过ADCF检查数据是否稳定。
from statsmodels.tsa.stattools import adfuller
print("Results of Dicky-Fuller Test:")
dftest = adfuller(b, autolag='AIC')
dfoutput = pd.Series(dftest[0:4], index=['ADF Statistic','p-value','#Lags Used','Number of Observations Used'])
for key,value in dftest[4].items():
dfoutput['Critical Value (%s)'%key] = value
print(dfoutput)
结果在这里
-----------------------------------------
Results of Dicky-Fuller Test:
ADF Statistic -2.045778
p-value 0.266868
#Lags Used 9.000000
Number of Observations Used 690.000000
Critical Value (1%) -3.439863
Critical Value (5%) -2.865738
Critical Value (10%) -2.569005
dtype: float64
-----------------------------------------
在我看来,这是一个固定的数据。然后我使用auto_arima找到最佳的参数组合,并进行拟合和预测
from pmdarima.arima import auto_arima
model = auto_arima(b, start_p=1, start_q=1,
max_p=6, max_q=6, m=1,
seasonal=False,
d=0, trace=True,
error_action='warn',
suppress_warnings=True,
stepwise=True)
print(model.aic())
model.fit(train)
prediction1 = model.predict(n_periods=len(train))
prediction2 = model.predict(n_periods=len(test))
#plot the predictions for validation set
plt.plot(time_train,train, label='train')
plt.plot(time_test,test, label='test')
plt.plot(time_train, prediction1, label='prediction1')
plt.plot(time_test, prediction2, label='prediction2')
plt.legend()
plt.show()
这是结果。 Data and Predictions