AC Transit — route map

On Time Service Delivered Stops arriving on time (−1 to +7 min) · past week

What this is. The same On Time Service Delivered metric shown on the weekly dashboard, scoped to this route. An eligible scheduled stop arrival counts toward the metric only if the bus arrived between 1 minute early and 7 minutes late (−60 s ≤ delay ≤ 420 s). Stops outside that window remain in the denominator but do not count toward the metric; this includes eligible stops where the bus was never observed. The denominator includes wholly unobserved trips but excludes route origins, final terminals, and stops where GTFS prohibits pickup. On Time Service Delivered = qualifying stops ÷ eligible scheduled stops × 100. Qualifying events come from BigQuery and the complete denominator comes from archived GTFS; the exact counts are reused from the weekly roll-up.

Time resolution. The left chart is the true On Time Service Delivered percentage per day (the finest count-based resolution we precompute). The right chart adds hourly context: median (p50) and p95 delay by hour of day, with the shaded band marking the accepted −1…+7 min window — hours whose line sits inside the band mostly fall within the rider window, while hours above it are running late. Finer (e.g. 15-min) On Time Service Delivered data would require a new aggregation in the stats pipeline.

On Time Service Delivered by day (stop-level)

Delay by hour vs accepted window (PT)

Bus spacing and bunching Past week · eligible frequent-service windows

Headway CV means coefficient of variation (standard deviation ÷ mean); lower values mean more even spacing.

Headway CV along the route

CV is the coefficient of variation (standard deviation ÷ mean) near six points from the start to the end of the route. Lower is more even.

Passenger wait-time distribution Past week · weekday vs weekend

Inspired by Jason Cole's Bus-teresis analysis, which charts median wait time at a stop as the time a passenger arriving at a uniformly random moment would have to wait for the next bus. Cole worked from the TfL "next bus" prediction feed; we don't have predictions, so we derive the same quantity from observed arrivals.

How it's computed. For every (stop, day) we line up consecutive bus arrivals within the same route direction and measure the gap between them (the headway). Every recorded arrival is retained even if the trip later times out; stops the bus never reached have no arrival and do not enter the sequence. Under the inspection paradox a random passenger lands in a gap of length h with probability proportional to h and then waits uniformly on (0, h), so the wait-time density is (1 − FH(w)) / E[H] and the mean wait is E[H²] / (2 · E[H]). The histogram below is exactly that density, normalized; the cards show the mean and median wait.

Caveats. Headways shorter than 30 s are dropped (finalize-time duplicate rows) and headways longer than 90 min are dropped (route overnight shutdown). Each stop on the route contributes equally — we don't have ridership weights, so a quiet end-of-line stop counts the same as a busy downtown stop.

Wait-time distribution (0–60 min)

Median wait by hour of day (PT)

P95 / P99 wait by hour of day (PT)

Speed by hour of day Per direction · weekday vs weekend (mph)

Per-leg average speed is computed in tripToRows as (distance between consecutive stops) / (time between consecutive actual arrivals). The histograms below aggregate those per-leg speeds across every observed leg of this route in the selected week, grouped by direction (inbound / outbound), day-of-week type, and hour of day in Pacific time. Hours with fewer than 10 legs are dropped to avoid percentile noise; outliers above 78 mph are filtered in the BigQuery aggregation as projection glitches.

Left column: central tendency — solid line is the mean, dashed is p50 (median). Right column: speed spread and dispersion — a shaded 5–95th percentile band with the standard deviation line drawn on top. Blue = weekday, pink = weekend. Hover any chart to see all values for that hour.

Inbound — central speed (mean, p50) by hour

direction_id = 1

Inbound — speed spread (5–95) + stddev by hour

direction_id = 1

Outbound — central speed (mean, p50) by hour

direction_id = 0

Outbound — speed spread (5–95) + stddev by hour

direction_id = 0

About this view

Circle color: green = on time, yellow = moderately late, red = significantly delayed.
Circle size: larger = more extreme delay or variability at that stop.

Schedule adherence
on time / early 7 min late very late
small = mild
large = severe
Loading route data…