Почему ARIMA не работает с моими данными временных рядов? - PullRequest
0 голосов
/ 05 июня 2019

Я использую auto_arima из библиотеки python pmdarima.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()

И вот результат. Данные и прогнозы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...