Autoregressionsmodeller för prognoser för tidsserier med Python

Autoregressionsmodeller för prognoser för tidsserier med Python

Autoregression är en tidsseriemodell som använder observationer från tidigare tidssteg som inmatning till en regressionsekvation för att förutsäga värdet vid nästa tidssteg.

Det är en mycket enkel idé som kan resultera i exakta prognoser för olika tidsserieproblem.

I den här handledningen kommer du att upptäcka hur du implementerar en autoregressiv modell för prognoser för tidsserier med Python.

Efter att ha slutfört denna handledning vet du:

  • Hur du utforskar dina tidsseriedata för autokorrelation.
  • Hur man utvecklar en autokorrelationsmodell och använder den för att göra förutsägelser.
  • Hur man använder en utvecklad autokorrelationsmodell för att göra rullande förutsägelser.

Starta ditt projekt med min nya bok Time Series Forecasting With Python, inklusive steg-för-steg-självstudier och den Python-källkod filer för alla exempel.

Låt oss börja.

  • Uppdaterad maj / 2017: Fixat litet stavfel i autoregressionsekvationen.
  • Uppdaterad apr / 2019: Uppdaterade länken till dataset.
  • Uppdaterad augusti / 2019: Uppdaterad dataladdning för att använda nytt API.
  • Uppdaterad Sep / 2019: Uppdaterade exempel för att använda senaste planerings-API.
  • Uppdaterad apr / 2020: Ändrat AR till AutoReg på grund av API-ändring.
Autoregressionsmodeller för prognoser för tidsserier med Python

Autoregressionsmodeller för prognoser för tidsserier med Python
Foto av Umberto Salvagnin, vissa rättigheter förbehållna.

Autoregression

En regressionsmodell, såsom linjär regression, modellerar ett utgångsvärde baserat på en linjär kombination av ingångsvärden.

Till exempel:

Där yhat är förutsägelsen är b0 och b1 koefficienter som hittas genom att optimera modellen på träningsdata, och X är ett ingångsvärde.

Denna teknik kan användas i tidsserier där ingångsvariabler tas som observationer vid tidigare tidsteg, kallade fördröjningsvariabler.

Till exempel kan vi förutsäga värdet för nästa tidssteg (t + 1) med tanke på observationerna vid de senaste två tidsstegen (t-1 och t-2). Som en regressionsmodell ser det ut så här:

Eftersom regressionsmodellen använder data från samma inmatningsvariabel vid tidigare tidsteg, kallas den för en autoregression (regression av själv).

Sluta lära sig tidsserieprognoser långsam väg!

Ta min gratis 7-dagars e-postkurs och upptäck hur du kommer igång (med exempelkod).

Klicka för att registrera dig och få en gratis PDF-e-bokversion av kursen.

Starta din GRATIS minikurs nu!

Autokorrelation

En autoregressionsmodell antar att observationerna vid tidigare tidsteg är användbara för att förutsäga värdet vid nästa tidssteg.

Denna relation mellan variabler kallas korrelation.

Om båda variablerna ändras i samma riktning (t.ex. gå upp eller ner tillsammans) kallas detta en positiv korrelation. Om variablerna rör sig i motsatta riktningar när värdena ändras (t.ex. en går upp och en går ner) kallas detta negativ korrelation.

Vi kan använda statistiska mått för att beräkna korrelationen mellan utgångsvariabeln och värden vid tidigare tidsteg vid olika fördröjningar. Ju starkare korrelationen mellan utgångsvariabeln och en specifik fördröjd variabel är, desto mer vikt kan autoregressionsmodellen lägga på variabeln vid modellering.

Återigen, eftersom korrelationen beräknas mellan variabeln och sig själv vid tidigare tidsteg, kallas den en autokorrelation. Det kallas också seriekorrelation på grund av sekvensstrukturen för tidsseriedata.

Korrelationsstatistiken kan också hjälpa till att välja vilka fördröjningsvariabler som är användbara i en modell och vilka inte.

Intressant, om alla fördröjningsvariabler visar låg eller ingen korrelation med utgångsvariabeln, antyder det att tidsserieproblemet kanske inte är förutsägbart. Detta kan vara mycket användbart när du kommer igång med en ny dataset.

I den här handledningen kommer vi att undersöka autokorrelationen av en univariat tidsserie och sedan utveckla en autoregressionsmodell och använda den för att göra förutsägelser.

Innan vi gör det, låt oss först granska de minsta dagliga temperaturdata som kommer att användas i exemplen.

Minsta dagliga temperaturuppsättning

Denna dataset beskriver lägsta dagliga temperaturer över 10 år (1981-1990) i staden Melbourne, Australien.

Enheterna är i grader Celsius och det finns 3650 observationer. Källan till uppgifterna krediteras som Australian Bureau of Meteorology.

Ladda ner datamängden till din nuvarande arbetskatalog med filnamnet “daglig-lägsta-temperaturer.csv“.

Koden nedan laddar datauppsättningen som en Pandas-serie.

Att köra exemplet skriver ut de första 5 raderna från den laddade datasetet.

En linjediagram för datasetet skapas sedan.

Minsta dagliga temperaturdataset

Minsta dagliga temperaturdataset

Snabbkontroll för autokorrelation

Det finns en snabb, visuell kontroll som vi kan göra för att se om det finns en autokorrelation i vår tidsserieuppsättning.

Vi kan plotta observationen vid föregående tidssteg (t-1) med observationen vid nästa tidsteg (t + 1) som spridningsdiagram.

Detta kan göras manuellt genom att först skapa en lagversion av tidsserieuppsättningen och använda en inbyggd spridningsdiagramfunktion i Pandas-biblioteket.

Men det finns ett enklare sätt.

Pandas tillhandahåller en inbyggd plot för att göra exakt detta, kallad lag_plot () -funktionen.

Nedan följer ett exempel på hur du skapar en fördröjningsdiagram för datamängden Minimum Daily Temperatures.

Genom att köra exemplet ritas temperaturdata

Minsta dagliga temperaturdatamängdsfördröjning

Minsta dagliga temperaturdatamängdsfördröjning

Vi kan se en stor boll av observationer längs en diagonal linje av handlingen. Det visar tydligt ett förhållande eller någon korrelation.

Denna process kan upprepas för alla andra eftersläpna observationer, till exempel om vi vill granska förhållandet med de senaste sju dagarna eller med samma dag förra månaden eller förra året.

En annan snabbkontroll som vi kan göra är att direkt beräkna korrelationen mellan observationen och lagvariabeln.

Vi kan använda ett statistiskt test som Pearson-korrelationskoefficienten. Detta ger ett nummer för att sammanfatta hur korrelerade två variabler är mellan -1 (negativt korrelerat) och +1 (positivt korrelerat) med små värden nära noll som indikerar låg korrelation och höga värden över 0,5 eller under -0,5 som visar hög korrelation.

Korrelationen kan enkelt beräknas med hjälp av corr () -funktionen på DataFrame i den lagrade datasetet.

I exemplet nedan skapas en laggad version av datamängden Minsta dagliga temperatur och beräknar en korrelationsmatris för varje kolumn med andra kolumner, inklusive sig själv.

Detta är en bra bekräftelse för handlingen ovan.

Det visar en stark positiv korrelation (0,77) mellan observationen och lag = 1-värdet.

Detta är bra för engångskontroller, men tråkigt om vi vill kontrollera ett stort antal fördröjningsvariabler i vår tidsserie.

Därefter kommer vi att titta på en uppskalad version av detta tillvägagångssätt.

Autokorrelationsdiagram

Vi kan plotta korrelationskoefficienten för varje fördröjningsvariabel.

Detta kan mycket snabbt ge en uppfattning om vilka fördröjningsvariabler som kan vara bra kandidater för användning i en prediktiv modell och hur förhållandet mellan observationen och dess historiska värden förändras över tiden.

Vi kunde manuellt beräkna korrelationsvärdena för varje fördröjningsvariabel och plotta resultatet. Tack och lov tillhandahåller Pandas en inbyggd plot som kallas autocorrelation_plot () -funktionen.

Diagrammet ger fördröjningsnumret längs x-axeln och korrelationskoefficientvärdet mellan -1 och 1 på y-axeln. Diagrammet innehåller också solida och streckade linjer som indikerar 95% och 99% konfidensintervall för korrelationsvärdena. Korrelationsvärden ovanför dessa linjer är mer signifikanta än de under linjen, vilket ger en tröskel eller gräns för att välja mer relevanta fördröjningsvärden.

Att köra exemplet visar svängningen i positiv och negativ korrelation när temperaturvärdena ändras över sommar- och vintersäsonger varje föregående år.

Pandas autokorrelationsplott

Pandas autokorrelationsplott

Statistikmodellbiblioteket tillhandahåller också en version av tomten i plot_acf () -funktionen som en linjediagram.

I detta exempel begränsar vi utvärderingsfördröjningsvariablerna till 31 för läsbarhet.

Statsmodels Autokorrelation Plot

Statsmodels Autokorrelation Plot

Nu när vi vet hur man granskar autokorrelationen i vår tidsserie, låt oss titta på modellering med en autoregression.

Innan vi gör det, låt oss fastställa en baslinjeprestanda.

Persistensmodell

Låt oss säga att vi vill utveckla en modell för att förutsäga de senaste sju dagarna av lägsta temperaturer i datasetet med tanke på alla tidigare observationer.

Den enklaste modellen som vi kunde använda för att förutsäga skulle vara att bestå den senaste observationen. Vi kan kalla detta en uthållighetsmodell och den ger en baslinje för prestanda för det problem som vi kan använda för jämförelse med en autoregressionsmodell.

Vi kan utveckla en testkabel för problemet genom att dela upp observationerna i träning och testuppsättningar, med ...

Du kan också vara intresserad av