What this family does
Skill isolates driver performance from car performance using two genuinely different identification strategies that both live in this family. The first is a rating chain: a race-grain equal-car rating, the driver’s median lap-by-lap gap to his teammate in the same car (LORO: leave-one-driver-out, so a driver is never in his own baseline), then per-cell Bayesian shrinkage at season and circuit grain. A de-biased constructor×race fixed effect read from an externalpyfixest fit feeds a parallel field-anchored signal used only by the era-affinity model. No era offset is applied: a teammate-relative rating cancels a car-era shift inside each pair. The second is int_synthetic_teammate, a single self-contained pairwise comparison with no shrinkage and no fixed-effects fit.
These signals are not the additive identity’s closure-defined driver_skill. That term (pace_delta minus the four physics components, see The Additive Identity) is computed entirely inside Residual Decomposition, from a different baseline. No model in this family ref()s anything in Residual Decomposition, and no residual model reads anything here verified directly against manifest.json, not assumed (see the correction note on this tab’s overview). This family’s outputs are an independently-estimated, complementary rating system, built for ranking and leaderboards rather than for closing a per-lap identity.
Upstream is mostly Pace Baselines (int_field_pace_curve, int_track_evolution) and Physics (int_lap_fuel_state, int_stint_geometry), plus one external source the constructor car-pace fit lives outside dbt run entirely, in data/fits/constructor_car_fe.parquet. Downstream is asymmetric: of the seven models, only int_synthetic_teammate is read by any other dbt model (fct_driver_skill_features, the one ML feature mart this family touches). The other six are leaves in the model DAG, reachable only by their own CI tests and four of those six are exported straight to the app by scripts/export_app_data.py, each powering a named feature directly with no marts model in between.
The sub-DAG
The four directly-exported models power, by name:int_era_normalized_driver_rating → Era Ratings Timeline, Era Translator, Hidden Performance; int_driver_circuit_affinity → Driver Circuit Affinity; int_driver_circuit_era_affinity → Ghost Race Standings, Hidden Performance; int_synthetic_teammate → Synthetic Teammate (in addition to its fct_driver_skill_features edge above) verified against the app’s own query files, not inferred from the export script alone. int_constructor_car_fe, int_driver_race_skill_loro, and int_driver_season_ratings are pure pipeline stages: nothing reads them except the next stage and their own tests.
How it works
The LORO baseline is the family’s representative move: a driver’s car baseline is the mean of his other same-car teammates’ median pace delta, built by subtracting his own contribution out of the car’s summed total rather than computing two separate baselines per car:bayesian_shrinkage macro:
where is the prior weight, expressed as virtual observations ( everywhere in this family five virtual races or circuit-visits’ worth of pull toward the prior mean).
1
Car FE
int_constructor_car_fe reads a two-way fixed-effects fit (pace_delta_s ~ 1 | driver_id + constructor_race) from an external pyfixest artifact: car pace net of who drove it, anchored globally so one weak driver’s slowness can’t leak back in as car pace.2
LORO baseline
int_driver_race_skill_loro computes two parallel signals per driver-race: driver_skill_loro_s, the median of the driver’s lap-by-lap gap to his teammate on laps both ran clean (paired on lap number), feeding the rating chain; and a field-anchored signal, median pace delta minus the car FE, used only by the era-affinity model below.3
Per-cell shrink
int_driver_season_ratings (season grain) and int_driver_circuit_affinity / int_driver_circuit_era_affinity (circuit and circuit×era grain) each shrink their observed cell mean toward a wider prior mean with the same conjugate macro.4
Publish, no era offset
int_era_normalized_driver_rating publishes the season rating as era_adjusted_rating with no offset. It still measures the average shift of drivers with ≥8 races on both sides of the 2022 boundary, as a diagnostic only.Design notes
- Why this shape
- Other approaches
The car-pace fixed effect lives outside
dbt run because a two-way HDFE with high-cardinality terms (driver × constructor-race) is a real linear-algebra problem, not something a window function expresses the offline fit-and-promote shape mirrors Reference’s seed-and-promote cycle for the compound-cliff coefficients.LORO exists because a same-car median baseline is contaminated by both drivers, including a weak one subtracting it hands the weak driver’s slowness back to his teammate as “skill.” LORO removes the focal driver from his own baseline; the field-anchored variant goes further, replacing the single-teammate baseline with the FE’s global driver anchor specifically for the era-affinity model, which otherwise inflates a driver paired with a persistently slower teammate.driver_skill_loro_s compares like with like, lap by lap. Until WI-14b (2026-09-28, audit finding F40) it was the driver’s 20th-percentile (ceiling) lap delta minus the teammate’s median, meant to discount a dominant-car leader’s cruising. A ceiling against a typical lap mixes lap-time scatter into the level: scatter read as speed, and in 79% of two-driver cars both teammates were rated faster than each other. Pairing the two drivers’ clean laps on the same lap number and taking the median gap is antisymmetric by construction (a pair’s ratings sum to 0) and did best on split-half reliability and qualifying agreement in the design round that chose it.int_driver_circuit_era_affinity and int_driver_circuit_affinity read the circuit_reference seed directly rather than going through Reference’s dim_circuits, because they need circuit_id_from_name’s physical-venue resolution so a renamed event or a double-header pools into one track record. int_driver_circuit_affinity shrinks each circuit’s gap to the teammate toward the driver’s own mean and publishes the difference, affinity_vs_driver_mean_s, as the affinity (F44: drawing the shrunk level itself painted every cell one colour).There is no era offset because a teammate-relative rating has no era level to remove: a change of car era moves both teammates alike. The bridge-driver offset this model used to apply (t = −1.5, no significance gate) inverted the between-era field-mean gap it was meant to remove (F45). assert_era_offset_shrinks_gap fails if an offset comes back with |t| < 2, or widens or inverts that gap.Every model in this family
int_constructor_car_fe
Thin reader over an external two-way fixed-effects fit (driver × constructor-race): car pace net of who drove it.
int_driver_race_skill_loro
Two skill signals per driver-race: the median lap-by-lap gap to the teammate for the rating chain, and a field-anchored car-FE baseline for era affinity.
int_driver_season_ratings
Race-grain skill shrunk to season grain via Bayesian conjugate shrinkage toward the season mean.
int_era_normalized_driver_rating
The published season rating, on one scale across eras because it is teammate-relative; no era offset applied.
int_driver_circuit_affinity
Per-(driver, circuit) affinity: how much better or worse a driver does against his teammate at one circuit than his own average.
int_driver_circuit_era_affinity
The same affinity, era-split and car-removed via the FE baseline the “equal-car track record” leaderboard signal.
int_synthetic_teammate
Lap-by-lap synthetic teammate comparison, tyre-state-adjusted no shrinkage, no FE, the family’s only ML feature mart input.