Jeden Dezember füllen Händler ihre Lager für das Weihnachtsgeschäft. Jeden Sommer rüsten Stromnetze für Klimaanlagen-Spitzen. Diese Muster wiederholen sich Jahr für Jahr – und wenn deine Zeitreihenprognose sie ignoriert, verschenkst du Genauigkeit.
Seasonal AutoRegressive Integrated Moving Average-Modelle (kurz: SARIMA) erweitern das weit verbreitete ARIMA-Framework, um wiederkehrende saisonale Muster neben regulären Trends zu erfassen. In diesem Artikel erfährst du, was SARIMA ist, wie die Bausteine funktionieren, wann du es ARIMA vorziehen solltest und wie du in Python Schritt für Schritt ein Modell aufbaust.
Was ist SARIMA?
SARIMA ist ein Zeitreihenprognosemodell, das sowohl nicht-saisonale als auch saisonale Muster in Daten abbildet. Es baut direkt auf ARIMA auf – wenn du also bereits mit ARIMA gearbeitet hast, wirst du die meisten Mechanismen wiedererkennen. Der entscheidende Unterschied: SARIMA ergänzt eine zweite Ebene von Parametern, die speziell für Verhalten ausgelegt ist, das sich in festen Intervallen wiederholt, etwa monatliche, quartalsweise oder wöchentliche Zyklen.
Formal schreibt man ein SARIMA-Modell als SARIMA(p, d, q)(P, D, Q)[S]. Das erste Parameterset (p, d, q) bildet die nicht-saisonale Struktur ab, identisch zu klassischem ARIMA. Das zweite Set (P, D, Q)[S] erfasst die Saisonalität, wobei S die Länge des saisonalen Zyklus ist. Für monatliche Daten mit jährlicher Saisonalität gilt S = 12, für Quartalsdaten S = 4.
Zentrale Komponenten von SARIMA
Die sieben SARIMA-Parameter wirken anfangs viel. Am besten denkst du in zwei Gruppen: das vertraute ARIMA-Trio (p, d, q) und die saisonalen Gegenstücke (P, D, Q, S), die dasselbe auf saisonaler Ebene leisten. Jeder saisonale Parameter macht genau das, was sein nicht-saisonales Pendant tut – nur über saisonale Abstände statt benachbarte Zeitpunkte hinweg.
Autoregressiver Teil (AR)
Die AR-Komponente nutzt vergangene Werte der Serie, um zukünftige vorherzusagen. Der Parameter p legt fest, wie viele verzögerte Werte einfließen. Ist p = 2, verwendet das Modell die zwei vorherigen Zeitpunkte als Prädiktoren für den aktuellen Wert.
Auf der saisonalen Seite macht P dasselbe, aber mit saisonalen Lags. Wenn P = 1 und S = 12, schaut das Modell auf den Wert von vor 12 Perioden, also derselbe Monat im Vorjahr. So werden Jahr-zu-Jahr-Muster direkt erfasst.
Integrierter Teil (I)
Der Parameter d steuert, wie oft die Serie differenziert wird, um Trends zu entfernen und Stationarität herzustellen. Differenzieren bedeutet, von jeder Beobachtung die vorherige abzuziehen – ein linearer Trend wird dadurch eliminiert. Bei d = 1 nimmst du erste Differenzen, bei d = 2 differenzierst du erneut die bereits differenzierte Serie.
Saisonales Differenzieren funktioniert genauso, nur bei saisonalen Lags. Der Parameter D gibt an, wie viele saisonale Differenzen anzuwenden sind. Mit D = 1 und S = 12 ziehst du von jeder Beobachtung den Wert von vor 12 Perioden ab. Die Kombination d = 1 und D = 1 ist gängig, wenn eine Serie sowohl einen allgemeinen Aufwärtstrend als auch ein wiederkehrendes saisonales Muster aufweist.
Gleitender Durchschnitt (MA)
Anders als die AR-Komponente, die vergangene Werte betrachtet, modelliert die MA-Komponente die Beziehung zwischen der aktuellen Beobachtung und Residualfehlern aus früheren Vorhersagen. Der Parameter q legt fest, wie viele verzögerte Fehlerterme berücksichtigt werden. Ist q = 1, nutzt das Modell den Prognosefehler des vorherigen Schritts zur Anpassung der aktuellen Vorhersage.
Das saisonale Gegenstück Q wendet diese Logik auf saisonale Lags an. Mit Q = 1 und S = 12 berücksichtigt das Modell den Prognosefehler von vor 12 Perioden. Das ist relevant, wenn saisonale Schocks – etwa ein ungewöhnlich heißer Sommer mit hoher Energienachfrage – tendenziell im gleichen Zeitraum des Folgejahres nachwirken.
Saisonkomponente (S)
Der Parameter S definiert die Länge des saisonalen Zyklus und verbindet die drei saisonalen Parameter (P, D, Q). S muss passen: Bei monatlichen Daten mit Jahresmuster ist S = 12. Wöchentliche Daten mit jährlichem Zyklus ergeben S ungefähr 52.
Hier wird es gelegentlich knifflig: Ein Jahr hat nicht exakt 52 Wochen, sondern näher an 52,18. Für die meisten praktischen Zwecke reicht die Rundung auf S = 52. Manche Datensätze haben jedoch mehrere Saisonalitäten: Der tägliche Stromverbrauch zeigt oft sowohl einen Wochenzyklus (S = 7) als auch einen Jahreszyklus (S = 365). Standard-SARIMA behandelt genau eine Saisonalität, mehrere erfordern fortgeschrittene Methoden wie TBATS oder Facebook Prophet.
Wenn S nicht offensichtlich ist, hilft die Zeitreihendekomposition. Die Zerlegung in Trend-, Saison- und Restkomponente macht die dominierende Wiederholungsperiode visuell sichtbar. Außerdem kannst du Autokorrelations-Plots auf regelmäßige Spitzen prüfen.
ARIMA vs. SARIMA: Wo liegt der Unterschied?
Wahrscheinlich fragst du dich bereits: Wann solltest du SARIMA statt des einfacheren ARIMA verwenden?
Die Kurzfassung: Nutze ARIMA, wenn deine Daten kein relevantes saisonales Muster haben – und SARIMA, wenn sie eines haben.
ARIMA modelliert drei Dinge: Autokorrelation in der Serie selbst (AR), die Anzahl der Differenzen bis zur Stationarität (I) und den Nachhall früherer Prognosefehler auf den aktuellen Wert (MA). Trends, Zyklen und Rauschen werden gut abgedeckt. Was ARIMA nicht kann: Muster abbilden, die sich mit fester saisonaler Frequenz wiederholen. Diese landen als unerklärte Varianz in den Residuen.
SARIMA ergänzt genau diese Fähigkeit. Wenn in deinen Daten klare saisonale Spitzen und Täler sichtbar sind, zwingt ein reines ARIMA-Modell diese Muster in die Residuen – mit schlechteren Prognosen und Residuen, die kein Weißes Rauschen sind. Ein SARIMA-Modell erfasst sie direkt.
Pragmatische Regel: Visualisiere deine Daten und halte Ausschau nach sich wiederholenden Mustern in festen Abständen. Wenn du sie siehst – Weihnachtsspitzen im Handel, Energieschübe im Winter, quartalsweise Gewinnmuster – greif zu SARIMA. Ist die Serie unregelmäßig oder trendgetrieben ohne regelmäßigen Zyklus, ist ARIMA einfacher und ausreichend.
Unser ARIMA Models in Python Kurs deckt beide Frameworks ab – mit praktischen Übungen, die dir ein Gefühl dafür geben, wann welches passt.
So baust du ein SARIMA-Modell in Python
Der Aufbau eines SARIMA-Modells folgt einer klaren Abfolge: Daten sammeln, Stationarität prüfen, Parameter identifizieren, Modell schätzen, Diagnostik durchführen und prognostizieren. So geht jeder Schritt in der Praxis – mit Pythons statsmodels-Bibliothek.
Datensammlung
Damit ein Modell Saisonalität erfasst, brauchst du genügend Historie, um das Muster mindestens zweimal, idealerweise über mehrere Zyklen zu beobachten. Monatliche Einzelhandelsumsätze, Temperaturreihen, Energieverbrauchswerte oder Passagierzahlen sind Klassiker. Öffentliche Quellen wie Federal Reserve Economic Data (FRED), das US Census Bureau oder Kaggle sind gute Startpunkte.
Das Standard-Lehrdatenset für diesen Workflow sind Flugpassagierzahlen: monatliche Daten von 1949 bis 1960 mit klarem Aufwärtstrend und deutlicher jährlicher Saisonalität. Es ist über statsmodels via get_rdataset() aus der Rdatasets-Sammlung verfügbar. Lerne den Workflow zunächst an diesem Datensatz, bevor du ihn auf deine eigenen Daten überträgst.
Datenvorbereitung
Bevor du ein SARIMA-Modell fitten kannst, brauchst du eine stationäre Serie, also eine, deren Mittelwert und Varianz sich über die Zeit nicht ändern. Der Augmented Dickey-Fuller-Test (ADF) prüft das formal: Ein p-Wert unter 0,05 deutet auf Stationarität hin.
Wenn nicht, hilft Differenzieren. Wende reguläres Differenzieren (d = 1) gegen Trend an, saisonales Differenzieren (D = 1 bei Lag S) gegen saisonale Nichtstationarität – oder beides. Fehlende Werte musst du vorher behandeln. Forward Fill oder Interpolation sind bei Zeitreihen üblich, da das Löschen von Zeilen die zeitliche Struktur zerstört.
Modellidentifikation
Mit einer stationären Serie nutzt du die Autokorrelationsfunktion (ACF) und partielle Autokorrelationsfunktion (PACF), um die Modellparameter zu bestimmen. Darauf solltest du achten:
- ACF zeigt die Korrelation zwischen Serie und ihren Lags. Ein abrupter Abfall nach Lag q deutet auf die MA-Ordnung hin. Spitzen bei saisonalen Lags (12, 24, 36 bei monatlichen Daten) informieren über Q.
- PACF zeigt partielle Korrelationen ohne Zwischenlagauswirkungen. Ein abrupter Abfall nach Lag p deutet auf die AR-Ordnung hin. Saisonale Spitzen informieren über P.
In der Praxis liefern die Plots Kandidatenwerte, und du vergleichst einige Modelle über Informationskriterien (mehr dazu in der Diagnostik). Wenn du die Suche automatisieren willst, führt auto_arima() aus dem pmdarima-Paket eine Gittersuche über Parameterkombinationen durch und wählt das bestpassende Modell aus.
Parameterschätzung
Sobald du Kandidatenwerte hast, schätzt statsmodels die Parameter per Maximum-Likelihood (MLE) und findet die Koeffizienten, die die beobachteten Daten unter dem Modell am wahrscheinlichsten machen. Die SARIMA-Schätzung ist rechenintensiver als bei ARIMA, da der Optimierer nicht-saisonale und saisonale Komponenten gleichzeitig fitten muss.
Mitunter konvergiert der Fit zu einem lokalen statt dem globalen Optimum. Wenn die Ergebnisse merkwürdig wirken, lohnt es sich, mit Startwerten oder Parameterkombinationen zu variieren.
Modellfit
So fitst du ein SARIMA-Modell in Python mit dem Airline-Passagierdatensatz:
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())
Das Argument order nimmt (p, d, q) für den nicht-saisonalen Teil; seasonal_order nimmt (P, D, Q, S). enforce_stationarity=False und enforce_invertibility=False geben dem Optimierer mehr Spielraum – das hilft auf Echtdaten oft bei der Konvergenz.
Modellstatistiken und Diagnostik
Nach dem Fit rufst du die integrierten Diagnoseplots mit sarima_result.plot_diagnostics() auf. Darauf solltest du achten:
- Standardisierte Residuen: Sollten wie Weißes Rauschen ohne erkennbare Muster aussehen.
- Histogramm der Residuen: Sollte ungefähr normalverteilt sein.
- Normal Q-Q-Plot: Punkte sollten nahe der Diagonalen liegen.
- Korrelogramm (ACF der Residuen): Keine signifikanten Spitzen – sie würden auf unerklärte Autokorrelation hinweisen.
Achte besonders auf saisonale Lags im Korrelogramm. Spitzen bei 12, 24 usw. deuten darauf hin, dass die Saisonkomponente noch nicht vollständig erfasst ist. Vergleiche Spezifikationen über AIC (Akaike Information Criterion) und BIC (Bayesian Information Criterion): Niedrigere Werte sind besser, wobei BIC Komplexität stärker bestraft.
Forecasting
Mit validiertem Modell ist das Erzeugen von Prognosen unkompliziert. Teile deine Daten in Trainings- und Testmenge, um die Prognosegüte ehrlich zu bewerten:
# 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()
Die Methode get_forecast() liefert Punktschätzungen samt Konfidenzintervallen, die mit zunehmendem Horizont breiter werden. Diese Verbreiterung ist kein Fehler, sondern die ehrliche Abbildung von Unsicherheit. Bewerte die Genauigkeit mit RMSE (Root Mean Squared Error) oder MAPE (Mean Absolute Percentage Error) auf dem zurückgehaltenen Testset.
Praxisanwendungen von SARIMA
So viele reale Signale sind saisonal, dass SARIMA in keinem Zeitreihen-Toolkit fehlen darf. Einige Beispiele aus Branchen:
- Einzelhandel: Prognose monatlicher Verkaufsvolumina für Bestandsplanung – insbesondere um Feiertage herum, bei denen Nachfragespitzen vorhersehbar sind, aber in der Höhe variieren.
- Energieverbrauch: Prognose von Strom- und Gasnachfrage, die täglichen und jährlichen Zyklen folgt – getrieben von Temperatur und Aktivitätsmustern.
- Finanzen: Modellierung von Quartalsgewinnen oder Handelsvolumina, die sich entlang von Fiskalkalendern wiederholen.
- Wetterprognosen: Projektion von Temperatur, Niederschlag und anderen Klimavariablen mit starken Jahreszyklen.
In all diesen Fällen ist die wiederkehrende Struktur das Signal – und SARIMA ist dafür gemacht, sie zu erfassen.
Einschränkungen von SARIMA
Zu wissen, wo ein Werkzeug glänzt, ist nur die halbe Miete. SARIMA ist ein starkes Fundament für saisonale Zeitreihen – seine Grenzen zu kennen, unterscheidet jedoch gute Modellierer von blinder Anwendung.
Es behandelt genau eine Saisonalität. Haben deine Daten mehrere Saisonalitäten – etwa tägliche, wöchentliche und jährliche Muster übereinander –, kann SARIMA nicht alle gleichzeitig modellieren. Methoden wie TBATS, Prophet oder LSTM-Netze gehen mit mehreren saisonalen Frequenzen natürlicher um.
SARIMA setzt zudem Linearität voraus. Es modelliert lineare Beziehungen zwischen früheren Werten, früheren Fehlern und zukünftigen Beobachtungen. Nichtlineare Dynamiken – häufig in Finanzzeitreihen oder chaotischen Systemen – erfordern andere Werkzeuge. Und wie ARIMA stützt sich SARIMA ausschließlich auf die Historie der Serie. Wenn externe Treiber deine Prognosen beeinflussen – Promotions, Wetterereignisse, Konjunkturindikatoren –, schau dir SARIMAX an: Es ergänzt exogene Variablen innerhalb des SARIMA-Rahmens.
Schließlich kann die Parameterwahl wirklich anspruchsvoll sein. Sieben Stellschrauben bedeuten einen großen Suchraum, und das Fitten kann bei langen Reihen langsam sein. auto_arima() aus pmdarima automatisiert viel davon. Eine Abkürzung am Verständnis der Parameter gibt es trotzdem nicht – deshalb haben wir die Komponenten vor dem Code besprochen.
Fazit
Ich fand schon immer, dass SARIMA in Einsteigerkursen zur Prognose zu kurz kommt. Es wird als „ARIMA, nur mit Saisonalität“ gelehrt – das klingt nach einer kleinen Erweiterung. Das ist es nicht. Die saisonalen Parameter sind nicht angeflanscht; sie leisten strukturelle Arbeit und erfassen eine Verhaltensschicht deiner Daten, an die ARIMA schlicht nicht herankommt.
Der praktische Aha-Moment bei SARIMA ist, dass nicht-saisonale und saisonale Komponenten keine separaten Modelle sind, die nebeneinander laufen. Sie interagieren. AR- und MA-Terme arbeiten mit ihren saisonalen Zwillingen zusammen – jede Ebene bedient eine andere Zeitskala der Autokorrelation. Wenn das sitzt, fühlt sich das Lesen von ACF- und PACF-Plots nicht mehr wie Mustererkennung an, sondern wie echtes Datenverständnis.
Wenn du mit monatlichen, quartalsweisen oder anderen regelmäßig getakteten Daten arbeitest, ist SARIMA der richtige Startpunkt – nicht weil es immer die Endlösung ist, sondern weil es dich zwingt, die Struktur deiner Serie klar zu denken. Darauf aufbauend ergänzt SARIMAX externe Prädiktoren, und Methoden wie TBATS oder Prophet meistern die unordentlicheren Multi-Saison-Fälle. Unser Time Series Forecasting Tutorial und der Kurs ARIMA Models in Python sind gute nächste Schritte.
SARIMA-FAQs
Wofür steht SARIMA?
SARIMA steht für Seasonal AutoRegressive Integrated Moving Average. Es erweitert das Standard-ARIMA-Modell um saisonale Parameter – (P, D, Q) und die saisonale Periode S – die wiederkehrende Muster in Zeitreihendaten erfassen, etwa monatliche oder quartalsweise Zyklen.
Was ist der Unterschied zwischen ARIMA und SARIMA?
ARIMA modelliert nicht-saisonale Muster: Trend, Autokorrelation und Effekte des gleitenden Durchschnitts. SARIMA ergänzt eine zweite Parameter-Ebene (P, D, Q, S), die dieselben Effekte auf saisonalen Lags abbildet. Zeigen deine Daten wiederkehrende Muster in festen Intervallen – etwa höhere Verkäufe jeden Dezember –, erfasst SARIMA diese direkt, während ARIMA sie als unerklärte Residualvarianz übrig lässt.
Wie wähle ich die richtigen SARIMA-Parameter?
Prüfe zuerst, ob deine Serie stationär ist – mit dem Augmented-Dickey-Fuller-Test. Danach inspizierst du ACF- und PACF-Plots: Die nicht-saisonalen AR- (p) und MA-Ordnungen (q) leitest du aus den Abbruchmustern bei nicht-saisonalen Lags ab, während die saisonalen Ordnungen P und Q aus Spitzen bei saisonalen Lags hervorgehen. Du kannst auch auto_arima() aus dem Paket pmdarima nutzen, um Parameterkombinationen automatisch zu durchsuchen und per AIC oder BIC das beste Modell zu wählen.
Wie bestimme ich die saisonale Periode S für mein SARIMA-Modell?
Die saisonale Periode S spiegelt die Wiederholrate des Musters wider. Bei monatlichen Daten mit jährlicher Saisonalität gilt S = 12, bei Quartalsdaten S = 4. Für wöchentliche Daten ist S = 52 (bzw. gerundet aus 52,18). Ist die Periode nicht offensichtlich, nutze eine Zeitreihendekomposition oder prüfe den ACF-Plot auf regelmäßig verteilte Spitzen – diese zeigen die dominante saisonale Frequenz.
Kann SARIMA mehrere saisonale Perioden abbilden?
Standard-SARIMA behandelt eine Saisonalität zurzeit. Haben deine Daten mehrere überlagerte Saisonalitäten – wie tägliche Stromnachfrage mit Wochen- und Jahreszyklus –, brauchst du Alternativen wie TBATS, Facebook Prophet oder LSTM-Netze, die mehrere überlappende saisonale Strukturen gleichzeitig modellieren können.
Welche Python-Bibliothek eignet sich am besten für SARIMA-Modelle?
Pythons statsmodels-Bibliothek ist der Standard. Sie bietet SARIMAX() (flexibel genug, um SARIMA-Modelle auch ohne exogene Variablen zu fitten). Für die automatisierte Parametersuche ist auto_arima() aus der pmdarima-Bibliothek eine sinnvolle Ergänzung, wenn du keinen klaren Startpunkt für Parameterwerte hast.
Wie bewerte ich, ob mein SARIMA-Modell gut passt?
Nach dem Fit rufst du plot_diagnostics() auf dem Ergebnisobjekt auf und prüfst, ob die Residuen wie Weißes Rauschen ohne Struktur aussehen – insbesondere ohne Spitzen bei saisonalen Lags in der ACF. Vergleiche konkurrierende Modellspezifikationen mit AIC oder BIC (niedriger ist besser). Für die Prognosegüte auf zurückgehaltenen Daten sind RMSE und MAPE die gängigsten Kennzahlen.
Was ist SARIMAX und wann sollte ich es statt SARIMA nutzen?
SARIMAX ergänzt exogene Variablen – also externe Prädiktoren – im SARIMA-Rahmen. Verwende es, wenn messbare Einflussfaktoren über die Serienhistorie hinaus wirken: Promotionsbudgets auf den Einzelhandel, Temperatur auf Energienachfrage oder Makroindikatoren auf Quartalsumsatz. Hast du nur die Serie selbst, reicht SARIMA; mit relevanten externen Treibern erlaubt dir SARIMAX, sie direkt zu integrieren.


