Loadingβ¦
Every chart, in one place
This tracker has nineteen visualizations spread across the tabs above. Here's
the full directory β pick a question and jump straight to the chart that answers
it. Each tab groups a few related charts; the mode filter above
(bus, train, or both) applies everywhere.
Are buses showing up?
Are buses on time?
Why do trips vanish?
Which buses fail most?
Where are buses late?
Do buses clump up?
Ghost buses vs. vanishes
A ghost bus is a scheduled trip that never ran β the bus
never departed, or left the garage but never appeared in the live feed for
its assigned trip. A vanished prediction is a trip that
started but whose arrival countdown disappeared mid-route, before the final
stop, with no completion recorded.
The ghost rate is ghosts Γ· scheduled trips observed during the polling window. Days with partial collection (outages, the early dataset) show lower raw counts but a roughly comparable rate; the rate chart is the more reliable signal across time.
Daily counts
Ghosts (no-show)
Vanished (mid-route)
Missing-bus incidents β consecutive no-show trips on one bus's block counted as one event (days before 2026-06-28 predate this measure)
Ghost rate
Ghosts as % of scheduled trips
Rider-hours lost to no-shows
Estimated rider-hours lost per day: each bus no-show's would-be riders wait for the next bus that actually ran (capped at 60 min each), weighted by WPRDC route-level ridership. Bus only β rail excluded (feed-coverage-suspect). Days before the metric launched show no line.
How schedule adherence is measured
Each time a stop prediction disappears from the live feed, the tracker
compares the bus's scheduled departure time for that stop to the moment the
prediction died. Early means the bus reached the stop more
than 1 minute ahead of schedule;
late means more than 5 minutes behind;
everything in between is on time β matching the FTA
standard PRT reports against publicly.
The Timing stops only toggle filters to GTFS
timepoint=1 stops β specific stops where PRT makes a firm
schedule commitment and drivers are instructed to hold. The majority of
stops carry interpolated times: estimates computed by dividing the
gap between two real timing points proportionally across the stops between
them. Timing-stop results are a stricter, more meaningful signal of whether
PRT is actually keeping its schedule commitments.
Jump to
Most-ghosted routes
Total no-show ghosts across all collected days
On-time performance by route
Late (>5 min)
On time
Early (>1 min)
Share of stop predictions vs. schedule over the last 14 days; routes with the most late stops first. Needs β₯30 observations.
On-time arrivals by hour of day
Share of GPS-observed arrivals (per the mode filter above) graded within PRT's on-time window (1 min early β 5 min late of schedule), by scheduled hour (Eastern). Hover a bar for the arrival count.
Counts only arrivals GPS could time: buses adopt their trip id after leaving the terminal and drop it before the last one, so stops near the ends of a route are under-represented here.
On-time share per day
Share of GPS-observed arrivals (per the mode filter above) graded on time (1 min early β 5 min late of schedule) each settled day. Record accumulates from the feature's launch.
Counts only arrivals GPS could time β stops near the start and end of a route are under-represented (see the hourly chart above).
Effectively-missed service by route
Share of GPS-observed arrivals (per the mode filter above) that arrived late by at least half their scheduled headway and by more than PRT's 5-minute lateness threshold β effectively a missed bus. Worst 15 routes with at least 300 evaluable arrivals.
Promised vs delivered headway
Promised gap
Delivered gap
Average gap between consecutive same-direction buses at a stop that riders were promised vs. the gap GPS actually delivered, per route, over all settled days. The promise is measured over exactly the pairs of buses that produced a delivered gap, so the two bars cover the same trips. Wider delivered bars mean riders waited longer than promised. 15 routes with the highest delivered-vs-promised ratio, at least 300 observed arrivals.
Vanish categories
When a prediction disappears, the tracker classifies the reason by the
vehicle's reported state at the time:
Unexplained drop β the prediction simply stopped updating with no clear cause. The vehicle may have gone off-route, lost GPS, or the feed glitched.
Stopped mid-route β the vehicle switched to an out-of-service state before finishing the trip; likely a breakdown, pull-out, or driver change that wasn't recovered.
End of run β the vehicle reached a layover or terminal and the trip ended earlier than scheduled, or the prediction ran past the actual last stop.
Never left garage β the vehicle never appeared in the live GPS feed for this trip; the scheduled departure came and went with no vehicle observed. Similar to a ghost, but a prediction existed in the feed before disappearing.
Late join β the prediction appeared in the feed before the vehicle was tracked by GPS, so the trip largely ran; this is a tracking artifact and is hidden by default.
Vanishes by hour of day
Mid-route vanishes by scheduled arrival hour (Eastern)
Ghosting along the route
Vanishes split by class and by how far through the route the countdown blinked out. Click a category to show or hide it. Late join β the prediction ran before the vehicle was tracked, so the trip largely ran β is a tracking artifact and stays hidden by default.
How vehicle reliability is measured
Vanish rate is the share of a vehicle's trips whose
arrival countdown vanished mid-route β a proxy for that bus dropping out
of service before finishing its run.
It is a trailing record: both the vanishes and the trip count are tallied per day, over only the days we still hold consistent data for. Older days fall off as their raw GPS rows are pruned β so a vehicle's history here reaches back a few weeks, not to the start of collection, and the window grows forward over time.
Vehicle reliability
| Vehicle | Vanish rate βΎ | Vanishes | Trips | Days |
|---|
Vanish rate = mid-route drops Γ· trips driven, tallied per day over the days we hold data for. Only vehicles meeting the min-trip threshold are shown.
How stop lateness is measured
Each circle represents one stop. Color reflects the share of observed
predictions that were late (>5 min behind schedule);
size reflects sample volume. Early means the bus reached
the stop more than 1 minute ahead of schedule; everything else is on time.
Stops need β₯30 observations to appear.
The Timing stops only toggle shows only
timepoint=1 stops from the GTFS schedule β the anchor points
where PRT commits to a time and drivers are instructed to hold. Most stops
have interpolated times (estimated from adjacent timing points) and are
noisier signals; timing stops give a cleaner picture of real schedule
adherence.
Stop lateness map
0% late β 30% β 60%+ late Β· circle size = sample count Β· β₯30 observations to appear
What counts as bunching?
Two vehicles on the same route and direction are
bunched when they are running within half a mile
(2,640 ft) of each other along the route β measured by
projecting each vehicle onto its route geometry, so it's distance in the
line of service, not straight-line distance. The bunch rate
is normalized: out of the snapshots where a route had β₯2 vehicles on the
same pattern (a chance to bunch), it's the share where at least one pair
was within that gap β so high-frequency trunk routes don't top the list on
volume alone.
The hourly chart adds a second, complementary measure. Route-moments bunched is that same rate (a route counts if any pair on it is bunched). Buses bunched is vehicle-level: of all in-service buses, the share personally caught in a bunch β a lower, more literal "what fraction of buses are bunched right now."
Jump to
Bunchiest routes
Normalized bunch rate (see definition above) Β· routes need β₯30 qualifying snapshots to appear.
Acute vs chronic bunching
Fine β not unusually bunchy today or historically
Acute β bunching worse than usual today
Chronic β routinely worse than peers
Acute on chronic β bad route, worse today
Each dot is a route. The x-axis (chronic) is the percentile of a route's typical bunch rate against comparable
routes β a route's own corridor mates if it has any, otherwise routes of similar service frequency. The y-axis
(acute) is the percentile of today's bunch rate against that same route's own history.
Bunching by hour of day
Route-moments bunched β share of exposed route-snapshots with a bunch
Buses bunched β share of all in-service buses caught in a bunch
By hour of day (Eastern), across all collected days. Faded bars are deep-overnight hours with too few buses running to be reliable.
Where buses bunch
Bunching-event density Β· hotter = more events (a count, not a rate). Zoomed out shows a smooth density field; zoom in to resolve individual ~110 m cells (hover for the count).
Shared corridors β cross-route bunching
A corridor is a stretch of street a bundle of routes
share β Forbes/Fifth through Oakland, the East Busway, the Liberty Ave
spine. Here two buses count as bunched when they're within half a mile
along that shared trunk even if they're on different routes:
the platoon a rider waiting at the stop actually experiences, where three
buses arrive together and then nothing for twenty minutes. The
cross-route bunch rate below is
the percentage of exposed snapshots (moments the corridor had β₯2 buses
on it) in which at least two buses of different routes were
within half a mile β 0β100%, a signal the per-route view above
structurally can't see.
Bunchiest corridors
Cross-route bunch rate = % of exposed snapshots with a cross-route platoon (two routes within Β½ mi). Corridors need β₯30 exposed snapshots to be ranked here; quieter derived trunks still appear on the map below. Bar label is the street; hover for the routes. Click a bar to zoom the map below to that corridor.
Where corridors bunch
Each shared trunk drawn along its street, colored by cross-route bunch rate β the % of its exposed snapshots with a cross-route platoon (teal 0% β red 60%+). Hover a corridor for its routes and rate.
Grey dashed = derived trunks we've observed too little to rate yet (fewer than 30 snapshots with β₯2 buses on them). They're shown so the full corridor network is visible, but carry no rate.