Вероятностное моделирование 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
- Интерпретация прогнозов, сделанных с помощью модели
Большое спасибо за ваше время. Соответствующий код и наборы данных можно найти здесь.
Заявление об ограничении ответственности: эта статья написана на условиях «как есть» без каких-либо гарантий. Он был написан с целью предоставить обзор концепций науки о данных и не должен интерпретироваться как профессиональный совет. Выводы и интерпретации в этой статье принадлежат автору и не поддерживаются и не связаны с какими-либо третьими сторонами, упомянутыми в этой статье.