En hands-on guide til AR(p) processen for tidsserieanalyse i Python
I denne hands-on tutorial, vil vi dække emnet tid serie med modellering med autoregressive processer.
denne artikel vil dække følgende nøgleelementer i tidsserieanalyse:
autoregressiv proces
Yule-rollator ligning
stationaritet
Augmented Dicker-Fuller test
sørg for at have en Jupyter notebook klar til at følge med. Koden og datasættet findes her.
lad os komme i gang!
Lær hvordan du arbejder med mere komplekse modeller som f. eks.
Autoregressiv proces
en autoregressiv model bruger en lineær kombination af tidligere værdier af målet til at lave prognoser. Selvfølgelig er regressionen lavet mod selve målet. Matematisk udtrykkes en AR(p) model som:
hvor:
p: er ordren
C: er en konstant
epsilon: støj
AR(p) model er utrolig fleksibel, og den kan modellere mange forskellige typer tidsseriemønstre. Dette visualiseres let, når vi simulerer autoregressive processer.
normalt anvendes autoregressive modeller kun til stationære tidsserier. Dette begrænser rækkevidden af parametrene phi.
for eksempel vil en AR(1) model begrænse phi mellem -1 og 1. Disse begrænsninger bliver mere komplekse, når rækkefølgen af modellen øges, men de overvejes automatisk, når de modelleres i Python.
simulering af en AR(2) proces
lad os simulere en AR(2) proces i Python.
Vi starter med at importere nogle biblioteker. Ikke alle vil blive brugt til simuleringen, men de vil være nødvendige for resten af denne tutorial.
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
Vi bruger ArmaProcess-biblioteket til at simulere tidsserien. Det kræver, at vi definerer vores parametre.
vi simulerer følgende proces:
da vi har at gøre med en autoregressiv model af rækkefølge 2, skal vi definere koefficienten ved lag 0, 1 og 2.
vi annullerer også effekten af en glidende gennemsnitsproces.
endelig genererer vi 10 000 datapunkter.
i kode:
ar2 = np.array() ma = np.array()simulated_AR2_data = ArmaProcess(ar2, ma).generate_sample(nsample=10000)
Vi kan plotte tidsserien:
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:
Now, let’s take a look at the autocorrelation plot (correlogram):
plot_acf(simulated_AR2_data);
Du kan se, at koefficienten langsomt forfalder. Det betyder, at det er usandsynligt en glidende gennemsnitsproces, og det tyder på, at tidsserierne sandsynligvis kan modelleres med en autoregressiv proces (hvilket giver mening siden det, vi simulerer).
for at sikre, at dette er rigtigt, lad os plotte den delvise autokorrelation plot:
plot_pacf(simulated_AR2_data);
som du kan se koefficienterne er ikke signifikante efter lag 2. Derfor er det delvise autokorrelationsplot nyttigt til at bestemme rækkefølgen af en AR(p) – proces.
Du kan også kontrollere værdierne for hver koefficient ved at køre:
nu kan det i en reel projektindstilling være let at finde rækkefølgen af en AR(p) – proces, men vi skal finde en måde at estimere koefficienterne phi på.
for at gøre det bruger vi Yule-rollator-ligningen. Disse ligninger giver os mulighed for at estimere koefficienterne for en AR(p) – model, da vi kender rækkefølgen.