How good are the forecasts? We score every prediction against what actually happened — no cherry-picking. New here? Read how it works →
Recent predictions did each forecast pan out?
Each row is one train we forecast as approaching, while it was still on its way. Predicted = the time we said the barriers would drop; actual = when they actually did; error = the gap (a minus means it crossed earlier than we said); lead = how far ahead we called it. Status: hit = matched a real closure · missed = no closure happened when we predicted one (the train diverted, terminated, or was cancelled) · pending = not resolved yet · superseded = a redundant prediction for a closure we did call — the same train re-predicted from a closer point, or a sibling train predicted for the same closure another train triggered.
| train | dir | berth | predicted | actual | error | lead | status |
|---|
Recent closures what actually happened
Every time the barriers actually came down, detected from the signalling itself. dur = how long they stayed down; trains = which train(s) crossed (click for schedule); called live? = whether our live forecast predicted it in advance. Note: a signaller can hold the barriers down manually (see limitations), so duration isn't always one-train-one-closure.
| start | dur | dir | trains | routes | called live? |
|---|
Closure patterns all observed closures
Closures by hour of day (UK local) — the daily rhythm of the crossing:
Today so far booked → running → closed
How today's trains flow through to closures: how many were booked to cross in the timetable, how many actually activated (are running) per live data, how many were cancelled, and how many closures we've seen.
Diagnostics timetable cross-check & feed health
A secondary check against the booked timetable (independent of the live berth tracking above), plus raw feed activity. Mostly of interest for debugging.
Recent TRUST activations (corridor trains) — raw feed
| activated | headcode | uid | status | delay |
|---|