aikasarjan ennustaminen Autoregressiivisillä prosesseilla

photo by Elena koycheva on Unsplash

tässä käytännön tutoriaalissa käsitellään aikasarjamallinnusta autoregressiivisin prosessein.

tässä artikkelissa käsitellään seuraavia aikasarja-analyysin avaintekijöitä:

  • autoregressiivinen prosessi
  • Yule-Walkerin yhtälö
  • stationarity
  • Augmented Dicker-Fuller-testi

varmista, että Jupyter-muistikirja on valmiina seurattavaksi. Koodi ja aineisto löytyvät täältä.

Let ’ s get started!

opi työskentelemään monimutkaisempien mallien, kuten SARIMAXIN, VARMAXIN, kanssa ja käytä syväoppimismalleja (LSTM, CNN, ResNet, autoregressive LSTM) aikasarja-analyysiin sovelletulla aikasarja-analyysillä Python-kielellä!

Autoregressiivinen prosessi

autoregressiivinen malli käyttää lineaarista yhdistelmää kohteen aiemmista arvoista ennusteiden tekemiseen. Toki regressio tehdään itse kohdetta vastaan. Matemaattisesti AR(p) – malli ilmaistaan seuraavasti:

div>

autoregressiivinen malli

missä:

  • P: on järjestys
  • C: on vakio
  • Epsilon: noise

AR (P) – malli on uskomattoman joustava ja sillä voidaan mallintaa monenlaisia aikasarjakuvioita. Tämä on helppo visualisoida, kun simuloimme autoregressiivisiä prosesseja.

yleensä autoregressiivisiä malleja sovelletaan vain kiinteisiin aikasarjoihin. Tämä rajoittaa Phi-parametrien valikoimaa.

esimerkiksi AR(1) – malli rajoittaa phi: n välille -1 ja 1. Nämä rajoitteet monimutkaistuvat mallin järjestyksen kasvaessa, mutta ne otetaan automaattisesti huomioon Pythonilla mallinnettaessa.

Ar(2) – prosessin simulointi

simuloidaan AR(2) – prosessia Pythonissa.

aloitamme tuomalla joitakin kirjastoja. Kaikkia ei käytetä simulaatioon, mutta niitä tarvitaan tämän opetusohjelman loppuosaan.

from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.tsa.stattools import pacf
from statsmodels.regression.linear_model import yule_walker
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt
import numpy as np%matplotlib inline

käytämme ArmaProcess-kirjastoa aikasarjan simulointiin. Se vaatii meitä määrittelemään muuttujamme.

simuloimme seuraavaa prosessia:

AR(2 process

koska kyseessä on autoregressiivinen malli järjestyksessä 2, meidän on määriteltävä kerroin viiveellä 0, 1 ja 2.

myös kumotaan liukuvan keskiarvon prosessin vaikutus.

lopulta syntyy 10 000 datapistettä.

koodissa:

ar2 = np.array()
ma = np.array()simulated_AR2_data = ArmaProcess(ar2, ma).generate_sample(nsample=10000)

voimme piirtää aikasarjan:

plt.figure(figsize=); # Set dimensions for figure
plt.plot(simulated_AR2_data)
plt.title("Simulated AR(2) Process")
plt.show()

And you should get something similar to this:

Plot of the simulated AR(2) process

Now, let’s take a look at the autocorrelation plot (correlogram):

plot_acf(simulated_AR2_data);

/div>

Ar(2) – prosessin korrelogrammi

voit nähdä, että kerroin hajoaa hitaasti. Tämä tarkoittaa, että se on epätodennäköistä liukuvan keskiarvon prosessi ja se viittaa siihen, että aikasarja voidaan todennäköisesti mallinnetaan autoregressiivinen prosessi (mikä on järkevää, koska mitä me simuloidaan).

jotta tämä olisi varmasti oikein, piirretään osittaisen autokorrelaation tontti:

div>

osittainen autokorrelaatio kuvaaja Ar(2) – prosessille

kuten näette, kertoimet eivät ole merkittäviä viiveellä 2. Siksi osittaisen autokorrelaation kuvaaja on hyödyllinen AR(p) – prosessin järjestyksen määrittämiseksi.

voit tarkistaa myös kunkin kertoimen arvot juoksemalla:

pacf_coef_AR2 = pacf(simulated_AR2_data)
print(pacf_coef_AR2)

nyt reaaliprojektiasetuksessa ar(p) – prosessin järjestys voi olla helppo löytää, mutta on löydettävä tapa arvioida kertoimia phi.

tähän käytetään Yule-Walker-yhtälöä. Tämän yhtälön avulla voimme arvioida ar(p) – mallin kertoimia, koska tiedämme järjestyksen.

rho, sigma = yule_walker(simulated_AR2_data, 2, method='mle')
print(f'rho: {-rho}')
print(f'sigma: {sigma}')

yule-Walkerin kerroin-arviot

kuten näette, Yule-Walkerin yhtälö teki kelpo työtä arvioidessaan kertoimiamme ja pääsi hyvin lähelle 0,33: ta ja 0,5: tä.

Ar(3) – prosessin simulointi

nyt simuloidaan AR(3) – prosessia. Erityisesti, me simuloida:

AR(3) simulaatioprosessi

samalla tavalla kuin aiemmin tehtiin, määritellään kertoimemme ja luodaan 10 000 datapistettä:

ar3 = np.array()
ma = np.array()simulated_AR3_data = ArmaProcess(ar3,ma).generate_sample(nsample=10000)

sitten voidaan visualisoida aikasarja:

plt.figure(figsize=); # Set dimensions for figure
plt.plot(simulated_AR3_data)
plt.title("Simulated AR(3) Process")
plt.show()

ja sinun pitäisi nähdä jotain vastaavaa:

Simulated AR(3) process

Now, looking at the PACF and ACF:

plot_pacf(simulated_AR3_data);
plot_acf(simulated_AR3_data);

PACF and ACF for an AR(3) process

You see that the coefficients are not significant after lag 3 for the PACF function as expected.

Finally, let’s use the Yule-Walker equation to estimate the coefficients:

rho, sigma = yule_walker(simulated_AR3_data, 3, method='mle')
print(f'rho: {-rho}')
print(f'sigma: {sigma}')

Yule-Walkerin kertoimen estimaatit

taas arviot ovat melko lähellä todellisia arvoja.

Project — Forecasting the quarterly EPS for Johnson&Johnson

now, let ’ s apply our knowledge of autoregressive processes in a project setting.

tavoitteena on mallintaa Johnsonin neljännesvuosittainen osakekohtainen tulos (EPS)&Johnson vuosina 1960-1980.

luetaan ensin tietokokonaisuus:

import pandas as pddata = pd.read_csv('jj.csv')
data.head()

aineiston viisi ensimmäistä riviä

nyt ensimmäiset viisi riviä eivät ole meille kovin hyödyllisiä. Let ’ s juoni koko aineisto saada paremman visuaalisen esityksen.

plt.figure(figsize=); # Set dimensions for figure
plt.scatter(data, data)
plt.title('Quaterly EPS for Johnson & Johnson')
plt.ylabel('EPS per share ($)')
plt.xlabel('Date')
plt.xticks(rotation=90)
plt.grid(True)
plt.show()

quaterly EPS for Johnson&Johnson between 1960 and 1980

awesome! Nyt voimme, että siellä on selvä nouseva trendi tiedoissa. Vaikka tämä voi olla hyvä merkki yritykselle, se ei ole hyvä aikasarjamallinnuksen kannalta, koska se tarkoittaa, että aikasarja ei ole paikallaan.

kuten edellä, AR(p) – prosessi toimii vain stationäärisille sarjoille.

siksi meidän on sovellettava joitakin muunnoksia tietoomme, jotta se olisi paikallaan.

tässä tapauksessa otetaan lokiero. Tämä vastaa kunkin arvon lokin ottamista ja edellisen arvon vähentämistä.

# Take the log difference to make data stationarydata = np.log(data)
data = data.diff()
data = data.drop(data.index)
data.head()

muunnettujen aikasarjojen piirtäminen:

plt.figure(figsize=); # Set dimensions for figure
plt.plot(data)
plt.title("Log Difference of Quaterly EPS for Johnson & Johnson")
plt.show()

div>

log difference of quarterly EPS for Johnson&Johnson

nyt näyttää siltä, että poistimme trendin. Meidän on kuitenkin varmistettava, että sarjamme on paikallaan ennen mallintamista AR(p) – prosessilla.

käytämme siis laajennettua Dicker-Fuller-testiä. Tämä antaa meille tilastollisen luottamuksen siihen, että aikasarjamme ovat todellakin paikallaan.

ad_fuller_result = adfuller(data)
print(f'ADF Statistic: {ad_fuller_result}')
print(f'p-value: {ad_fuller_result}')

/div>

ADF-testin tulokset

koska saamme suuren negatiivisen ADF-tilaston ja p-arvon alle 0,05, voimme hylätä nollahypoteesin ja sanoa aikasarjamme olevan paikallaan.

nyt etsitään prosessin järjestys piirtämällä PACF:

plot_pacf(data);
plot_acf(data);

/div>

pacf ja ACF

kuten näkyy, lagin 4 jälkeen pacf-kertoimet eivät ole enää merkittäviä. Siksi lähdemme autoregressiivinen prosessi järjestyksessä 4.

nyt arvioimme kertoimia näiden tietojen avulla Yule-Walker-yhtälön avulla:

# Try a AR(4) model
rho, sigma = yule_walker(data, 4)
print(f'rho: {-rho}')
print(f'sigma: {sigma}')

Yule-Walker coefficient estimates

Therefore, the function is approximated as:

Note that this equation models the transformed series.

Conclusion

Congratulations! Ymmärrät nyt, mitä autoregressiivinen malli on, miten tunnistaa autoregressiivinen prosessi, miten määrittää sen järjestys ja miten käyttää sitä mallintamaan tosielämän aikasarjaa.

Teroita aikasarja-analyysitaitojasi ja opettele uusimmat parhaat käytännöt aikasarja-analyysiin Pythonissa:

  • sovellettu aikasarja-analyysi Pythonissa

Cheers 🍺

Vastaa

Sähköpostiosoitettasi ei julkaista.