Пальто на зиму ще знадобиться
Нарешті ви спрогнозуєте температуру на наступні 30 років за допомогою моделі ARMA(1,1), включно з довірчими інтервалами навколо цієї оцінки. Пам'ятайте, що оцінка дрейфу має значно більший вплив на довгострокові прогнози, ніж параметри ARMA.
Раніше ви визначили, що температурні дані є випадковим блуканням, і розглянули перше різницювання даних. У цій вправі ви використаєте модуль ARIMA для температурних даних (до різницювання), що еквівалентно застосуванню модуля ARMA до змін температури з подальшим обчисленням кумулятивних сум цих змін, щоб отримати прогноз температури.
Оскільки з часом температури мають зростальний тренд, потрібно додати трендову складову, коли ви визначаєте модель ARIMA. У вправі ви використаєте лінійний тренд за часом, задавши аргумент trend='t'. Ви також можете спробувати інші моделі тренду, щоб побачити, як змінюються прогнози. Наприклад, для квадратичного тренду \(\small a+ bt + ct^2\) задайте trend=[0,1,1], щоб включити до моделі як лінійний член \(\small bt\), так і квадратичний член \(\small ct^2\).
Дані вже завантажені в датафрейм 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()