> ## Documentation Index
> Fetch the complete documentation index at: https://offthepace.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# fct_driver_isolation_race

> Driver isolation per driver-race: the three ratings rolled up with lap weighting (pair-lap weighting for relative), SEs that add each stint's slope error in quadrature, lambda, shrunk value, confidence_pct and trust_label, the tier-3 identity split, and context.

<Note>Part of the [Marts](/transform/families/marts) family.</Note>

Driver isolation per driver-race: the three ratings rolled up with lap weighting (pair-lap weighting for relative), SEs that add each stint's slope error in quadrature, lambda, shrunk value, confidence\_pct and trust\_label, the tier-3 identity split, and context. Keyed with the same surrogate-key recipe as fct\_driver\_skill\_features, which is deliberately not changed (an unvalidated rating must not enter a trained model's contract). No minimum-race floor: lambda does that job. Positive = faster. Leakage: a function of the residual trajectory; no ML-contract mart may depend on it (T48, ml/tests/test\_manifest\_contract.py). WI-16a, \_roadmap/\_fixes/wi/WI-16-cumulative-driver-isolation.md.

## Lineage

```mermaid theme={null}
flowchart LR
  fct_driver_isolation_lap --> fct_driver_isolation_race
  fct_driver_isolation_pair_lap --> fct_driver_isolation_race
  int_driver_isolation_stint_tyre --> fct_driver_isolation_race
  style fct_driver_isolation_race fill:#e40404,stroke:#e40404,color:#fff
```

## Overview

| Property | Value |
| - | - |
| Layer | `marts` |
| Family | [Marts](/transform/families/marts) |
| Contract enforced | No |
| Tags | `driver_isolation` |
| Upstream | [`fct_driver_isolation_lap`](./fct_driver_isolation_lap), [`int_driver_isolation_stint_tyre`](../int/int_driver_isolation_stint_tyre), [`fct_driver_isolation_pair_lap`](./fct_driver_isolation_pair_lap) |

**19 tests** [guard](/transform/ci/overview) this model  -  16 generic, 3 singular.

## Columns

| Column | Type | Nullable | Tests | Description |
| - | - | - | - | - |
| `driver_race_id` | | Yes | [`not_null`](/transform/ci/structural), [`unique`](/transform/ci/structural) | PK: dbt\_utils.generate\_surrogate\_key(race\_year, race\_id, driver\_id), the same recipe as fct\_driver\_skill\_features.driver\_race\_id, so the two join directly. |
| `race_year` | | Yes | [`not_null`](/transform/ci/structural) | Season. |
| `race_id` | | Yes | [`not_null`](/transform/ci/structural) | FastF1 event id, e.g. 2021\_8. |
| `driver_id` | | Yes | [`not_null`](/transform/ci/structural) | Driver (three-letter code). In the pair mart, the focal driver whose gains the row reports. |
| `constructor_id` | | Yes | [`not_null`](/transform/ci/structural) | Constructor (stg\_laps.constructor\_id). |
| `era` | | Yes | | Regulation era: pre\<era\_boundary> or post\<era\_boundary> (var era\_boundary, 2022). |
| `car_iso_s` | | Yes | | Isolation car term, s, NEGATIVE = FASTER than the race's lap-weighted car (int\_constructor\_car\_fe\_isolation). NULL when not identified. |
| `car_term_source` | | Yes | [`accepted_values`](/transform/ci/range-and-domain) | Where car\_iso\_s came from: driver\_id (fitted per-era), unidentified (multiple components in race), not\_estimated (pyfixest singleton), or no\_fit\_row (no row in the fit). |
| `n_stints` | | Yes | [`not_null`](/transform/ci/structural) | Stints with Ω laps in the race. |
| `n_laps` | | Yes | [`not_null`](/transform/ci/structural) | Ω laps in the group. |
| `pace_isolated_gain_s` | | Yes | | Mean p over the race's Ω laps, s/lap, positive = faster. |
| `n_pure_laps` | | Yes | [`not_null`](/transform/ci/structural) | Non-extrapolated laps with pure in the group (the pure rating's n). |
| `n_pair_laps` | | Yes | [`not_null`](/transform/ci/structural) | Pair-laps in the group (the relative rating's n). |
| `n_relative_laps` | | Yes | [`not_null`](/transform/ci/structural) | Distinct laps with at least one peer in the group. |
| `n_teammate_pair_laps` | | Yes | [`not_null`](/transform/ci/structural) | Of n\_pair\_laps, those against a teammate. |
| `relative_pace_raw_gain_s` | | Yes | | t(peer) - t(driver), s/lap: model-free, POSITIVE = the driver faster. In aggregates, the mean over pair-laps. |
| `identity_n_pair_laps` | | Yes | | Pair-laps with both car terms, over which the identity\_\* contributions are computed. |
| `identity_relative_pace_gain_s` | | Yes | | Mean relative\_pace\_gain\_s over the identity\_n\_pair\_laps rows, s/lap. = the three identity\_\* contributions plus the group's mean tyre-age bias (the seed's pricing of the peers' age gap, at most the match tolerance; not published, 0 when every pair is on the same tyre age). W63 design 2, 2026-10-03. |
| `identity_pace_gap_gain_s` | | Yes | | Contribution: SUM(pace\_gap) over rows with both car terms / identity\_n\_pair\_laps, s/lap. |
| `identity_car_advantage_gain_s` | | Yes | | Contribution: mean car\_advantage\_gain\_s over identity rows, s/lap; > 0 = the driver's car faster. |
| `identity_traffic_advantage_gain_s` | | Yes | | Contribution: mean traffic\_advantage\_gain\_s over identity rows, s/lap; > 0 = he lost less to dirty air. |
| `tyre_offset_vs_field_s` | | Yes | | Mean tyre\_offset\_vs\_field\_s over the race (context). |
| `lift_coast_excess_share` | | Yes | | Mean lift\_coast\_excess\_share over the race (context). |
| `dirty_air_lap_share` | | Yes | | Share of the group's laps with is\_dirty\_air\_lap. |
| `pure_skill_gain_s` | | Yes | | Pure pace skill, mean over the race's non-extrapolated laps at driver-race grain, s/lap, POSITIVE = faster / better (raw, before shrinkage). Includes pure\_season\_offset\_gain\_s. |
| `pure_season_offset_gain_s` | | Yes | [`not_null`](/transform/ci/structural) | The declared season-level offset inside pure\_skill\_gain\_s, s/lap (positive = the season's pure is raised; 0 for seasons without one). W33 Option A, 2026-09-30: 2018 +0.37 s, so a 2018 pure value sits at the 2019-2024 seasons' level. It does not change any within-season ranking or gap. Cross-season comparisons remain caveated (docs/decomposition/driver-isolation.mdx, Limitations). |
| `pure_skill_se_s` | | Yes | | SE of pure\_skill\_gain\_s, s/lap (see the model header for the formula). |
| `pure_skill_lambda` | | Yes | | Reliability tau^2 / (tau^2 + SE^2) in \[0, 1]; tau^2 per (season, rating) at this grain. 1 when SE = 0. |
| `pure_skill_shrunk_gain_s` | | Yes | | lambda \* pure\_skill\_gain\_s: shrunk toward 0 (the ratings are field- or peer- centred), s/lap. |
| `pure_skill_confidence_pct` | | Yes | | ROUND(100 \* lambda \* method\_score); NULL until WI-16b validates the method (seed driver\_isolation\_method\_scores). |
| `pure_skill_trust_label` | | Yes | [`accepted_values`](/transform/ci/range-and-domain) | solid (>= 75), indicative (50-75), thin (25-50), suppress (\< 25, grade F or no lambda), unvalidated (no method score yet). NULL without a raw value. |
| `relative_pace_gain_s` | | Yes | | Relative pace vs same-strategy peers, mean over the race's pair-laps at driver-race grain, s/lap, POSITIVE = faster / better (raw, before shrinkage). |
| `relative_pace_se_s` | | Yes | | SE of relative\_pace\_gain\_s, s/lap (see the model header for the formula). |
| `relative_pace_lambda` | | Yes | | Reliability tau^2 / (tau^2 + SE^2) in \[0, 1]; tau^2 per (season, rating) at this grain. 1 when SE = 0. |
| `relative_pace_shrunk_gain_s` | | Yes | | lambda \* relative\_pace\_gain\_s: shrunk toward 0 (the ratings are field- or peer- centred), s/lap. |
| `relative_pace_confidence_pct` | | Yes | | ROUND(100 \* lambda \* method\_score); NULL until WI-16b validates the method (seed driver\_isolation\_method\_scores). |
| `relative_pace_trust_label` | | Yes | [`accepted_values`](/transform/ci/range-and-domain) | solid (>= 75), indicative (50-75), thin (25-50), suppress (\< 25, grade F or no lambda), unvalidated (no method score yet). NULL without a raw value. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.