Path utilisation: activation rate of scheduled freight paths
Last updated 11 May 2026
How Gauge Intelligence computes the per-operator activation rate of freight paths in the Working Timetable, what the "ghost path" count measures, and what it does not.
Path utilisation is the proportion of an operator’s freight paths in the Working Timetable that activate as a train movement on the scheduled day. A scheduled path that records no activation is a “ghost path” for that day. This page documents what the metric measures, the data sources it draws on, and — critically — the interpretation it does not support.
The metric
For a given operator and reporting period, we compute three counts and one rate.
The scheduled count is the number of distinct (train_uid, run_date)
pairs for which a non-cancelled schedule applies on that date. Each pair
is a single path-day: the same train_uid scheduled across five
weekdays contributes five pair-days, not one.
The activated count is the number of those pairs for which a
non-cancelled TRUST activation produced a Journey row in our database.
Activation is recorded when Network Rail’s TRUST feed signals that a
schedule has been called into service for a specific day.
The ghost count is scheduled − activated: scheduled path-days that
did not produce an activation.
The activation rate is activated / scheduled, with a 90% Wilson
confidence interval on the resulting proportion. Wilson is used because
the denominator can be small in narrow date ranges or thin operator
footprints; the interval is asymmetric and stays within [0, 100].
The period headline frames the rate as a gap in percentage points against the national mean for all known freight operating companies in the same window. This is a comparator, not a benchmark — it normalises out the period (weather, possessions, traffic pattern) without endorsing the national mean as the right target rate.
STP precedence
The CIF schedule data carries four short-term-planning (STP) variants:
permanent (P), new STP (N), overlay (O), and cancellation (C).
Priority runs C > O > N > P — a cancellation supersedes an overlay,
which supersedes a new STP, which supersedes a permanent schedule.
For each (train_uid, run_date) pair we apply that precedence. When a
C schedule applies on that date, the pair is STP-cancelled and
excluded from both the scheduled denominator and the ghost count. The
operator has formally cancelled that path-day; treating it as a ghost
would inflate the apparent unused-capacity signal.
The STP-cancelled count is reported separately on the panel for transparency.
VSTP exclusions
VSTP activations — short-notice contingency moves added to the operational schedule inside the 24-72 hours before running — are TRUST activations for which no Schedule row exists in our database. We exclude them from both numerator and denominator: a VSTP move was never scheduled in the WTT, so it cannot be a ghost; it also does not contribute to the activation count, which measures scheduled-and-realised paths.
VSTP volumes vary by operator and period. The exclusion is principled but it does mean the activation rate is not a count of “trains the operator ran” — it is specifically “scheduled paths that activated.”
Operator linkage
Schedule rows carry an atoc_code field but it is unusable for FOC
identification: all freight operating companies share the value ZZ in
the CIF data. We link a schedule to an operator through the
freight_services.train_uid universe — the set of UIDs that the
operator has activated at any point.
This captures the operator’s known WTT footprint at the cost of missing UIDs newly introduced within the reporting period and never activated. That class is small and slow to update; period reports are stable against it.
What the metric measures, and what it does not
The activation rate is a defensible count of WTT-resident path-days realised as journeys. It is not a measure of operator delivery performance against intent.
CIF data routinely includes capacity-reservation paths: schedules an operator holds to preserve optionality, and paths reserved against demand that may or may not materialise on a given day. It also includes paths that exist under permanent schedules but are operationally skipped on days the operator does not have traffic.
A 60% activation rate in this sense does not imply the operator failed to run 40% of its intended traffic. It implies that 40% of the path-days resident in the WTT did not materialise as activations — for whatever combination of reasons: demand pattern, planned contingency, customer-side cancellation, short-notice operational decision.
This is why the panel reports the count rather than narrating “performance.” A more nuanced “intended-to-run rate” would require isolating the operator’s true day-of-operation intent from capacity-reservation patterns, and that intent is not in our schema. We publish the activation rate as a transparency datum: this is the WTT footprint, this is what activated, this is the gap. The reader can form their own interpretation.
Reproducibility
The engine is Periodic::PathUtilisation at
app/models/periodic/path_utilisation.rb. Pairs are produced by
iterating each calendar date in the window and querying
Schedule.runs_on(date) against the operator’s UID universe, filtered
by stp_indicator. Set operations on (uid, date) tuples produce the
final counts. The Wilson interval reuses the same helper that scores
A2F proportions elsewhere in the application — Annual::WilsonInterval
— so confidence intervals on activation rate and A2F use the same
arithmetic.
Periodic::PathUtilisationAssessment
(app/models/periodic/path_utilisation_assessment.rb) is the assessment
wrapper called from period reports. It invokes the engine, classifies
severity (#compute_severity), and builds the rendered headline
(#build_headline). Every “activation rate X%” panel in a period report
resolves through this assessment class.
Per-corridor breakdowns and per-path scheduling-pattern analysis are
not derived here. They are computed for the commercial-licensed
products from the same (uid, date) substrate, joined to the
corridor segments through JourneySegment and to BPLAN’s per-link
geography for capacity analysis.