Mathematik 2.2 — Zeitreihen-Analyse

Praxis: Online-Shop-Verkäufe

Szenario

Du arbeitest bei einem E-Commerce-Shop. Aufgabe: Forecast der Tagesumsätze für die nächsten 30 Tage, um Lagerbestände zu planen.

Schritt-für-Schritt

  1. Datencheck: Plot, fehlende Tage, Ausreißer (Black Friday → flag)
  2. Decomposition: additiv vs multiplikativ? Wochenmuster? Saisonal (Weihnachten)?
  3. Stationaritäts-Test: ADF + KPSS — meist nicht stationär (Trend)
  4. Differenzierung: einmal differenzieren → ADF nochmal testen
  5. Modell-Auswahl: SARIMA(1,1,1)(1,1,1)7 als Baseline (s=7 für Wochen-Saison)
  6. Auto-ARIMA falls Modellwahl unklar: pmdarima.auto_arima(...)
  7. Backtest mit Walk-Forward auf letzten 90 Tagen
  8. Vergleich: SARIMA vs Prophet vs XGBoost (mit Lag-Features)
  9. Production: Modell täglich neu trainieren, Forecast + Konfidenzintervall ausgeben

Häufige Fallen

  • Black-Friday-Spike als "Trend" modelliert → Forecast überzieht. Lösung: Dummy-Variable oder Outlier-Maskierung.
  • Pünktliche Wochen-Saison vergessen → SARIMA mit s=7 nutzen.
  • Trainingsdaten enthalten Test-Zeitraum (Datenleak).
  • Modell zu komplex → schlecht auf neue Daten generalisiert.

Code-Skelett (Python)

import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX

df = pd.read_csv('umsatz.csv', parse_dates=['datum'], index_col='datum')
df = df.asfreq('D').fillna(method='ffill')

train, test = df.iloc[:-30], df.iloc[-30:]
mod = SARIMAX(train['umsatz'], order=(1,1,1), seasonal_order=(1,1,1,7))
res = mod.fit(disp=False)
fc  = res.forecast(steps=30)
print('MAE:', (test['umsatz'] - fc).abs().mean())
Zurück zu Mathematik