Я пытался использовать библиотеку python ARIMA (statsmodels.tsa.arima.model.ARIMA) для прогнозирования временных рядов. У меня есть 44 месяца на тренировочные баллы и на 16 месяцев вперед для прогнозов. Временной ряд выглядит так:
I used stationary test to find d, and acf+pacf to find best p&q.
(p,d,q) = ([1,2,9],1,[1])
The predictions I get are oscillations that grow rapidly and explode:
This is very odd and doesn't seem to fit the pattern at all. The details of the fitted model are those:
введите описание изображения здесь
Вы можете видеть, что sigma2 (вариация терминов ошибки - эпсилон, насколько я понимаю) очень высока, поэтому я предполагал, что члены ошибки стали очень высокими, а остальная часть уравнения арима сроки были незначительны по сравнению. уравнение:
Y (t) = -Y (t-1) + Y (t-2) + Y (t-9) + E (t) + E (t-1)
(Я не включил Mu, потому что он не слишком сильно меняется, когда я это делаю)
Итак, я считаю, что это становится: Y (t) = E (t) + E (t-1 )
Прогнозируемое значение Y становится большим и также способствует взрыву. Я попытался найти и распечатать условия ошибки, но смог найти только условия ошибки для поезда с 44 точками. Когда я вошел в сам код, мне показалось, что уравнение включает только условия ошибок из набора поездов, и я не мог понять, как E (t) и E (t-1) задействованы / созданы.
Считаете ли вы, что ошибочные термины вызывают взрыв? Если да, то как этого избежать? Спасибо!
Код, который я использовал:
import pandas as pd
import numpy as np
%matplotlib inline
from statsmodels.tsa.arima.model import ARIMA, ARIMAResults
import matplotlib.pyplot as plt
date_range = pd.date_range('2015-01-01','2019-12-01', freq='MS')
quantity = [ 9, 11, 32, 0, 0, 1, 1, 11, 0, 0, 3, 4, 18, 18, 5, 24, 9,
19, 7, 19, 23, 19, 12, 23, 8, 27, 20, 7, 25, 4, 27, 36, 3, 53,
38, 27, 64, 39, 37, 30, 56, 2, 17, 12, 11, 33, 10, 18, 22, 14, 26,
8, 22, 46, 10, 10, 56, 33, 36, 10]
df = pd.DataFrame({'Quantity':quantity},index=date_range)
df_test = df['2018-09':].copy()
df_train = df[:'2018-08'].copy()
prediction_period = 16
order = ([1,2,9],1,[1])
model_arima = ARIMA(df_train,order=order)
model_arima_fit = model_arima.fit(method = 'statespace')
results = model_arima_fit.get_forecast(steps=prediction_period)
pred = results.predicted_mean