Зимнее пальто ещё пригодится
На завершающем этапе вы построите прогноз температуры на следующие 30 лет с помощью модели ARMA(1,1), включая доверительные интервалы вокруг оценки. Имейте в виду, что оценка дрейфа оказывает значительно большее влияние на долгосрочные прогнозы, чем параметры ARMA.
Ранее вы установили, что данные о температуре описываются случайным блужданием, и рассмотрели взятие первых разностей. В этом упражнении вы применените модуль ARIMA к исходным данным температуры (до взятия разностей) — это эквивалентно применению модуля ARMA к изменениям температуры с последующим суммированием этих изменений нарастающим итогом для получения прогноза.
Поскольку температуры со временем растут, при определении модели ARIMA необходимо добавить трендовую составляющую. В упражнении используется линейный тренд по времени: для этого задайте аргумент trend='t'. Вы также можете попробовать другие модели тренда и посмотреть, как изменятся прогнозы. Например, для квадратичного тренда \(\small a + bt + ct^2\) задайте trend=[0,1,1], чтобы включить в модель как линейный член \(\small bt\), так и квадратичный \(\small ct^2\).
Данные предварительно загружены в DataFrame с именем temp_NY.
Это упражнение является частью курса
Анализ временных рядов на Python
Инструкции к упражнению
- Создайте экземпляр класса
ARIMAс именемmodдля интегрированной модели ARMA(1,1), то есть ARIMA(1,1,1)- Параметр
dвorder(p,d,q)равен единице, так как мы взяли первые разности один раз - Подгоните
modс помощью метода.fit()и сохраните результаты в переменнуюres
- Параметр
- Постройте прогноз ряда с помощью метода
plot_predict()для объектаres- Задайте дату начала
1872и дату окончания2046
- Задайте дату начала
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Import the ARIMA module from statsmodels
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_predict
# Forecast temperatures using an ARIMA(1,1,1) model
mod = ARIMA(temp_NY, trend='t', order=(1,1,1))
___ = ___.fit()
# Plot the original series and the forecasted series
fig, ax = plt.subplots()
temp_NY.plot(ax=ax)
plot_predict(___, start='1872', end='2046', ax=ax)
plt.show()