Where the data comes from
The source is the public repository TracingInsights/RaceData on GitHub, released under the CC0 public-domain licence. It packages the Ergast and Jolpica Formula 1 database together with tables of safety car periods. I used the version dated 27 September 2026, which runs through the Azerbaijan Grand Prix, 2026-09-26 (round 15 of the 2026 season). The unchanged source files are in data/raw, and scripts/build_dataset.py turns them into the one file both pages use, data/laps.csv.gz.
What one row is
One row is one lap by one driver in one race. The file has 632,937 rows and 20 columns. The time columns are the race date and the season (31 seasons). The group columns are the driver (147) and the team (45). The other columns are the round, Grand Prix, circuit, rules era, grid slot, finishing position, result class, lap number, position at the end of the lap, lap time, lap type, stint number, laps since the last stop, pit-lane time, pace gap and a retirement flag.
Rows dropped
- Seasons before 1996. Lap records in earlier seasons are less complete and pit stops are only recorded from 1994, so the data starts where coverage is consistent. Nothing else is removed from the file.
- Each calculation then uses the lap types it needs. There are 547,179 green laps. The rest are the first lap of each race (9,289), laps into the pits (21,283) and out of them (20,289), laps behind the safety car (29,659) or virtual safety car (4,032), and laps where the car was stopped, mostly under red flags (1,206, any lap more than twice the race's median lap time).
- A driver who retires before finishing the first lap has no lap row, so those starts are missing from every figure.
How each figure is computed
- Pace gap. For a green lap, the lap time divided by the median lap time of all cars on a green lap on that same lap of that race, minus one, as a percent. Negative is faster than the field. It needs at least five green cars on the lap, which leaves 546,849 laps with a value. Comparing within the same lap removes fuel load, weather and track conditions.
- Median pace gap of a driver, team or season is the median of those lap values. A driver's race pace is their median pace gap in one race, used only if they have at least 10 green laps.
- Car, driver and noise shares. Total variance is the variance of race pace across cars within a race, averaged over races. Half the mean squared gap between teammates is the variance not caused by the car. Within each pair of teammates in a season, half the variance of their gap around its season average is race-to-race noise. Car is total minus the teammate part, driver is the teammate part minus noise.
- Driver ratings. Least squares on teammate gaps (gap equals one driver's rating minus the other's) with a ridge penalty of 5.82, the ratio of noise variance to driver variance from the split above. Intervals come from re-sampling whole races 300 times.
- Fuel and tyre effects. A regression of log lap time on race lap number and laps since the last stop, with a separate baseline for each driver in each race. It uses green laps from 2010 on, within 5% of the driver's median lap that race, for drivers who stopped at least once. Standard errors are clustered by race.
- Undercut and overcut. Pairs of cars in consecutive positions with the second car no more than three seconds behind, using gaps built by adding up lap times. One pits, the other pits one to three laps later, and the pair is scored one lap after the second stop. Any pair that touches a safety car lap is left out. The rate is the percent of pairs in which the car that started behind is ahead.
- Pit stops per 100 laps is pit-in laps divided by all laps, times 100. Stops per finisher counts pit-in laps for drivers classified as finished or lapped.
- Field spread is the slowest team's median pace gap minus the fastest team's, for teams with at least 500 green laps in the season.
- Share of laps led is laps completed in first position by a driver, team or grid slot, divided by all laps completed in first position in the same seasons.
- Retirements per 1,000 laps is the number of drivers whose last lap ended in a retirement of that kind, divided by all laps raced, times 1,000. Mechanical covers engine, gearbox, hydraulics and similar failures. Accident covers accidents, collisions, spins, damage and punctures.
- Podium model. Form figures use only the five races before the one being predicted. The baseline is each grid slot's podium rate in the training seasons. Log loss and Brier score measure how good the probabilities are (lower is better). AUC measures how well the model ranks podium finishers above the rest.
Reproducing the numbers
Running python scripts/build_dataset.py then python scripts/analysis.py rebuilds the data file and every number on this page into data/findings.json, which the charts read. python scripts/fill_report.py --check confirms that every number in the text matches that file. The dashboard computes its figures in the browser from the same data/laps.csv.gz, using the same definitions of pace gap, laps led, pit stops and retirements.