> ## 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_lap

> Driver isolation per Ω lap with the rolling rating: the lap's three ratings, its tier-3 peer aggregates and identity split, and a trailing window per rating (the Ω laps of the same stint with lap_number in [l - 4, l]; never forward, T44), each NULL below var('isolation_window_min_laps') contributing laps, with SE, lambda, a shrunk value, confidence_pct and trust_label.

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

Driver isolation per Ω lap with the rolling rating: the lap's three ratings, its tier-3 peer aggregates and identity split, and a trailing window per rating (the Ω laps of the same stint with lap\_number in \[l - 4, l]; never forward, T44), each NULL below var('isolation\_window\_min\_laps') contributing laps, with SE, lambda, a shrunk value, confidence\_pct and trust\_label. The 5-lap window is about half signal: the 'is he on it right now' number, not the 'who is better' number; verdicts belong at stint or race grain. 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_pair_lap --> fct_driver_isolation_lap
  int_driver_isolation_lap_values --> fct_driver_isolation_lap
  int_lap_telemetry_aggregates --> fct_driver_isolation_lap
  fct_driver_isolation_lap --> fct_driver_isolation_race
  fct_driver_isolation_lap --> fct_driver_isolation_stint
  style fct_driver_isolation_lap fill:#e40404,stroke:#e40404,color:#fff
```

## Overview

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

**28 tests** [guard](/transform/ci/overview) this model  -  23 generic, 5 singular.

## Columns

| Column | Type | Nullable | Tests | Description |
| - | - | - | - | - |
| `lap_id` | | Yes | [`not_null`](/transform/ci/structural), [`unique`](/transform/ci/structural) | Lap identifier (int\_lap\_residual\_decomposed.lap\_id). |
| `stint_id` | | Yes | [`not_null`](/transform/ci/structural) | Stint identifier (int\_stint\_geometry.stint\_id). |
| `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). |
| `stint_number` | | Yes | | Stint ordinal within the driver's race (int\_stint\_geometry). |
| `lap_number` | | Yes | [`not_null`](/transform/ci/structural) | Race lap number. Tiers 1 and 3 match cars on it, which is why 2020\_1 is excluded (W18). |
| `compound` | | Yes | [`not_null`](/transform/ci/structural) | Dry compound of the stint (INTERMEDIATE and WET laps are not in Ω). |
| `age_in_stint` | | Yes | [`not_null`](/transform/ci/structural) | Tyre age in laps (int\_stint\_geometry). |
| `valid_lap_in_stint` | | Yes | | Ordinal among the stint's valid laps; early vs mid phase splits at 5/6. |
| `laps_past_cliff` | | Yes | | Laps beyond the compound seed's cliff onset (0 before it); drives tyre\_phase = cliff. Never NULL in Ω. |
| `era` | | Yes | | Regulation era: pre\<era\_boundary> or post\<era\_boundary> (var era\_boundary, 2022). |
| `tyre_phase` | | Yes | [`accepted_values`](/transform/ci/range-and-domain) | early (laps\_past\_cliff = 0, valid\_lap\_in\_stint \<= 5), mid (laps\_past\_cliff = 0, >= 6) or cliff (laps\_past\_cliff > 0), from the seed's onset, so never selected on the residual. |
| `is_recovery` | | Yes | | TRUE on the first var('isolation\_recovery\_laps') valid laps of a non-dirty-air run directly after >= var('isolation\_recovery\_min\_dirty\_run') consecutive dirty-air valid laps in the stint. Backward-looking only. |
| `stint_phase` | | Yes | [`not_null`](/transform/ci/structural), [`accepted_values`](/transform/ci/range-and-domain) | 'recovery' when is\_recovery, else tyre\_phase (T45). |
| `air_state_dominant` | | Yes | | int\_lap\_air\_state.air\_state\_dominant (context; dirty\_air drives the recovery overlay). |
| `is_dirty_air_lap` | | Yes | | TRUE when air\_state\_dominant = 'dirty\_air'. |
| `field_n` | | Yes | | Ω laps on this (race, lap); >= var('isolation\_min\_field\_n') by construction (T40). |
| `lap_time_s` | | Yes | | Raw lap time, s. |
| `compound_component_s` | | Yes | | C: the compound seed's expected cost of this tyre state, s, positive = slower (int\_lap\_residual\_decomposed). Never COALESCEd: an unknown tyre is not in Ω. |
| `dirty_air_tax_s` | | Yes | | D: dirty-air tax, s, positive = slower (int\_lap\_residual\_decomposed). |
| `y_s` | | Yes | | x\_s minus the lap's Ω field median of x\_s, s. POSITIVE = SLOWER than the field- typical car and driver on the lap. Invariant to the field base, fuel, rubber and ambient terms, which depend on (race, lap) only (T41). |
| `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). |
| `tyre_offset_vs_field_s` | | Yes | | compound\_component\_s minus the lap's Ω field median of it, s; positive = this tyre state costs more than the field's. The strategy position on the lap: team-dominated context, not a rating. |
| `lift_coast_share` | | Yes | | int\_lap\_telemetry\_aggregates.lift\_coast\_share (context; fuel- and tyre-saving are indistinguishable in it). |
| `lift_coast_excess_share` | | Yes | | lift\_coast\_share minus the lap's Ω field median of it (context for WI-16b's V2d; aggregates are means). |
| `pace_isolated_gain_s` | | Yes | | p = -(y\_s - car\_iso\_s), s/lap. POSITIVE = FASTER than the field on an equal car, tyre state, traffic and fuel: the driver plus noise, everything modelled removed. NULL without a car term (never a car term of 0). |
| `pure_skill_gain_s` | | Yes | | Tier 1, s/lap, POSITIVE = FASTER: pace\_isolated\_gain\_s plus the declared season offset (int\_driver\_isolation\_lap\_values.pure\_season\_offset\_gain\_s; 2018 +0.37 s, W33). Within a season it ranks and differences exactly like p. NULL without a car term. On cliff laps it is not a driver measurement (pure\_is\_extrapolated) and pure aggregates skip it. |
| `pure_is_extrapolated` | | Yes | | TRUE on cliff-tyre laps (tyre\_phase = 'cliff'): the lap time there is dominated by the tyre, so pure\_skill\_gain\_s is not a driver measurement; aggregates exclude these laps. |
| `season_sigma_w_s` | | Yes | | Pooled within-stint SD of p around its stint line for the season, s. |
| `season_neff_factor` | | Yes | | f = (1 - rho+)/(1 + rho+), rho+ = GREATEST(season\_rho1, 0): the effective-sample factor every SE uses. NULL if rho cannot be measured. |
| `n_peers` | | Yes | [`not_null`](/transform/ci/structural) | Same-strategy peers on this lap (pair-mart rows with this lap\_id); 0 when none. |
| `n_teammate_peers` | | Yes | [`not_null`](/transform/ci/structural) | Of n\_peers, how many are teammates. |
| `relative_pace_gain_s` | | Yes | | Tier 3 on this lap: mean relative\_pace\_gain\_s over its peers, s/lap, positive = faster than same-strategy peers. NULL with no peer. |
| `relative_pace_raw_gain_s` | | Yes | | Mean raw gap over this lap's peers, s/lap. Equal to relative\_pace\_gain\_s since W63 design 2 (2026-10-03). |
| `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. |
| `window_first_lap_number` | | Yes | | First lap number the window could span (the earliest Ω lap in it). |
| `window_n_laps` | | Yes | [`not_null`](/transform/ci/structural) | Ω laps in the trailing window (same stint, lap\_number in \[l - (var('isolation\_window\_laps') - 1), l]). |
| `window_mixed_phase` | | Yes | [`not_null`](/transform/ci/structural) | TRUE when the window's laps span more than one stint\_phase; the window is labelled with this lap's. |
| `window_n_pure_laps` | | Yes | [`not_null`](/transform/ci/structural) | Non-extrapolated laps with pure in the window; pure\_skill\_5lap\_gain\_s is NULL below var('isolation\_window\_min\_laps'). |
| `window_n_pair_laps` | | Yes | [`not_null`](/transform/ci/structural) | Pair-laps in the window (SUM of n\_peers); relative\_pace\_5lap\_gain\_s is NULL below the floor. |
| `window_n_relative_laps` | | Yes | [`not_null`](/transform/ci/structural) | Laps in the window with at least one peer. |
| `pure_skill_5lap_gain_s` | | Yes | | Pure pace skill, mean over the window's non-extrapolated laps at trailing 5-lap window grain, s/lap, POSITIVE = faster / better (raw, before shrinkage). |
| `pure_skill_5lap_se_s` | | Yes | | SE of pure\_skill\_5lap\_gain\_s, s/lap (see the model header for the formula). |
| `pure_skill_5lap_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_5lap_shrunk_gain_s` | | Yes | | lambda \* pure\_skill\_5lap\_gain\_s: shrunk toward 0 (the ratings are field- or peer- centred), s/lap. |
| `pure_skill_5lap_confidence_pct` | | Yes | | ROUND(100 \* lambda \* method\_score); NULL until WI-16b validates the method (seed driver\_isolation\_method\_scores). |
| `pure_skill_5lap_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_5lap_gain_s` | | Yes | | Relative pace vs same-strategy peers, SUM(relative \* n\_peers) / SUM(n\_peers) at trailing 5-lap window grain, s/lap, POSITIVE = faster / better (raw, before shrinkage). |
| `relative_pace_5lap_se_s` | | Yes | | SE of relative\_pace\_5lap\_gain\_s, s/lap (see the model header for the formula). |
| `relative_pace_5lap_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_5lap_shrunk_gain_s` | | Yes | | lambda \* relative\_pace\_5lap\_gain\_s: shrunk toward 0 (the ratings are field- or peer- centred), s/lap. |
| `relative_pace_5lap_confidence_pct` | | Yes | | ROUND(100 \* lambda \* method\_score); NULL until WI-16b validates the method (seed driver\_isolation\_method\_scores). |
| `relative_pace_5lap_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.