Hur man normaliserar och standardiserar tidsseriedata i Python

Hur man normaliserar och standardiserar tidsseriedata i Python

Vissa maskininlärningsalgoritmer uppnår bättre prestanda om dina tidsseriedata har en jämn skala eller fördelning.

Två tekniker som du kan använda för att konsekvent ändra skalan på dina tidsseriedata är normalisering och standardisering.

I den här handledningen kommer du att upptäcka hur du kan tillämpa normalisering och standardiseringsskalning till dina tidsseriedata i Python.

Efter att ha slutfört denna handledning vet du:

  • Begränsningarna av normalisering och förväntningar på dina data för att använda standardisering.
  • Vilka parametrar krävs och hur man manuellt beräknar normaliserade och standardiserade värden.
  • Hur man normaliserar och standardiserar dina tidsseriedata med scikit-learning i Python.

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 apr / 2019: Uppdaterade länken till dataset.
  • Uppdaterad augusti / 2019: Uppdaterad dataladdning för att använda nytt API.
Hur man normaliserar och standardiserar tidsseriedata i Python

Hur man normaliserar och standardiserar tidsseriedata i Python
Foto av Sage Ross, vissa rättigheter reserverade.

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.

Nedan följer ett exempel på de fem första raderna med data, inklusive rubrikraden.

Nedan följer en plot av hela datasetet.

Lägsta dagliga temperaturer

Lägsta dagliga temperaturer

Datauppsättningen visar en stark säsongskomponent och har en fin, finkornig detalj att arbeta med.

Denna handledning förutsätter att datamängden finns i din nuvarande arbetskatalog med filnamnet “dagligen-lägsta temperaturer-i-me.csv“.

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!

Normalisera tidsseriedata

Normalisering är en omskalning av data från det ursprungliga intervallet så att alla värden ligger inom området 0 och 1.

Normalisering kan vara användbart och till och med krävs i vissa maskininlärningsalgoritmer när dina tidsseriedata har ingångsvärden med olika skalor. Det kan krävas för algoritmer, som k-närmaste grannar, som använder avståndsberäkningar och linjär regression och artificiella neuronnätverk som viktinmatningsvärden.

Normalisering kräver att du känner till eller kan uppskatta de lägsta och maximala observerbara värdena. Du kanske kan uppskatta dessa värden utifrån din tillgängliga data. Om din tidsserie går upp eller ner kan det vara svårt att uppskatta dessa förväntade värden och normalisering kanske inte är den bästa metoden att använda på ditt problem.

Ett värde normaliseras enligt följande:

Där minimi- och maxvärdena gäller värdet x normaliseras.

Till exempel, för temperaturdata, kan vi uppskatta min och max observerbara värden som 30 och -10, som är mycket över och underskattade. Vi kan sedan normalisera valfritt värde som 18.8 enligt följande:

Du kan se att om en x värde tillhandahålls som ligger utanför gränserna för minimi- och maximivärdena, så att det resulterande värdet inte kommer att ligga i intervallet 0 och 1. Du kan söka efter dessa observationer innan du gör förutsägelser och antingen ta bort dem från datasetet eller begränsa dem till de fördefinierade max- eller minimivärdena.

Du kan normalisera din dataset genom att använda scikit-learning-objektet MinMaxScaler.

Bra praxis användning med MinMaxScaler och andra omskalningstekniker är som följer:

  1. Montera skalaren med tillgängliga träningsdata. För normalisering betyder detta att träningsdata kommer att användas för att uppskatta de minsta och maximala observerbara värdena. Detta görs genom att ringa passa() fungera,
  2. Tillämpa skalan på träningsdata. Det betyder att du kan använda normaliserad data för att träna din modell. Detta görs genom att ringa omvandla() fungera
  3. Tillämpa skalan på data framöver. Detta innebär att du kan förbereda nya data i framtiden som du vill göra förutsägelser för.

Om det behövs kan transformeringen inverteras. Detta är användbart för att konvertera förutsägelser tillbaka till sin ursprungliga skala för rapportering eller plottning. Detta kan göras genom att ringa till inverse_transform () fungera.

Nedan följer ett exempel på normalisering av datamängden Minimum Daily Temperatures.

Skalaren kräver att data tillhandahålls som en matris av rader och kolumner. De laddade tidsseriedata laddas som en Panda Serier. Den måste sedan omformas till en matris med en kolumn med 3650 rader.

Den omformade datamängden används sedan för att passa skalaren, datamängden normaliseras och sedan inverteras normaliseringstransformen för att visa originalvärdena igen.

Att köra exemplet skriver ut de första 5 raderna från den laddade datasetet, visar samma 5 värden i sin normaliserade form, sedan värdena tillbaka i sin ursprungliga skala med den inversa transformen.

Vi kan också se att minimi- och maxvärdena för datasetet är 0 respektive 26.3.

Det finns en annan typ av omskalning som är mer robust för att nya värden ligger utanför intervallet för förväntade värden; detta kallas standardisering. Vi kommer att titta på det nästa.

Standardisera tidsseriedata

Att standardisera en dataset innebär att man skalar om fördelningen av värden så att medelvärdet av observerade värden är 0 och standardavvikelsen är 1.

Detta kan ses som att subtrahera medelvärdet eller centrera data.

Liksom normalisering kan standardisering vara användbar och till och med krävs i vissa maskininlärningsalgoritmer när din tidsseriedata har ingångsvärden med olika skalor.

Standardisering förutsätter att dina observationer passar en Gaussisk fördelning (klockkurva) med ett välskött medelvärde och standardavvikelse. Du kan fortfarande standardisera dina tidsseriedata om denna förväntan inte uppfylls, men du kanske inte får tillförlitliga resultat.

Detta inkluderar algoritmer som Support Vector Machines, Linear and Logistic Regression, och andra algoritmer som antar eller har förbättrat prestanda med Gauss-data.

Standardisering kräver att du känner till eller kan exakt uppskatta medelvärdet och standardavvikelsen för observerbara värden. Du kanske kan uppskatta dessa värden från din träningsdata.

Ett värde standardiseras enligt följande:

Där det betyda beräknas som:

Och den standardavvikelse beräknas som:

Vi kan till exempel plotta ett histogram av datamängden Minsta dagliga temperatur på följande sätt:

Körning av koden ger följande plot som visar en Gaussisk fördelning av datasetet, vilket antas av standardisering.

Lägsta dagliga temperaturhistogram

Lägsta dagliga temperaturhistogram

Vi kan anta en medeltemperatur på 10 och en standardavvikelse på cirka 5. Med hjälp av dessa värden kan vi standardisera det första värdet i datasetet 20.7 enligt följande:

Medel- och standardavvikelsens uppskattningar för en dataset kan vara mer robusta för nya data än minimum och maximum.

Du kan standardisera din dataset med hjälp av scikit-lär objektet StandardScaler.

Nedan följer ett exempel på att standardisera datamängden Minsta dagliga temperatur.

Du kan också vara intresserad av