Zimní kabát zatím neodkládej
Nakonec vytvoříš předpověď teploty na příštích 30 let pomocí modelu ARMA(1,1), včetně intervalů spolehlivosti kolem tohoto odhadu. Měj na paměti, že odhad driftu bude mít na dlouhodobé předpovědi mnohem větší vliv než samotné parametry ARMA.
Dříve jsi zjistil/a, že teplotní data sledují náhodnou procházku, a provedl/a jsi první diferenciaci. V tomto cvičení použiješ modul ARIMA přímo na teplotní data (před diferencováním), což je ekvivalentní použití modulu ARMA na změny teploty a následnému kumulativnímu součtu těchto změn pro získání předpovědi teploty.
Protože teploty v čase rostou, budeš při definici modelu ARIMA muset přidat složku trendu. V tomto cvičení použiješ lineární trend v čase nastavením argumentu trend='t'. Můžeš také vyzkoušet jiné modely trendu a sledovat, jak se předpovědi změní. Například pro kvadratický trend \(\small a+ bt + ct^2\) nastav trend=[0,1,1], čímž do modelu zahrneš jak lineární člen \(\small bt\), tak kvadratický člen \(\small ct^2\).
Data jsou předem načtena v DataFrame s názvem temp_NY.
Toto cvičení je součástí kurzu
Analýza časových řad v Pythonu
Pokyny k cvičení
- Vytvoř instanci třídy
ARIMAs názvemmodpro integrovaný model ARMA(1,1), tedy model ARIMA(1,1,1)- Parametr
dvorder(p,d,q)je roven jedné, protože jsme provedli první diferenciaci právě jednou - Přizpůsob model
modpomocí metody.fit()a výsledky pojmenujres
- Parametr
- Předpověz řadu pomocí metody
plot_predict()zavolané nares- Jako počáteční datum zvol
1872a jako koncové datum2046
- Jako počáteční datum zvol
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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()