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
- Datencheck: Plot, fehlende Tage, Ausreißer (Black Friday → flag)
- Decomposition: additiv vs multiplikativ? Wochenmuster? Saisonal (Weihnachten)?
- Stationaritäts-Test: ADF + KPSS — meist nicht stationär (Trend)
- Differenzierung: einmal differenzieren → ADF nochmal testen
- Modell-Auswahl: SARIMA(1,1,1)(1,1,1)7 als Baseline (s=7 für Wochen-Saison)
- Auto-ARIMA falls Modellwahl unklar:
pmdarima.auto_arima(...) - Backtest mit Walk-Forward auf letzten 90 Tagen
- Vergleich: SARIMA vs Prophet vs XGBoost (mit Lag-Features)
- 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