Hoppa till huvudinnehållet

SARIMA-modeller: En komplett guide till säsongsbunden tidsserieprognostisering

Lär dig hur SARIMA utökar ARIMA för att hantera säsongsbundenhet, förstå dess sju parametrar och bygg en fungerande modell i Python från datainsamling till prognoser.
Uppdaterad 31 juli 2026  · 15 min läsa

Utforska med AI

Öppna i ChatGPTÖppna i ClaudeÖppna i Perplexity

Varje december fyller återförsäljare på med julsortiment. Varje sommar förbereder sig elnäten för toppar från luftkonditionering. Dessa mönster upprepas år efter år, och om du bygger en tidsserieprognos som ignorerar dem går du miste om precision.

Säsongsvisa autoregressiva integrerade glidande medelvärdesmodeller (SARIMA) utökar den allmänt använda ARIMA-ramen för att fånga upprepande säsongsmönster tillsammans med vanliga trender. I den här artikeln får du lära dig vad SARIMA är, hur dess komponenter fungerar, när du ska välja det framför ARIMA och hur du bygger en modell steg för steg i Python.

Vad är SARIMA?

SARIMA är en tidsserieprognosmodell som hanterar både icke-säsongsbundna och säsongsbundna mönster i data. Den bygger direkt på ARIMA, så om du redan har arbetat med ARIMA känner du igen det mesta av mekaniken. Den avgörande skillnaden är att SARIMA lägger till ett andra lager av parametrar som är utformade för att modellera beteenden som upprepas med fasta intervall, som månatliga, kvartalsvisa eller veckovisa cykler.

Formellt skrivs en SARIMA-modell som SARIMA(p, d, q)(P, D, Q)[S]. Den första uppsättningen parametrar, (p, d, q), hanterar den icke-säsongsbundna strukturen, identiskt med standard-ARIMA. Den andra uppsättningen, (P, D, Q)[S], står för säsongsmönster, där S är längden på den säsongsbundna cykeln. För månatliga data med årlig säsong är S = 12. För kvartalsdata är S = 4.

Viktiga komponenter i SARIMA

SARIMA:s sju parametrar kan kännas som mycket i början. Det hjälper att tänka på dem i två grupper: den välbekanta ARIMA-trion (p, d, q) och de säsongsbundna motsvarigheterna (P, D, Q, S) som speglar dem på säsongsskalan. Varje säsongsparameter gör exakt det som dess icke-säsongsbundna tvilling gör, bara tillämpad över säsongsglapp i stället för angränsande tidssteg.

Autoregressiv (AR)-del

AR-komponenten använder seriens tidigare värden för att förutsäga framtida. Parametern p anger hur många fördröjda värden som ska inkluderas. Om p = 2 använder modellen de två föregående tidsstegen som prediktorer för det aktuella värdet.

På den säsongsbundna sidan gör P samma sak men vid säsongsfördröjningar. Om P = 1 och S = 12 tittar modellen på värdet från 12 perioder sedan, samma månad föregående år, som en prediktor. Detta fångar direkt år-till-år-mönster.

Integrerad (I)-del

Parametern d styr hur många gånger serien differensieras för att ta bort trender och göra den stationär. Differensiering innebär att man subtraherar föregående observation från varje observation, vilket tar bort en linjär trend. Om d = 1 tar du första differenser; om d = 2 differensierar du den redan differensierade serien.

Säsongsdifferensiering fungerar på samma sätt men vid säsongsfördröjningar. Parametern D anger hur många säsongsdifferenser som ska tillämpas. Med D = 1 och S = 12 subtraherar du värdet från 12 perioder tidigare från varje observation. Att använda d = 1 och D = 1 tillsammans är vanligt när en serie har både en allmän uppåtgående trend och ett upprepat säsongsmönster.

Glidande medelvärde (MA)-del

Till skillnad från AR-komponenten, som tittar på tidigare värden, modellerar MA-komponenten sambandet mellan den aktuella observationen och residualfel från tidigare prognoser. Parametern q anger hur många fördröjda feltermer som ska inkluderas. Om q = 1 använder modellen prognosfelet från föregående steg för att justera sin aktuella prognos.

Den säsongsbundna motsvarigheten Q tillämpar samma logik vid säsongsfördröjningar. Med Q = 1 och S = 12 tar modellen med prognosfelet från 12 perioder tidigare. Detta är viktigt när säsongschocker, som en ovanligt het sommar som driver energiefterfrågan, tenderar att kvarstå in i samma period året därpå.

Säsongskomponent (S)

Parametern S definierar längden på den säsongsbundna cykeln och binder samman de tre säsongsparametrarna (P, D, Q). Att få S rätt är viktigt: om dina data är månatliga med ett årligt mönster är S = 12. Veckodata med en årlig cykel ger S ungefär 52.

Här kan säsongsbundenhet ibland bli knepig. Ett år är inte exakt 52 veckor; det ligger närmare 52,18. För de flesta praktiska syften fungerar det bra att avrunda till S = 52. Men vissa dataset har flera säsongsperioder: daglig efterfrågan på el visar ofta både en veckocykel (S = 7) och en årscykel (S = 365). Standard-SARIMA hanterar en säsongsperiod, så flera säsongsmönster kräver mer avancerade metoder som TBATS eller Facebook Prophet.

När S inte är uppenbar hjälper tidsseriedecomposition. Genom att dela upp serien i dess trend-, säsongs- och residualkomponenter synliggörs den dominerande upprepade perioden. Du kan också granska autokorrelationsdiagram för toppar vid regelbundna fördröjningar.

ARIMA vs. SARIMA: Vad är skillnaden?

Här är förmodligen vad du redan tänker: när ska du faktiskt använda SARIMA i stället för det enklare ARIMA?

Det korta svaret: använd ARIMA när dina data saknar meningsfullt säsongsmönster, och SARIMA när de har det.

ARIMA modellerar tre saker: autokorrelation i själva serien (AR), antalet differenser som behövs för stationaritet (I) och det kvarhängande inflytandet från tidigare prognosfel på det aktuella värdet (MA). Det hanterar trender, cykler och oregelbundet brus väl. Det det inte kan göra är att modellera mönster som upprepas med en fast säsongsfrekvens. De glider igenom som oförklarad varians.

SARIMA lägger till just den förmågan. När tydliga säsongstoppar och -dalar syns i dina data, tvingar en ren ARIMA-modell in dessa mönster i residualerna, vilket ger sämre prognoser och residualer som inte är vitt brus. En SARIMA-modell fångar dem direkt.

En praktisk tumregel: plotta dina data och leta efter upprepade mönster med ett fast intervall. Om du ser dem, julhandelstoppar, vinterns energitoppar, kvartalsvisa vinstmönster, välj SARIMA. Om serien är oregelbunden eller trenddriven utan en regelbunden cykel är ARIMA enklare och tillräcklig.

Vår kursen ARIMA Models in Python täcker båda ramverken med praktiska övningar för att skärpa din intuition för när respektive passar.

Hur bygger man en SARIMA-modell i Python

Att bygga en SARIMA-modell följer en logisk sekvens: samla data, kontrollera stationaritet, identifiera parametrar, anpassa modellen, kör diagnostik och prognostisera. Så här fungerar varje steg i praktiken, med hjälp av Pythons statsmodels-bibliotek.

Datainsamling

För en modell som fångar säsongsbundenhet behöver du tillräckligt med historik för att observera mönstret minst två gånger, helst flera cykler. Månatlig detaljhandel, temperaturserier, energiförbrukning och passagerarflöden är klassiska exempel. Offentligt tillgängliga källor som Federal Reserve Economic Data (FRED), US Census Bureau eller Kaggle är bra startpunkter.

Standarddatasetet i undervisning för detta arbetsflöde är flygpassagerarräkningar: månatliga data från 1949 till 1960 med en tydlig uppåtgående trend och stark årlig säsongsbundenhet. Det finns tillgängligt via statsmodels genom get_rdataset(), som hämtar det från Rdatasets-samlingen. Lär dig arbetsflödet på detta dataset innan du tillämpar det på dina egna data.

Datapreprocessering

Innan du anpassar någon SARIMA-modell behöver du en stationär serie, en där medelvärde och varians inte förändras över tid. Augmented Dickey-Fuller-testet (ADF) kontrollerar detta formellt: ett p-värde under 0,05 antyder att serien är stationär.

Om den inte är det, fixar differensiering problemet. Tillämpa vanlig differensiering (d = 1) för trend, säsongsdifferensiering (D = 1 vid fördröjning S) för säsongsbunden icke-stationaritet, eller båda vid behov. Hantera saknade värden före detta steg. Framåtfyllning eller interpolation är standardmetoder för tidsseriedata, eftersom borttagning av rader bryter den tidsmässiga strukturen.

Modellidentifiering

Med en stationär serie till hands använder du ACF- och PACF-diagram (Autokorrelations- respektive partiellt autokorrelationsfunktion) för att identifiera modellparametrarna. Här är vad du ska leta efter:

  • ACF visar korrelationen mellan serien och dess fördröjningar. Ett skarpt avbrott efter fördröjning q antyder MA-ordningen. Toppar vid säsongsfördröjningar (12, 24, 36 för månatliga data) informerar om Q.
  • PACF visar partiella korrelationer med mellanliggande fördröjningseffekter borttagna. Ett skarpt avbrott efter fördröjning p antyder AR-ordningen. Säsongstoppar informerar om P.

I praktiken ger diagrammen kandidatvärden, och du jämför ett fåtal modeller med informationskriterier (mer om detta i diagnostiken). Om du hellre vill automatisera sökningen gör auto_arima() från paketet pmdarima en rutnätssökning över parameterkombinationer och väljer den modell som passar bäst.

Parameterestimering

När du har identifierat kandidatparametrar skattar statsmodels dem med maximum likelihood-estimering (MLE), och hittar de koefficientvärden som gör de observerade data mest sannolika givet modellen. SARIMA-estimering är mer beräkningskrävande än ren ARIMA eftersom optimeraren måste passa både icke-säsongsbundna och säsongsbundna komponenter samtidigt.

Anpassningsprocessen kan ibland konvergera till ett lokalt optimum snarare än det globala, så det är värt att prova några olika startvärden eller parameterkombinationer när resultaten ser märkliga ut.

Modellanpassning

Så här anpassar du en SARIMA-modell i Python med flygpassagerardatasetet:

import pandas as pd
import statsmodels.api as sm

# Load the classic airline dataset
airline_data = sm.datasets.get_rdataset("AirPassengers", "datasets").data
airline_data.index = pd.date_range(start="1949-01", periods=len(airline_data), freq="MS")
passengers = airline_data["value"]

# Fit SARIMA(1,1,1)(1,1,1)[12]
sarima_model = sm.tsa.statespace.SARIMAX(
    passengers,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,
    enforce_invertibility=False
)

sarima_result = sarima_model.fit(disp=False)
print(sarima_result.summary())	

Argumentet order tar (p, d, q) för den icke-säsongsbundna delen; seasonal_order tar (P, D, Q, S). Att sätta enforce_stationarity=False och enforce_invertibility=False ger optimeraren mer flexibilitet, vilket ofta hjälper konvergens på data från verkligheten.

Modellstatistik och diagnostik

Efter anpassning, kör de inbyggda diagnostikdiagrammen med sarima_result.plot_diagnostics(). Du letar efter fyra saker:

  • Standardiserade residualer: Ska se ut som vitt brus utan uppenbara mönster.
  • Histogram över residualer: Bör vara ungefär normalfördelat.
  • Normal Q-Q-plot: Punkter ska ligga nära diagonalinjen.
  • Korrelogram (ACF för residualer): Inga signifikanta toppar, vilket skulle indikera oförklarad autokorrelation.

Var särskilt uppmärksam på säsongsfördröjningar i korrelogrammet. Toppar vid fördröjningarna 12, 24 och så vidare antyder att säsongskomponenten inte är fullt fångad. Jämför alternativa specifikationer med AIC (Akaike Information Criterion) och BIC (Bayesian Information Criterion): lägre värden indikerar bättre passform, där BIC straffar komplexitet hårdare.

Prognostisering

Med en validerad modell är det enkelt att generera prognoser. Dela upp dina data i tränings- och testmängder för att få en ärlig bild av prognosnoggrannheten:

# Train on first 11 years, test on final year
train = passengers[:"1959"]
test = passengers["1960":]

# Refit on training data and forecast
sarima_train = sm.tsa.statespace.SARIMAX(
    train,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,   # add this
    enforce_invertibility=False   # add this
).fit(disp=False)

forecast = sarima_train.get_forecast(steps=12)
forecast_mean = forecast.predicted_mean
conf_int = forecast.conf_int()

Metoden get_forecast() returnerar punktprognoser tillsammans med konfidensintervall som blir bredare ju längre fram du prognostiserar. Den breddningen är inte ett fel; det är modellen som är ärlig om osäkerheten. Utvärdera noggrannhet med RMSE (Root Mean Squared Error) eller MAPE (Mean Absolute Percentage Error) på den undansatta testmängden.

Praktiska användningsområden för SARIMA

Så många signaler i verkligheten är säsongsbundna att SARIMA förtjänar en permanent plats i varje tidsserievertygslåda. Några exempel från olika branscher:

  • Detaljhandel: Prognostisera månatliga försäljningsvolymer för lagerplanering, särskilt kring helger där efterfrågetoppar är förutsägbara men varierar i storlek från år till år.
  • Energiförbrukning: Förutsäga efterfrågan på el och gas, som följer både dagliga och årliga säsongscykler drivna av temperatur och aktivitetsmönster.
  • Finans: Modellera kvartalsvisa vinst- eller handelsvolymmönster som upprepas med räkenskapskalendrar.
  • Väderprognoser: Prognostisera temperatur, nederbörd och andra klimatvariabler som följer starka årliga cykler.

I varje fall är den upprepade strukturen själva signalen, och SARIMA är byggd för att fånga den.

Begränsningar med SARIMA

Att veta var ett verktyg fungerar bra är bara halva bilden. SARIMA är en stabil baslinje för säsongsbundna tidsserier, men att känna till dess begränsningar är det som skiljer dem som använder modeller väl från dem som använder dem blint.

Den hanterar exakt en säsongsperiod. Om dina data har flera säsongsbundenheter, dagliga, veckovisa och årliga mönster lager på lager, kommer SARIMA inte att modellera alla samtidigt. Metoder som TBATS, Prophet eller LSTM-nätverk hanterar flera säsongsfrekvenser mer naturligt.

SARIMA antar också linearitet. Den modellerar linjära samband mellan tidigare värden, tidigare fel och framtida observationer. Icke-linjära dynamiker, vanliga i finansiella tidsserier eller kaotiska system, kräver andra verktyg. Och liksom ARIMA förlitar sig SARIMA enbart på seriens egen historik. Om du har externa drivkrafter som påverkar dina prognoser, kampanjer, väderhändelser, ekonomiska indikatorer, titta på SARIMAX, som lägger till exogena variabler i SARIMA-ramverket.

Slutligen kan parameterurval vara genuint svårt. Med sju parametrar att stämma av är sökrymden stor, och anpassning kan vara långsam på långa serier. auto_arima() från pmdarima hjälper till att automatisera detta. Men det finns ingen genväg runt att förstå vad parametrarna faktiskt betyder, vilket är varför vi gick igenom komponenterna innan vi rörde någon kod.

Slutsats

Jag har alltid tyckt att SARIMA undersäljs i introduktionskurser i prognostisering. Det lärs ut som ”ARIMA, fast med säsongsgrejer”, vilket får det att låta som en liten utökning. Det är det inte. De säsongsbundna parametrarna är inte påklistrade; de gör verkligt strukturellt arbete och fångar ett lager av dina datas beteende som ARIMA helt enkelt inte kan nå.

Det som får SARIMA att klicka i praktiken är insikten att de icke-säsongsbundna och säsongsbundna komponenterna inte är separata modeller som körs parallellt. De samverkar. AR- och MA-termerna arbetar tillsammans med sina säsongsbundna tvillingar, var och en hanterar en annan tidskala av autokorrelation. När det väl klickar slutar läsning av ACF- och PACF-diagram att kännas som mönsterigenkänning och börjar kännas som verklig förståelse av dina data.

Om du arbetar med månatliga, kvartalsvisa eller andra regelbundet cyklade data är SARIMA rätt startpunkt, inte för att det alltid är det slutliga svaret, utan för att det tvingar dig att tänka klart om strukturen i din serie. Därifrån lägger SARIMAX till externa prediktorer, och metoder som TBATS eller Prophet hanterar de stökigare fall med flera säsonger. Vår handledning i tidsserieprognostisering och ARIMA Models in Python-kurs är båda bra nästa steg.

SARIMA – vanliga frågor

Vad står SARIMA för?

SARIMA står för Seasonal AutoRegressive Integrated Moving Average. Det utökar standard-ARIMA-modellen genom att lägga till säsongsparametrar — (P, D, Q) och säsongsperioden S — som fångar upprepade mönster i tidsseriedata, såsom månatliga eller kvartalsvisa cykler.

Vad är skillnaden mellan ARIMA och SARIMA?

ARIMA modellerar icke-säsongsbundna mönster: trend, autokorrelation och effekter av glidande medelvärde. SARIMA lägger till ett andra lager parametrar (P, D, Q, S) som modellerar samma effekter vid säsongsfördröjningar. Om dina data visar upprepade mönster med ett fast intervall — som högre försäljning varje december — fångar SARIMA dessa direkt, medan ARIMA lämnar dem som oförklarad residualvarians.

Hur väljer jag rätt SARIMA-parametrar?

Börja med att kontrollera om din serie är stationär med Augmented Dickey-Fuller-testet. Granska sedan ACF- och PACF-diagram: de icke-säsongsbundna AR- (p) och MA- (q) ordningarna kommer från mönstret av avbrott vid icke-säsongsfördröjningar, medan de säsongsbundna ordningarna P och Q kommer från toppar vid säsongsfördröjningar. Du kan också använda auto_arima() från paketet pmdarima för att automatiskt söka över parameterkombinationer med AIC eller BIC för att välja den bästa modellen.

Hur bestämmer jag den säsongsbundna perioden S för min SARIMA-modell?

Den säsongsbundna perioden S återspeglar hur ofta mönstret upprepas. För månatliga data med årlig säsong är S = 12. För kvartalsdata är S = 4. För veckodata är S = 52 (eller avrundad 52,18). Om perioden inte är uppenbar, använd tidsseriedecomposition eller inspektera ACF-diagrammet för regelbundna toppar — dessa toppar avslöjar den dominerande säsongsfrekvensen.

Kan SARIMA hantera flera säsongsperioder?

Standard-SARIMA hanterar en säsongsperiod åt gången. Om dina data har flera lager av säsongsbundenhet — som daglig efterfrågan på el med både veckovisa och årliga cykler — behöver du alternativ som TBATS, Facebook Prophet eller LSTM-nätverk, som är utformade för att modellera flera överlappande säsongsstrukturer samtidigt.

Vilket Python-bibliotek är bäst för att anpassa SARIMA-modeller?

Pythons statsmodels-bibliotek är standardvalet och erbjuder SARIMAX() (som är tillräckligt flexibelt för att passa SARIMA-modeller utan exogena variabler). För automatiserat parameterurval utför biblioteket pmdarima med funktionen auto_arima() en rutnätssökning och är värt att lägga till i ditt arbetsflöde när du inte är säker på var du ska börja med parametervärden.

Hur utvärderar jag om min SARIMA-modell passar bra?

Efter anpassning, kör plot_diagnostics() på resultatobjektet och kontrollera att residualerna ser ut som vitt brus utan struktur — särskilt inga toppar vid säsongsfördröjningar i ACF. Jämför konkurrerande modellspecifikationer med AIC eller BIC (lägre är bättre). För prognosnoggrannhet på undansatta data är RMSE och MAPE de vanligaste måtten.

Vad är SARIMAX och när ska jag använda det i stället för SARIMA?

SARIMAX lägger till exogena variabler — externa prediktorer — i SARIMA-ramverket. Använd det när du har mätbara faktorer som påverkar din serie utöver dess egen historik: kampanjutgifter som påverkar detaljhandelsförsäljning, temperatur som påverkar energiefterfrågan eller makroekonomiska indikatorer som påverkar kvartalsintäkter. Om dina enda data är själva serien räcker SARIMA; när du har relevanta externa drivkrafter låter SARIMAX dig ta med dem direkt.

Ämnen