What it shows
The timeline strip is one race, lap 1 at the left edge and the chequered flag at the right. Green is racing. Each coloured block is a run of laps that were run under a neutralisation:- Safety Car the field is bunched behind the car, nobody is racing, and a pit stop costs roughly half of normal.
- Virtual Safety Car no physical car; every driver holds a delta time. Cheaper than a safety car for whoever has already stopped.
- Red Flag the session is stopped. Tyres can often be changed for free.
How to use it
- Pick a race. The strip and the event table load for that race alone.
- Read the block positions, not just their count. A safety car on lap 4 and one on lap 48 are different races: the early one costs whoever had already stopped, the late one is a free pit stop for whoever had not.
- Open the Pit Strategy Gantt for the same race and lay the two lap axes side by side. A stop that lands on the first lap of a caution window is the cheapest stop in the race; the same stop three laps earlier is a strategist who guessed wrong.
- Check the per-season table before reading any single race as typical. The rate moves more by season than it does by venue.
Reading the signal correctly
So the only caution probability shown is pooled across every circuit and season, and it never appears without its denominator and interval:
8.97% of all race laps between 2018 and 2024 were run under a caution.
The one real movement in the data is seasonal, not spatial 90.5% of 2018 races had a caution against 58.3% of 2024 races and the per-season table on the page shows it rather than averaging it away.
The per-circuit strip, and what it actually is
int_sc_hazard_history carries two per-circuit hazard columns, and the page reads only one of them.
The raw rate spans 0.000 to 0.100 onsets per racing lap. That spread is the noise described above rendered to five decimal places, and it is never read into this app.
The shrunk rate spans 0.019 to 0.033, and the reason it is narrow is stated on the page rather than hidden by it. The empirical-Bayes prior is 600 laps, so the weight a circuit’s own history carries is L / (L + 600), which averages 0.178 across the 128 rows that have a prior season and never exceeds 0.413. Roughly four fifths of the value shown is the all-circuits pooled rate wearing a circuit’s name. That is the correct answer at this data volume the estimator has already conceded the question and the page prints the weight beside the number so a moving bar cannot imply a circuit signal that is not there.
Why 2018 is blank
The hazard model is season-lagged: the row for a circuit in season S uses races at that venue in seasons before S and nothing else. 2018 is the first season in the warehouse, so all 21 of its rows are null on every rate, raw and shrunk. The page prints not measurable and draws no bar. ACOALESCE(..., 0) would assert a measured zero hazard at every 2018 venue, which is a strictly stronger claim than the data supports “unknowable” and “measured, no events” are different statements. Fifteen later rows are null on the raw rate for the same reason (a circuit’s debut season) but do carry a shrunk rate, because a venue with no history shrinks all the way to the pooled prior.
How a “window” is counted
Contiguous caution laps merge into one block, so two deployments with no green lap between them read as a single window. Measured against the event log instg_track_status, this reconstruction produces 112 safety-car windows from 119 logged onsets, agreeing exactly on 76 of the 85 races that have safety-car laps. The strip is therefore an accurate account of which laps were neutralised and a slight undercount of how many times race control acted.
Data source
The per-lap status originates in the FIA track-status channel, decoded in
stg_laps and carried into int_stint_geometry. A lap counts as neutralised if any car’s lap carried that status code, which is the correct reading when a deployment lands mid-lap.
fct_lap_residuals carries the same three column names is_safety_car_lap, is_vsc_lap, is_red_flag_lap and they are FALSE on all 137,447 of its rows, because that mart is built from green racing laps only. It is not a caution source, and any query filtering on those columns there is performing a no-op.