Wie die Idee überhaupt entstanden ist
Die App ist nicht aus einem klassischen Tech-Projekt entstanden. Sie kommt aus einer Situation, die vermutlich viele hier kennen.
Meine Tochter und ich standen eines Tages sehr lange an der Buchschlager Schranke. Wir wollten nur kurz über die Gleise — und warteten am Ende fast 40 Minuten.
Während wir dort standen, fing sie an, die Bahnfahrpläne auf dem Handy anzuschauen — und versuchte herauszufinden, wann die nächsten Züge kommen und wann die Schranke wohl wieder aufgehen müsste.
Eigentlich müsste sich das doch berechnen lassen.
Aus dieser Idee ist Schritt für Schritt die App entstanden — die ganze Geschichte gibt es auch in der Offenbacher Post und in der hessenschau. Relativ schnell wurde aber klar: Fahrplandaten allein reichen nicht aus. Zwischen Theorie und Realität liegt bei einer Bahnschranke eine ganze Menge Chaos.
Und genau hier kommt die Community ins Spiel.
Was passiert, wenn ihr abstimmt?
Wenn ihr auf „Stimmt“ oder „Stimmt nicht“ klickt, speichert die App deutlich mehr als nur „richtig“ oder „falsch“. Im Hintergrund wird festgehalten: welcher Zug gerade als Ursache angezeigt wurde, ob die App offen oder geschlossen angezeigt hat, der exakte Zeitpunkt, die aktuelle Verspätung des Zuges, und ob zwischen zwei Schließungen vielleicht eine kurze Lücke entstanden ist.
Diese Daten verbinden zwei Dinge: die Prognose der App und die tatsächliche Realität an der Schranke. Aus dieser Differenz lernt das System.
Die App zeigt noch geschlossen, aber die Schranke ist schon offen. Die geschätzte Nachlaufzeit war zu lang — das System korrigiert sich nach unten.
Die App zeigt noch offen, aber die Schranke ist schon zu. Die Vorlaufzeit war zu kurz — das System korrigiert sich nach oben.
Passt. Je öfter das passiert, desto stabiler wird die Prognose für genau diese Tageszeit und diesen Zugtyp.
Die App lernt zeitabhängig. Wer regelmäßig morgens oder abends zur gleichen Zeit votet, verbessert vor allem die Prognose für genau dieses Zeitfenster.
Züge, die hier gar nicht im Fahrplan stehen
Viele Züge, die die Schranke schließen, tauchen im Buchschlager Fahrplan gar nicht auf: ICE, IC, FLX, RB68, RB82. Diese Züge halten hier nicht — und existieren im lokalen Fahrplan schlicht nicht. Trotzdem fahren sie natürlich durch und schließen die Schranke.
Direkt im Fahrplan von Buchschlag — beste Datenlage
Berechnet aus 5 Nachbarstationen — gute Schätzung
Nirgends im öffentlichen Fahrplan — nur durch eure Votes erkennbar
Wenn die App „geschlossen“ sagt — aber die Schranke offen ist
Nicht jeder Zug aus Frankfurt Richtung Süden fährt tatsächlich über Buchschlag. Viele Durchfahrer (ICE, IC, FLX) nehmen die Riedbahn über Flughafen und Groß-Gerau nach Mannheim — komplett an Buchschlag vorbei. Im Fahrplan sehen diese Züge zunächst identisch aus.
Erst eure Votes haben gezeigt, dass hier etwas nicht stimmt. Wenn die App „geschlossen“ anzeigt, die Schranke aber offen bleibt und mehrere Nutzer „Stimmt nicht“ melden, wird klar: Der prognostizierte Zug fährt hier gar nicht vorbei.
Heute prüft die App gezielt den Routenverlauf eines Zuges:
Stationen wie Langen, Buchschlag, Egelsbach
Main-Neckar-Bahn — relevant für die Prognose
Stationen wie Flughafen, Zeppelinheim, Groß-Gerau
Riedbahn — Geisterzug — wird herausgefiltert
Wenn Timing plötzlich nicht mehr stimmt
Mehrere „Stimmt nicht“-Meldungen zur gleichen Tageszeit zeigten, dass die Schranke oft früher öffnet, als die App erwartet hatte.
Der Grund war eine interne Begrenzung im System. Die Nachlaufzeit — also wie lange die Schranke nach einem Zug geschlossen bleibt — war technisch gedeckelt. Eure Meldungen haben gezeigt, dass diese Grenze zu falschen Prognosen führte.
Also wurde sie entfernt. Seitdem kann sich das System deutlich freier an die realen Öffnungszeiten anpassen.
Wenn Votes echte Bugs sichtbar machen
Votes verbessern nicht nur die Prognose. Manchmal decken sie auch echte Software-Bugs auf.
Phantom-Schließungen
Die App zeigte „geschlossen“, obwohl der auslösende Zug ausgefallen war. Das Schließungsfenster war bereits aktiviert — selbst wenn der Zug gestrichen wurde, blieb die Schranke im Modell geschlossen. Durch Community-Meldungen entdeckt und korrigiert.
Phantom-Verlängerungen
Wenn ein verspäteter Zug ein Schließungsfenster verlängerte und danach ausfiel, blieb das Fenster manchmal zu lang bestehen. Auch dieses Problem wurde über reale Beobachtungen sichtbar.
ML-Modelle im Hintergrund
Ein Teil der Prognose basiert inzwischen tatsächlich auf Machine-Learning-Modellen.
Modell 1 — Zeit-Korrektur
Regressionsmodell korrigiert Vor- und Nachlaufzeiten basierend auf Zugtyp, Tageszeit, Verspätung, Zugdichte und Fahrtrichtung.
Modell 2 — Lücken-Detektion
Schätzt, ob sich eine kurze Öffnungslücke zwischen zwei Zügen überhaupt materialisiert.
Wie das Modell Schranken-Schließungen vorhersagt
Das Modell nimmt den Fahrplan + Live-Verspätungen, berechnet wann jeder Zug die Schranke auslöst, und entscheidet dann welche Schließungen sich überlappen und verschmelzen — und wo es eine echte Lücke gibt, in der man queren kann.
Normaler Haltezug (S6, RB61)
Zug fährt in den Bahnhof ein — Schranke schließt ca. 2 Min. vor Abfahrt, öffnet ca. 45s nach Abfahrt. Einfach und vorhersagbar.
Durchfahrer (z.B. ICE, FlixTrain, RB68)
Express rast ohne Halt durch — Schranke schließt ca. 3 Min. vor Durchfahrt, öffnet ca. 75s danach. Längere Schließung.
Zwei Haltezüge, gleiche Richtung
z.B. S6 dann RB61, 2 Min. später — Schranke bleibt durchgehend geschlossen. Das Modell verschmilzt zu einer langen Schließung.
Gegenrichtung, kurz hintereinander
z.B. S6 Nord, dann S6 Süd 3 Min. später — Schranke geht kurz dazwischen auf (ca. 45s) für den Fahrstraßenwechsel.
Haltezug dann Durchfahrer
S6 fährt ab, dann kommt Durchfahrer — zwei getrennte Schließungen mit einer Lücke dazwischen.
Gegenrichtung dann Durchfahrer
Fahrstraßenwechsel braucht Extrazeit (ca. 25s). Das Modell berücksichtigt das bei der Lückenberechnung.
Verspätete Züge
DB meldet Verspätung — das Modell verschiebt das gesamte Schließungsfenster entsprechend.
Sliding Hold — keine Abfahrtbestätigung
Zug hätte abfahren sollen, aber keine Bestätigung — Schließung wird in Echtzeit nach vorne geschoben.
Warum manche Lücken nicht eintreten
Zwischen zwei Schließungen gibt es manchmal eine kurze Öffnung — eine Brief Gap. Sie entsteht, wenn das Stellwerk die Fahrstraße umstellen muss, zum Beispiel von Nord auf Süd. Je nach Zugkombination dauert das unterschiedlich lang: 75s bei zwei Durchfahrern, 45s bei zwei Haltezügen, oder nur 25s wenn ein Haltezug von einem Durchfahrer gefolgt wird.
Das Modell berechnet diese Lücken — aber nicht jede berechnete Lücke entsteht auch in der Realität. Zwei Gründe machen die Vorhersage schwierig:
Deshalb zeigt die App eine Lücke nur an, wenn sie mindestens 60–180 Sekunden lang ist. Dieser Schwellenwert wird laufend über eure Votes kalibriert: Werden zu viele Lücken gemeldet, die nicht eintreten, steigt er automatisch. So lernt das System über die Zeit, welche Lücken zuverlässig genug sind, um sie anzuzeigen.
Wie frisch sind die Daten wirklich?
Alle Verspätungs- und Statusdaten stammen aus dem IRIS-System der Deutschen Bahn. Dieses System liefert Updates in diskreten Intervallen — nicht als kontinuierlichen Datenstrom.
In der Praxis bedeutet das: Ein Zug kann um 18:12 noch mit +5 Minuten Verspätung gemeldet sein — und zwei Minuten später plötzlich auf +18 Minuten springen. Dazwischen arbeitet die Prognose mit dem letzten bekannten Wert.
Deshalb kann es vorkommen, dass sich eine Schließung in der App plötzlich verschiebt — das Modell hat neue IRIS-Daten erhalten und passt die Prognose in Echtzeit an. Je größer der Verspätungssprung, desto deutlicher die Verschiebung.
Die größte Grenze: Güterzüge
Ein Thema bleibt besonders schwierig: Güterzüge. Sie tauchen in keiner öffentlichen Fahrplan-API auf. Wenn ein Güterzug die Schranke schließt, gibt es keine Datenquelle, die das vorher ankündigt.
Das System sammelt alle „Stimmt nicht“-Votes, bei denen die App keinen Zug als Ursache kennt. Daraus baut es eine Heatmap pro Wochentag und Stunde auf — ein 7×24-Raster, das zeigt, wann Güterzüge regelmäßig fahren.
Je mehr Daten gesammelt werden, desto klarer werden die Muster. Nach 90 Tagen erkennt das System zum Beispiel, dass mittwochs gegen 18 Uhr regelmäßig ein Güterzug fährt — und baut diese Schließung dann automatisch in die Prognose ein, auch ohne Fahrplandaten.
Woran gerade gearbeitet wird
Im Hintergrund laufen aktuell mehrere Experimente parallel — unter anderem ein Vergleich verschiedener Kalibrierungsmethoden, um herauszufinden, welche Methode bei welchem Zugtyp und welcher Tageszeit am besten funktioniert.
Nicht alles lässt sich allein über Votes abbilden. Wenn euch etwas auffällt — ein Zug der dauerhaft fehlt, ein wiederkehrender Fehler, oder eine Idee — gibt es dafür jetzt einen direkten Weg: