Zum InhaltBePünktli

Diese Fassung ist aus dem englischen Quelltext übersetzt und noch nicht redaktionell geprüft. Die Zahlen stammen unverändert aus derselben Auswertung.

Wie BePünktli die Pünktlichkeit misst


Jede Zahl auf dieser Website stammt aus zwei öffentlichen Datensätzen, die nie dafür ausgelegt waren, miteinander verknüpft zu werden. Diese Seite erklärt, was sie enthalten, wie wir sie verbinden, wie oft diese Verbindung scheitert und was wir deshalb nicht behaupten. Sie ist für Menschen geschrieben, die das System nicht gebaut haben.


1. Was eine Messung ist

Die Fahrt eines Fahrzeugs ist eine Abfolge von Halten. An jeder Haltestelle verspricht der Fahrplan eine Ankunfts- und eine Abfahrtszeit, und der Betreiber meldet im Nachhinein, was tatsächlich geschehen ist.

Eine Verspätung ist Ist − Soll, in Sekunden, mit Vorzeichen. Ein Zug mit drei Minuten Verspätung ergibt +180. Ein Bus, der zwei Minuten zu früh ist, ergibt −120, und der Wert bleibt negativ: Wir runden eine verfrühte Abfahrt nie auf «pünktlich» auf, denn zu früh abzufahren ist ein eigenes Versagen — es bedeutet, dass Fahrgäste, die rechtzeitig zur publizierten Abfahrt da waren, die Fahrt verpasst haben.

Die Pünktlichkeit ist dann der Anteil der Ankünfte mit weniger als drei Minuten Verspätung. Drei Minuten sind die in der Schweizer Branche übliche Schwelle, und wir publizieren die Werte für fünf und für fünfzehn Minuten daneben, damit die Wahl der Schwelle sichtbar wird, statt das Ergebnis unbemerkt zu tragen.


2. Die beiden Quellen

istdaten — was geschehen ist

Das Schweizer Datenportal für den öffentlichen Verkehr publiziert täglich eine Datei mit den tatsächlichen Halteereignissen (Ist-Daten): eine Zeile pro Halt jeder im Land durchgeführten Fahrt, rund zwei Millionen Zeilen pro Tag. Wir halten jeden Tag ab dem 1. Januar 2022 vor: 3'722'348'981 Zeilen zu 225'148'610 Fahrten an 1'712 Betriebstagen.

Das sind vier Tage weniger als die 1'716 Tage des Kalenders, und insgesamt sind acht Tage beschädigt: Vier wurden gar nie publiziert — das sind die vier, die in der Zahl oben fehlen — und vier weitere wurden unvollständig publiziert, sind also vorhanden, aber lückenhaft. Alle acht sind dauerhaft; nirgendwo existiert eine Nachlieferung. Wir zählen sie als beschädigt und nicht als Tage, an denen nichts gefahren ist, und jeder Zeitraum, der einen davon enthält, weist das auf der Seite aus.

GTFS — was versprochen war

Dieselbe Stelle gibt den nationalen Fahrplan im GTFS-Format heraus, rund zweimal pro Woche. Jede Publikation ist ein vollständiger Snapshot des Fahrplans, wie er an jenem Tag galt, samt Änderungen, die erst wenige Tage zuvor beschlossen wurden — Streckensperrungen wegen Bauarbeiten, Ersatzbusse und saisonale Abweichungen.

Dieser Rhythmus ist wichtig. Eine Fahrt muss mit dem Fahrplan verglichen werden, der an dem Tag galt, an dem sie verkehrte, nicht mit dem heutigen. Ein vier Monate alter Fahrplan kostet rund fünf Prozentpunkte an Zuordnung, was wir direkt gemessen haben: Ein Zeitraum, der auf einem einzigen alten Snapshot beruhte, erreichte 95.5% zugeordnete Fahrten, während korrekt datierte Nachbarzeiträume 98.6% erreichten.

Wir bewahren die Snapshots deshalb als Archiv auf — 214 Stück, zurück bis 2022 und vorwärts in den Fahrplan des nächsten Jahres — und jeder Betriebstag wird gegen den Snapshot zugeordnet, der an jenem Datum aktuell war.


3. Die Spalten, die wir verwenden

Die Spalten von istdaten sind deutsch benannt. Hier steht, was jede bedeutet, was wir damit tun und wo sie unvollständig ist.

SpalteBedeutungwie wir sie verwendenwo sie fehlt oder heikel ist
BETRIEBSTAGBetriebstagdie Einheit, nach der alles gruppiert wirdeine Fahrt über Mitternacht hinaus gehört zu dem Tag, an dem sie begonnen hat
FAHRT_BEZEICHNERFahrtbezeichner, die ID des Betreibers für diese Fahrtdas Erste, worüber wir eine Zuordnung versuchenwird über Tage hinweg wiederverwendet und ist deshalb nur zusammen mit dem Datum ein Identifikator. 20 Betreiber publizieren im Fahrplan einen anderen als den, den ihre Fahrzeuge melden
BETREIBER_IDBetreiber, z. B. 85:11 (SBB)identifiziert das Unternehmendas Präfix 85: steht für die Schweiz; österreichische Betreiber beginnen mit 81:, weshalb wir nie ein festes Präfix abschneiden
LINIEN_IDLinienkennungidentifiziert die Liniebedeutet zweierlei. Bei Bus und Tram ist es ein selbsterklärender Code wie 85:801:701. Bei der Bahn ist es eine Zugnummer, die zwischen Fahrplanjahren neu vergeben wird
LINIEN_TEXTdie Bezeichnung, die ein Fahrgast siehtAnzeige, und ein schwaches Signal für die ZuordnungBezeichnungen sind nicht eindeutig: fünf verschiedene Linien heissen «231»
PRODUKT_IDVerkehrsmittel — Zug, Bus, Tram, …Gruppierung und Produktabgrenzungteilweise leer, und nicht nur bei abgelegenen Angeboten — auch gewöhnliche Regionalzüge erscheinen ohne Verkehrsmittel. Ein leeres Verkehrsmittel wird als Eisenbahn behandelt und behalten, nie herausgefiltert
BPUICHaltestellencodeidentifiziert die Haltestellezwei Formate. Sieben Ziffern bezeichnen eine Station; neun Zeichen bezeichnen dieselbe Station samt einem Gleis- bzw. Kantencode aus zwei Zeichen, der nicht numerisch sein muss. Die Betreiber sind im Lauf von 2026 umgestiegen, deshalb tragen ~80% der neueren Zeilen die längere Form gegenüber 10.9% im Archiv
HALTESTELLEN_NAMEHaltestellenname, so wie ihn der Betreiber schreibtnie für die Identität verwendetmehrere Betreiber publizieren gar keinen, und ein Betreiber ging im Lauf eines einzigen Monats von 1.2% Befüllung auf 100% Befüllung. Haltestellennamen stammen stattdessen aus einem Verzeichnis
ANKUNFTSZEIT / ABFAHRTSZEITfahrplanmässige Ankunft / Abfahrtdas Versprechenfehlt am ersten Halt einer Fahrt (keine Ankunft) und am letzten Halt (keine Abfahrt)
AN_PROGNOSE / AB_PROGNOSEgemeldete Ankunft / Abfahrtdas Ergebnisnur vorhanden, wenn der Status unten es so ausweist
AN_PROGNOSE_STATUS / AB_PROGNOSE_STATUSwie die gemeldete Zeit zustande kamentscheidet darüber, ob die Zeile überhaupt eine Messung istsiehe unten
FAELLT_AUS_TFausgefallenein Versagen, das im Nenner mitzählt—
DURCHFAHRT_TFohne Halt durchgefahrenausgeschlossen — es ist kein Halt—
ZUSATZFAHRT_TFeine zusätzliche, nicht fahrplanmässige Fahrtvon den Quoten ausgeschlossen — es gibt kein Versprechen, an dem sie zu messen wäresie wird nach Möglichkeit dem Fahrplan zugeordnet, denn ein Fünftel von ihnen findet sich am Ende doch darin

Die Statusspalte ist die wichtigste von allen

AN_PROGNOSE_STATUS nimmt einen von vier Werten an, und nur der erste ist eine Beobachtung:

Diese Unterscheidung lässt sich leichter falsch machen als alles andere, und wer sie falsch macht, kehrt ein Ranking um. Eine naheliegend wirkende Prüfung — «ist der Status nicht REAL?» — trifft auf PROGNOSE zu, auf UNBEKANNT und auf leer; so geschrieben bewertet sie stillschweigend jeden ungemessenen Halt als pünktlich. Die Betreiber mit der schlechtesten Telemetrie sehen dann am zuverlässigsten aus. Wir bewerten einen ungemessenen Halt nie; er wird aus der Quote ausgeschlossen und stattdessen in der Abdeckung gezählt.

Diese Statuswerte entscheiden, was aus jedem Halteereignis wird. Für einen repräsentativen Monat aus jüngerer Zeit sah das nationale Ergebnis für jedes Halteereignis, das wir messen durften, so aus:

EreignisseAnteil
gemessen62'329'33393.5%
ausgefallen528'4830.8%
kein brauchbarer Status3'777'0555.7%
unplausibler Wert5'5210.01%

Ein ausgewiesener Pünktlichkeitswert für diesen Monat wird also über 94.3% der Halteereignisse berechnet, die er hätte verwenden können, und wir weisen diese 94.3% daneben aus.


4. Der schwierige Teil: Welcher Fahrplaneintrag ist diese Fahrt?

Die beiden Datensätze beschreiben dieselben Fahrzeugbewegungen und haben, für den grössten Teil unseres Zeitraums, keinen verlässlichen gemeinsamen Identifikator.

Das Feld original_trip_id des Fahrplans — es nennt den Fahrtbezeichner, dem eine Fahrplanfahrt entspricht — kommt erst in Feeds vor, die ab dem 14. Dezember 2024 publiziert wurden. Für alles davor, rund drei Jahre des Archivs, sagt der Fahrplan schlicht nicht, welche Fahrten seine Einträge sind. Und selbst dort, wo es das Feld gibt, löst es das Problem nicht: In einem Monat aus jüngerer Zeit ordnete es 1'971'546 Fahrten zu, während 2'052'286 anders zugeordnet werden mussten, weil diese Betreiber im Fahrplan einen anderen Bezeichner publizieren als den, den ihre Fahrzeuge melden.

Wir ordnen deshalb über die Struktur zu: über die Gestalt der Fahrt selbst.

Das Haltemuster einer Fahrt — welche Haltestellen, in welcher Reihenfolge, zu welchen Zeiten — kommt einem Fingerabdruck nahe. Zwei verschiedene Züge halten selten am selben Tag an denselben Haltestellen zu denselben Zeiten. Das nutzen wir, in fünf Schritten, und nehmen den ersten, der genau eine Antwort ergibt:

Schrittwas er vergleichtwie verlässlich
1. Publizierter Bezeichnerden Fahrtbezeichner und das Datum, mit Verweigerung, sobald mehr als eine Fahrplanfahrt passt98.5% korrekt bei Betreibern mit stabilen Bezeichnern
2. Exaktes Musterdie vollständige Multimenge aus Haltestellen und Zeiten, innerhalb desselben Tages und desselben Betreibers0 Fehler bei 416'020 Entscheidungen
3. Enthaltenes Musterdie Haltestellen der einen Fahrt enthalten in denen der anderen, mindestens 3 Haltestellen und mindestens 70% Überlappung0 Fehler bei 7'647 Entscheidungen
4. Endpunkte und erste Abfahrterste Haltestelle, letzte Haltestelle, erste Abfahrtszeit9 Fehler bei 23'210 Entscheidungen — 99.96%
5. Fahrtnummerdie betreibereigene Kursnummer, anschliessend gegen das Haltemuster geprüftwird verwendet, wo nur eine Altkennung vorhanden ist

Zwei Regeln machen das vertrauenswürdig statt bloss raffiniert.

Passt mehr als ein Fahrplaneintrag, halten wir keine Zuordnung fest. Den wahrscheinlichsten Kandidaten zu wählen wäre in einem solchen System die grösste einzelne Quelle stiller Fehler, und eine falsche Zuordnung ist schlimmer als gar keine: Sie misst die Verspätung der einen Linie am Fahrplan einer anderen, und jede nachgelagerte Zahl erbt das. Fahrten, die auf zwei Einträge passen, werden als mehrdeutig markiert und ausgeschlossen.

Jede Zuordnung hält fest, welcher Schritt sie erzeugt hat. Eine Zahl ist nur so gut wie der schwächste Schritt hinter ihr, deshalb wird der Schritt bei der Fahrt gespeichert und lässt sich nachträglich prüfen.

Wie oft das gelingt

96.50% aller 225'148'610 Fahrten sind ihrem Fahrplaneintrag zugeordnet. Nach Jahr:

20222023202420252026
94.9%95.7%96.1%97.4%98.8%

Die älteren Jahre liegen tiefer, weil es dort überhaupt keinen publizierten Bezeichner gibt und alles allein auf der Struktur beruht. Der nicht zugeordnete Rest ist keine Zufallsstichprobe — er enthält überdurchschnittlich viele Fahrten, deren Fahrplan sich geändert hatte, und damit überdurchschnittlich viel gestörten Betrieb. Deshalb publizieren wir neben jeder Zahl auch die Zuordnungsquote und nicht bloss die Zahl.


5. Der andere schwierige Teil: Welche Linie ist das?

Zu wissen, zu welcher Fahrt eine Zeile gehört, ist nicht dasselbe, wie zu wissen, zu welcher Linie. Die beiden Datensätze benennen Linien auf zwei unvereinbare Arten, und welche davon gilt, hängt vom Verkehrsmittel ab.

Der Fahrplan wiederum benennt alles über eine Routen-ID wie 96-701-j23-1, wobei der Teil j23 für das Fahrplanjahr steht.

Das hat eine Folge, die man klar aussprechen sollte, weil sie wie eine Datenlücke aussieht und keine ist: Eine Bestandsaufnahme, die die beiden Seiten direkt vergleicht, findet Tausende von Fahrplanrouten «ganz ohne Beobachtungen», und das meiste davon ist die Unvereinbarkeit der Kennungen und nicht fehlendes Angebot. Die Linie 101 von PostAuto erscheint in unseren Daten zweimal — als beobachtete Linie mit 1'538 Fahrten pro Woche und als Route ohne Beobachtungen mit 1'629 fahrplanmässigen Fahrten pro Woche. Es ist eine einzige gesunde Linie, die 94% ihres Fahrplans erbringt.

Wir lösen das, indem wir die Verbindung herleiten, statt sie anzunehmen: Die in Abschnitt 4 zugeordneten Fahrten sagen uns, zu welcher Fahrplanroute die Fahrten einer Linie tatsächlich gehören. Diese hergeleitete Verbindung wird nur akzeptiert, wenn fünf Bedingungen erfüllt sind, und andernfalls verweigert:

  1. die Fahrten der Linie erreichen in jenem Fahrplanjahr genau eine Route;
  2. diese Route wird von genau einer Linie erreicht, damit das fahrplanmässige Angebot keiner Route doppelt gezählt wird;
  3. hinter der Paarung stehen genügend Fahrten, damit sie mehr als ein Zufall ist;
  4. höchstens ein Zehntel des Linienjahres verkehrte irgendwo, was die Paarung nicht erklärt, und dieser Fehlbetrag wird festgehalten;
  5. die Haltestellen, an denen die Linie beobachtet wurde, und die Haltestellen, die die Route fahrplanmässig bedient, stimmen tatsächlich überein.

Die fünfte Bedingung ist es, die zusammengehörig von identisch trennt. Drei Viertel der akzeptierten Paarungen stimmen perfekt überein — jede beobachtete Haltestelle ist eine fahrplanmässige und umgekehrt. Zu den zurückgewiesenen gehören Routen des Ersatzverkehrs, die mit einer Linie nur eine einzige Haltestelle gemeinsam hatten, und Routen, die sich als Bruchstück einer längeren Linie erwiesen, was den Fahrplan jener Linie kleiner hätte erscheinen lassen, als er ist.

0.68% der Halteereignisse lassen sich keiner benannten Linie zuordnen. Diese Zeilen behalten alles Übrige — Station, Zeiten, Verspätung — und zählen in den nationalen und den betreiberbezogenen Zahlen mit; sie erscheinen lediglich nicht auf der Seite einer Linie.


6. Abdeckung, und warum es drei Zahlen sind

Eine Pünktlichkeitsquote ist nur zusammen mit dem Anteil des Angebots aussagekräftig, über den sie berechnet wurde. Wir publizieren drei davon, und die Zahl, die wir zeigen, ist immer die schlechteste von ihnen, nie der Durchschnitt:

AchseFrage
Tagehat die publizierende Stelle den Tag überhaupt herausgegeben?
Fahrtenwelcher Anteil der Fahrten des Tages hat einen Fahrplaneintrag erreicht?
Messungwelcher Anteil der Halteereignisse, die wir messen durften, trägt eine echte Messung?

Sie sind voneinander unabhängig, und jede der drei kann die bindende sein. Ein Monat aus jüngerer Zeit hatte alle seine Tage, ordnete 98.6% seiner Fahrten zu und mass dennoch nur 94.3% seiner Halteereignisse — er wird also mit 94.3% publiziert. Der Durchschnitt der drei hätte 97.6% gezeigt und die Achse verdeckt, die tatsächlich dünn war.

Wo die Abdeckung unter der Schwelle liegt, die wir für publizierbar halten, zeigen wir den Zustand statt einer ausgegrauten Zahl. Eine Zahl, die über ein Zehntel des Angebots einer Linie berechnet ist, ist keine vorsichtige Schätzung; sie ist eine andere Aussage, und ehrlich ist es, sie nicht zu machen.


7. Was wir nicht behaupten


8. Woher die Daten stammen

Beide Datensätze werden von opentransportdata.swiss unter einer offenen Lizenz publiziert. Die Ist-Daten-Dateien und die Fahrplan-Snapshots sind der vollständige Input; es gibt keinen privaten Feed, keine Vereinbarung mit einem Betreiber und nirgends in der Verarbeitungskette eine manuelle Korrektur.

Wenn Ihnen eine Zahl auf dieser Website falsch erscheint — besonders wenn Sie der Betreiber sind, den sie beschreibt: Für jede Zahl sind der Zuordnungsschritt und die Abdeckung festgehalten, und wir korrigieren sie lieber, als sie zu verteidigen.