Zurich Tram Flow

Verspätungsvorhersage im Zürcher Tramnetz
Datengetriebenes Analyse- und ML-Projekt | 2023–2025

Technical Insights

Technischer Deep-Dive für Data Scientists. Feature-Engineering, Modellauswahl, Evaluation im Detail.

94,4 M
Halt-Ereignisse, 4 Datenquellen
50,0 s
Baseline MAE (Stop Mean)
18,56 s
LightGBM v2 MAE (Test 2025)
−63 %
Verbesserung vs. Baseline
Agenda

Inhaltsübersicht

Die wichtigsten Technical Insights als Data-Science Deep-Dive

1Ausgangssituation
OTP-Lücke und Datenlage
2Datenstrategie
Datenquellen und Integration
Cleaning-Entscheidungen
3Baseline
Stop Mean als Benchmark
4Feature Engineering
32 Features v1 · Kaskadenindikator v2
5Modellauswahl
Warum LightGBM
v1 · v2 · Robustheits-Check
6Evaluation & Ausblick
Feature Importance
Produktionsreife & Reflexion
Handlungsempfehlungen
Ausgangssituation

Strukturelle Lücke im Netz

87 % OTP seit drei Jahren — dauerhaft unter dem VBZ-Ziel von 95 %

87 %
OTP 2023–2025 (netzweit)
Ist-Zustand 2023–2025: 87 % netzweit. Konstant unter dem VBZ-Zielwert, über alle drei Betriebsjahre ohne erkennbaren Aufwärtstrend.
95 %
VBZ-Ziel bis 2028
VBZ-Zielwert: 95 % OTP (On-Time Performance, Ankunft ≤ 2 Minuten Verspätung)
−8 %
Strukturelle Lücke
Der Rückstand ist systemisch, nicht episodisch — er taucht in jedem Jahr, auf jeder Linie auf.
56,3 s
Ø Ankunfts- verspätung
Jede achte Tramfahrt überschreitet den 2-Minuten-Schwellwert. Stabil über alle drei Betriebsjahre.
Ausgangssituation

Vorgehen in zwei Schritten

Von der Ursachenanalyse zur Vorhersage

Analyse

Identifikation der Entstehungsmuster und Einflussfaktoren. Analyse in 6 Dimensionen: Temporal · Räumlich · Netzwerk · Meteorologie · Events · Zieldefinition.

Vorhersage

Machine-Learning Modelling für die Verspätungsvorhersage. Folgen sie Mustern, die ein Modell lernen kann? — LightGBM, MAE 18,56 s (arrival_delay in Sekunden), −63 % vs. Baseline.

Datenstrategie

Die Datenstrategie

Fünf Quellen, ein reproduzierbarer Weg zum Master-Datensatz

VBZ Data Pipeline — Big Picture
Von den Rohdaten (IST-Daten, GTFS, Meteo, Events, Geo) über Filterung und Interim-Parquets bis zum gemeinsamen Merge auf vbz_master.parquet — die vollständige Herkunft und Genese der Daten, bevor die einzelnen Quellen auf den folgenden Slides im Detail folgen.
Quelle: Datenpipeline aus dem Schwesterprojekt zh-tram-data.
Datenstrategie

Master-Datensatz und GTFS-Fahrplandaten

Data Refinement als Fundament mit initialen Master-Datensatz und GTFS Fahrplandaten

VBZ IST-Daten (Primärquelle)
  • Reale Ankunfts- und Abfahrtszeiten aller Tramhalte 2023–2025
  • Granularität: Fahrt × Haltestelle × Timestamp
  • Enthält canceled = True Fahrten — bewusst behalten (relevante Extremfälle)
GTFS (Fahrplandaten)
  • Geplante Ankunfts-/Abfahrtszeiten, dwell_time, stop_sequence
  • Liniengeometrien und Haltestellen-Koordinaten (lat/lon)
  • Join-Key: trip_id × stop_id × service_date

Master-Datensatz

Der Master-Datensatz entsteht in zh-tram-data aus den VBZ IST-Daten, angereichert um GTFS, Meteo Schweiz und Event-Kalender — 94,4 Mio. Zeilen, 26 Features. Er liefert die Basis für alle Analysen in diesem Projekt.

GTFS (Fahrplandaten)

Für Karten, Geo-Visualisierungen und Tramlinien-Darstellungen wurde GTFS zusätzlich gesondert geladen — der Master-Datensatz allein liefert keine Liniengeometrien und Streckenverläufe.

Datenstrategie

Kontextquellen der Dimensionen

Für jede Analysedimension wurden die Datenquellen im Vorfeld im Master-Datensatz schon kontextuell angereichert

Meteo Schweiz
  • Stündliche Messwerte: Temperatur, Niederschlag, Windgeschwindigkeit
  • Join über Zeitstempel (hour-level) auf IST-Daten
  • Abgeleitete Flags: has_rain, has_snow, has_heavy_rain, is_hot
Event-Kalender
  • Grossveranstaltungen Zürich 2023–2025: Konzerte, Messen, Sport
  • Kategorisierung: event_type, event_size, event_weight
  • Ergebnis: 94,4 Mio. Zeilen · 26 Features · 541 MB Parquet
Network
  • Linientopologie: 16 Linien, ca. 190 Haltestellen
  • Kontext-Features: n_lines_at_stop, n_stops_line
  • Basis für linienübergreifendes Lernen (stop_sequence_pct)
Target
  • arrival_delay in Sekunden, aus IST- vs. Soll-Zeit berechnet
  • OTP-Schwellwert: Ankunft ≤ 2 Minuten Verspätung
  • canceled = True bewusst als Extremfall im Target erhalten
Datenstrategie

Datenstrategie

Cleaning-Entscheidungen und ihre Begründungen (1/2)

Annahme: Canceled-Flag
Canceled-Fahrten entfernen
Befund: Canceled-Flag
Behalten: canceled = True Zeilen sind relevante Extremfälle — Modell soll auch Ausfälle antizipieren können
Annahme: Split-Type
Shuffle-Split für mehr Trainingsdaten
Befund: Split-Type
Temporal Split: Zukunft darf Vergangenheit nicht kennen. Shuffle würde Data Leakage erzeugen
Datenstrategie

Datenstrategie

Cleaning-Entscheidungen und ihre Begründungen (2/2)

Annahme: Extremwert-Capping
arrival_delay winsorisieren (Extremwerte kappen)
Befund: Extremwert-Capping
Kein Capping: MAE belohnt Präzision auch bei Extremwerten. Winsorisierung würde Systemfehler verbergen
Annahme: OHE für Haltestellen
Alle Haltestellen gleich behandeln
Befund: OHE für Haltestellen
stop_sequence_pct als normierter Streckenfortschritt — erlaubt linienübergreifendes Lernen ohne One-Hot-Explosion
Baseline

Baseline

Stop Mean als sinnvollster naiver Benchmark

AnsatzLogikMAE (Test)
Grand MeanImmer Netz-Ø vorhersagen (56,3 s)50,6 s
Hour MeanØ nach Tagesstunde50,5 s
Line MeanØ nach Linie50,4 s
Stop MeanØ nach Haltestelle (stärkste naive Baseline)50,0 s

Stop Mean gewinnt —
weil Haltestellen strukturell unterschiedlich sind.

Grand Mean, Hour Mean und Line Mean liegen alle innerhalb 1 Sekunde beieinander — reine Mittelwert-Strategien nach Zeit oder Linie bringen keinen Vorteil. Erst die Aufschlüsselung nach Haltestelle trifft den strukturellen Unterschied im Delay-Level. Jedes Modell muss diesen Benchmark schlagen.

Feature Engineering

Feature Engineering

32 Features v1, 34 Features v2 — der entscheidende Unterschied

Temporale Features (v1)
  • hour, weekday, month, season, year
  • is_weekend, is_november, is_holiday
  • is_late_night_weekend (Kombinations-Feature)
Netz-Features (v1)
  • line_name, stop_name (native categoricals — kein One-Hot)
  • district_nr, n_lines_at_stop, n_stops_line
  • is_start_stop, is_end_stop, dwell_time
Externe Features (v1)
  • temperature, precipitation, wind_speed
  • has_rain, has_heavy_rain, has_snow, has_flood, is_hot
  • has_event, event_type, event_size, event_weight, event_weight_x_hour
Kaskaden-Features (neu in v2)
  • prev_trip_delay: Verspätung des Vorgänger-Trips an diesem Halt — echtzeit-verfügbar
  • stop_sequence_pct: normierter Streckenfortschritt (0–1) — linienübergreifend lernbar
  • Ergebnis: MAE 45,7 s → 18,56 s, −63 %
Modellauswahl

Modellauswahl und -Anpassung

Warum LightGBM (1/2)

Annahme
XGBoost als Standard-Benchmark
Befund
XGBoost: val MAE ~21,4 s bei 150 Runden auf 85M Zeilen — über 90 Minuten Trainingszeit. LightGBM: vergleichbare Qualität in ca. 18 Minuten. Klare Wahl für iteratives Arbeiten.
Annahme
Native Categoricals über One-Hot Encoding
Befund
LightGBM verarbeitet Kategorien nativ — kein One-Hot für line_name, stop_name, event_type. Weniger Speicher, schnelleres Training, keine künstliche Sparsität.
Modellauswahl

Modellauswahl und -Anpassung

Warum kein Hyperparameter-Tuning (2/2)

Annahme
Hyperparameter-Tuning vor Feature Engineering
Befund
Bewusste Entscheidung dagegen: Feature Engineering bringt mehr als Tuning auf schwachen Features. prev_trip_delay allein liefert −27s MAE. Tuning käme danach.
Annahme
Early Stopping als Tuning-Ersatz
Befund
Early Stopping mit Validation-Set steuert Modellkomplexität automatisch. Verhindert Overfitting ohne manuelle Suche nach n_estimators.
Modellauswahl

Modellauswahl und -Anpassung

v1 zu v2: der Sprung kam aus der Analyse, nicht aus dem Algorithmus

VersionNeue FeaturesMAE (Test)MBE (Test)OTP-Verbesserung
Baseline (Stop Mean)50,0 s
LightGBM v132 Features (Zeit · Wetter · Netz)45,7 s+8,3 s71,9 % → 77,5 %
LightGBM v2+prev_trip_delay, +stop_sequence_pct (34 total)18,56 s−0,69 s→ kalibriert

Der Sprung kam aus der Analyse, nicht aus dem Algorithmus.

v1 war systematisch zu optimistisch (MBE +8,3 s), v2 kalibriert auf MBE −0,69 s. Der Sprung auf 18,56 s MAE (−63 %) erklärt sich vollständig durch das neue Feature prev_trip_delay — nicht durch ein besseres Modell.

Modellauswahl

Robustheits-Check

XGBoost-Vergleich und Stabilitätsprüfung

~21,4 s
XGBoost val MAE (150 Runden)
90+ Min
XGBoost Trainingszeit auf 85M Zeilen
18 Min
LightGBM v2 Trainingszeit
18,56 s
LightGBM v2 Test MAE (2025)

Eine Workflow-Entscheidung, keine Qualitätskompromittierung.

XGBoost erreicht auf dem Validation-Set vergleichbare Qualität, braucht aber 5× mehr Trainingszeit. Für iteratives Feature Engineering über mehrere Wochen ist LightGBM die klar überlegene Wahl.

Feature Importance

Feature Importance

prev_trip_delay und stop_sequence_pct dominieren
Temporale und Wetter-Features zeigen konsistente, aber schwächere Beiträge

Feature Importance LightGBM v2
Die Kaskadenanalyse (r ≥ 0,85 netzweit) hat die Feature-Wichtigkeit korrekt antizipiert. Das Modell bestätigt: Das Signal steckt in den Daten, nicht im Algorithmus.
Evaluation

Produktionsreife und Reflexion

Was produktionsreif ist (1/2)

Annahme
Produktionsreif
Befund
LightGBM v2: MAE 18,56 s, MBE −0,69 s, trainiert auf 41M Fahrten, getestet auf vollständigem Jahr 2025 (~29M). Streamlit-Dashboard mit Live-Predictor lauffähig. Code vollständig reproduzierbar.
Annahme
Offen: Hyperparameter-Tuning
Befund
Wurde bewusst zurückgestellt. Nächster Schritt nach Feature Engineering. Potenziell weitere −2 bis −4s MAE erreichbar.
Evaluation

Produktionsreife und Reflexion

Was offen bleibt (2/2)

Annahme
Offen: v2 im Streamlit-Predictor
Befund
Dashboard nutzt aktuell v1 (Pre-Trip-Use-Case ohne prev_trip_delay). v2 erfordert Live-Signal aus VBZ-Betriebssystem — setzt Daten-Integration voraus.
Annahme
Offen: Ensemble / Stacking
Befund
Nicht evaluiert. LightGBM v2 allein liefert bereits −63 % vs. Baseline. Ensemble-Ansätze wären nächste Iteration.
Empfehlungen

Konkrete Handlungsempfehlungen

Jede Empfehlung ist direkt durch einen Befund aus der Analyse gedeckt

R1 · Fahrplan-Design
Standzeit-Puffer L11 an Koppelstellen
  • dwell_time = 0 s an 71,3 % aller Haltestellen ist das Root-Cause-Feature
  • +10 s Puffer an 3–5 kritischen Koppelstellen unterbricht den Kaskadeneffekt
R2 · Real-Time Dispatch
prev_trip_delay als Echtzeit-Signal im Dispatching
  • prev_trip_delay ist das stärkste Feature — und in Echtzeit aus VBZ-System verfügbar
  • MAE 18,56 s auf Test 2025: Produktionsreife bereits nachgewiesen
R3 · Kapazitätsplanung
Taktanpassung 20–22h auf L11 und L8
  • Peak 21h: 67,9 s — nicht der Morgen (7h: 48,9 s unter Netzschnitt)
  • Spitzenlastmomente sind kalendarisch planbar
R4 · Monitoring
Stadtkreise 11 und 12 als strukturelle Prioritätszonen
  • Kreis 11: OTP 83 %, Ø 68,3 s — strukturell benachteiligt, nicht situativ
  • district_nr gehört zu den Top-Features im Modell
Weitere Potenziale

Was noch zu erforschen ist

Dashboard-Exploration offenbarte 7 systematische Forschungsmöglichkeiten

Warum sind Fahrtrichtungen asymmetrisch?
Welche Linien dämpfen Delays, welche verstärken sie?

Beim interaktiven Erkunden der 16 Linien entstehen neue Fragen. Diese Ad-hoc-Entdeckungen sind Signale für strukturelle Potenziale und wurden bereits in 7 Opportunities formuliert.

3 von 7 der Opportunities

OP-1
  • Direction-Asymmetrie (~10 s Delta zwischen Richtung A/B)
OP-2
  • Stop-Variabilität (Puffer-Stops vs. zeitkritische Stops)
OP-7
  • Kaskaden-Verstärker vs. -Dämpfer pro Linie

Zurich Tram Flow

Verspätungsvorhersage im Zürcher Tramnetz
Datengetriebenes Analyse- und ML-Projekt | 2023–2025

Was vorhersagbar ist, ist steuerbar.

Dieses Projekt zeigt: Datenanalyse ist kein akademisches Artefakt, sondern das Fundament für operative Entscheidungen. Das interaktive Dashboard macht diese Erkenntnisse direkt steuerbar — Szenarien lassen sich simulieren, um Entscheidungen fundiert zu begründen.

Linien erkunden · Linien vergleichen · Verspätungen vorhersagen