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

> One row per stint.

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

One row per stint. Pit strategy feature table: compound, stint length, tyre age progression, thermal load buildup, cumulative dirty air tax, cliff onset lap, and pace degradation slope. Used to model pit strategy decision: is it time to box? Includes tyre\_management\_score and pit\_decision\_class derived from int\_pit\_strategy\_value.

## Lineage

```mermaid theme={null}
flowchart LR
  int_dirty_air_tax_component --> fct_stint_features
  int_lap_anomaly_flags --> fct_stint_features
  int_lap_residual_decomposed --> fct_stint_features
  int_lap_thermal_proxy --> fct_stint_features
  int_pit_strategy_value --> fct_stint_features
  int_stint_end_regime --> fct_stint_features
  int_stint_geometry --> fct_stint_features
  stg_laps --> fct_stint_features
  style fct_stint_features fill:#e40404,stroke:#e40404,color:#fff
```

## Overview

| Property          | Value                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Layer             | `marts`                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| Family            | [Marts](/transform/families/marts)                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Contract enforced | No                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Tags              | `feature_engineering`, `simulation`                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Upstream          | [`int_stint_geometry`](../int/int_stint_geometry), [`int_stint_end_regime`](../int/int_stint_end_regime), [`stg_laps`](../stg/stg_laps), [`int_lap_thermal_proxy`](../int/int_lap_thermal_proxy), [`int_dirty_air_tax_component`](../int/int_dirty_air_tax_component), [`int_lap_anomaly_flags`](../int/int_lap_anomaly_flags), [`int_lap_residual_decomposed`](../int/int_lap_residual_decomposed), [`int_pit_strategy_value`](../int/int_pit_strategy_value) |

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

## Columns

| Column                                | Type | Nullable | Tests                                                                                                          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------------------------------- | ---- | -------- | -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `stint_id`                            |      | Yes      | [`not_null`](/transform/ci/structural), [`unique`](/transform/ci/structural)                                   | PK from int\_stint\_geometry                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `driver_id`                           |      | Yes      | [`not_null`](/transform/ci/structural)                                                                         | FastF1 three-letter driver code (e.g. VER, HAM).                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `race_id`                             |      | Yes      | [`not_null`](/transform/ci/structural)                                                                         | Race identifier (numeric FastF1 event id cast to string).                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `race_year`                           |      | Yes      | [`not_null`](/transform/ci/structural)                                                                         | Season year.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `stint_length_laps`                   |      | Yes      | [`not_null`](/transform/ci/structural), [`expect_column_values_to_be_between`](/transform/ci/range-and-domain) | Total laps in this stint                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `compound`                            |      | Yes      |                                                                                                                | Tyre compound for this stint                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `starting_tyre_age_laps`              |      | Yes      |                                                                                                                | Tyre age at the start of this stint (before first lap)                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `cumulative_thermal_load_end`         |      | Yes      |                                                                                                                | EW cumulative thermal load at the end of the stint                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `cumulative_dirty_air_tax_s`          |      | Yes      |                                                                                                                | Sum of dirty air tax across all laps in the stint                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `cliff_lap_in_stint`                  |      | Yes      |                                                                                                                | Lap position within stint where cliff is first detected (NULL if no cliff)                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `tyre_management_score`               |      | Yes      | [`expect_column_values_to_be_between`](/transform/ci/range-and-domain)                                         | Tyre management score: actual end-of-stint driver residual normalised against the optimal pit opportunity cost. Low score = good management. Clamped to \[-3, 3] - it is a ratio, and its denominator can be arbitrarily small, so it is unbounded in whichever direction that happens from. Only the ceiling existed until 2026-08-23.                                                                                                                                                                                 |
| `end_of_stint_pace_falloff_s_per_lap` |      | Yes      |                                                                                                                | OLS slope of driver\_skill\_residual\_s over last 3 laps. NULL when short\_stint\_flag = TRUE.                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `short_stint_flag`                    |      | Yes      | [`not_null`](/transform/ci/structural)                                                                         | TRUE when stint\_length\_laps \< 3 (slope is NULL/unreliable)                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| `pit_decision_class`                  |      | Yes      |                                                                                                                | Pit strategy decision verdict from int\_pit\_strategy\_value (optimal / overran / undercut\_forced / early).                                                                                                                                                                                                                                                                                                                                                                                                            |
| `is_censored_stint`                   |      | Yes      | [`not_null`](/transform/ci/structural), [`accepted_values`](/transform/ci/range-and-domain)                    | Passed through from int\_stint\_end\_regime, which owns the definition. TRUE when this is the driver's last stint of the race, so it ended at the flag or at retirement rather than at a tyre change. Remaining stint life on these laps is a lower bound, not an observation. Consumed by the stint-life survival model (ml/src/features.py) to set the AFT upper bound to +inf, and by the blind-test scoreboard to report censored and uncensored stints apart. Never a model feature.                               |
| `end_regime`                          |      | Yes      | [`not_null`](/transform/ci/structural), [`accepted_values`](/transform/ci/range-and-domain)                    | Passed through from int\_stint\_end\_regime. Track regime in force on the stint's final lap (green / safety\_car / vsc / red\_flag), severity precedence red\_flag > safety\_car > vsc. Recorded for censored stints too, where it is a fact about the lap rather than the reason the stint ended - read stint\_end\_cause for that.                                                                                                                                                                                    |
| `stint_end_cause`                     |      | Yes      | [`accepted_values`](/transform/ci/range-and-domain)                                                            | Passed through from int\_stint\_end\_regime. Why the stint ended: green\_pit, sc\_pit, vsc\_pit, red (the four uncensored causes) or race\_end, retirement (the two censored ones). 28.8% of uncensored stints are sc\_pit / vsc\_pit / red, i.e. the pit wall taking a free stop rather than the tyre reaching its limit, so anything fitting or scoring stint life reads this alongside is\_censored\_stint. NULL on the 325 2018 stints built from laps FastF1 never assigned a stint number. Never a model feature. |
| `end_cause_confidence`                |      | Yes      | [`not_null`](/transform/ci/structural), [`accepted_values`](/transform/ci/range-and-domain)                    | Passed through from int\_stint\_end\_regime. 'observed', 'inferred' (severity precedence had to choose, the pit marker is missing, or disqualification hides whether the driver was running) or 'unassigned\_stint' (the row is not a stint).                                                                                                                                                                                                                                                                           |
