Вероятностное моделирование ARIMA с использованием PyFlux

PyFlux - это библиотека временных рядов, созданная для Python, которая объединяет вероятностное моделирование с анализом временных рядов.

В этом примере давайте посмотрим, как эту библиотеку можно использовать для прогнозирования температурных режимов в аэропорту Дублина, Ирландия, используя ежемесячные данные с ноября 1941 г. по январь 2018 г.

Вот краткий обзор данных:

означает обозначает среднюю температуру, и именно эту переменную мы хотим прогнозировать с помощью PyFlux.

Конфигурация модели

Чтобы настроить модель ARIMA в PyFlux, мы должны указать:

  • распределение вероятностей
  • член авторегрессии (AR)
  • термин скользящей средней (MA)

Построим гистограмму данных о среднемесячной температуре:

Хотя ни один набор данных никогда не соответствует нормальному распределению, форма гистограммы выше в целом указывает на то, что данные соответствуют этому шаблону. В связи с этим при построении модели в качестве распределения будет указан pf.Normal ().

Спад запаздывания для функции частичной автокорреляции будет использоваться для определения члена AR, в то время как спад запаздывания для функции автокорреляции в разностном ряду будет использоваться для определения члена MA. Более подробную информацию об определении условий AR и MA можно найти здесь.

Изучив функцию частичной автокорреляции, мы можем увидеть, что корреляция снизилась на задержке 2. В этом отношении член AR в модели установлен на 2.

Теперь давайте рассмотрим автокорреляционную функцию для разностного ряда.

Здесь мы видим, что корреляция снизилась на задержке 3. Соответственно, член скользящей средней в модели установлен на 3.

Результаты

Теперь, когда распределение вероятностей, а также термины AR и MA определены, модель может быть определена соответствующим образом.

model = pf.ARIMA(data=train, ar=2, ma=3, target='meant', family=pf.Normal())

Оценка точечной массы максимального правдоподобия используется для оценки скрытых переменных таким же образом, как это используется в документации PyFlux:

>>> x = model.fit("MLE")
>>> x.summary()
Normal ARIMA(2,0,3)                                                                                       
======================================================= ==================================================
Dependent Variable: meant                               Method: MLE                                       
Start Date: 4                            Log Likelihood: -1552.9713                        
End Date: 821                                         AIC: 3119.9426                                    
Number of observations: 818                           BIC: 3152.8907                                    
====================================================================
Latent Variable   Estimate   Std Error  z        P>|z|    95% C.I.                 
======================================== ========== ========== 
Constant  2.1524    0.0809    26.597   0.0     (1.9938 | 2.311)         
AR(1)     1.6733    0.0168    99.6646  0.0     (1.6404 | 1.7063)        
AR(2)    -0.8992    0.0029    -310.825  0.0      (-0.9048 | -0.8935)      
MA(1)    -0.6943    0.0466     -14.8874 0.0      (-0.7857 | -0.6029)      
MA(2)     0.3329     0.048      6.9348   0.0      (0.2388 | 0.427)         
MA(3)     0.0402     0.0547     0.7348   0.4625   (-0.067 | 0.1475)        
Normal Scale 1.9222                                                           
====================================================================

Теперь можно построить график соответствия модели и прогнозов:

model.plot_fit(figsize=(15,10))

Учитывая, что в этой модели не указан сезонный компонент, вероятностный прогноз, похоже, достаточно хорошо улавливает максимумы и минимумы данных. Более того, вероятностные прогнозы могут быть полезны при прогнозировании экстремальных погодных условий.

Например, мы видим, что при более низких температурах зимой график показывает среднюю температуру около 5 ° C. Однако границы вероятности также показывают, что в особенно холодные зимы она может упасть до 0–5 ° C.

И наоборот, в летние месяцы средняя температура составляет 15 ° C, но в более жаркие летние месяцы она потенциально может повыситься до 20–25 ° C.

Вывод

В этом примере вы видели:

  • Как PyFlux можно использовать для вероятностного прогнозирования с использованием модели ARIMA
  • Конфигурация модели ARIMA в PyFlux
  • Интерпретация прогнозов, сделанных с помощью модели

Большое спасибо за ваше время. Соответствующий код и наборы данных можно найти здесь.

Заявление об ограничении ответственности: эта статья написана на условиях «как есть» без каких-либо гарантий. Он был написан с целью предоставить обзор концепций науки о данных и не должен интерпретироваться как профессиональный совет. Выводы и интерпретации в этой статье принадлежат автору и не поддерживаются и не связаны с какими-либо третьими сторонами, упомянутыми в этой статье.

использованная литература