How MOT prognosis figures are calculated

Last updated · OBDCode UK editorial

This page is the public method for the failure-axis and advisory-axis follow-up on this site. The functions that compute the intervals and the age-standardised rates are published as Python at the bottom. About still states the site-wide sources; this page does not replace it.

Cohort

Each vehicle’s earliest 2024 normal test (test type NT, Class 4) is the index. There is no test_id tie-break on that first-NT window. DuckDB does not preserve insertion order, so a re-run can move a handful of cars. The live engine-MIL count is the sealed failures.json figure of 391,384 unique vehicles, not a later writer-run. Do not treat a later count as a correction of that pin.

Several DVSA reason-for-rejection codes print the same words. Those codes are pooled, and a car is counted once. The control is every other Class 4 vehicle whose index test did not fail on that wording.

Binomial rates and Wilson intervals

A published percentage on a repair page is a binomial rate: successes / n. The interval is a Wilson score interval at z = 1.96 (labelled 95%). Bounds are computed on the fraction, then printed to one decimal with an en-dash. The interval still prints when both bounds round to the same tenth.

Engine MIL same-item fail: 14.8% (95% CI 14.7–14.9) from 57856 / 391384. Gone events are n − retested (here 78,367). They are not rebuilt as round(gone_rate × n) even when that rounding happens to hit the same integer.

The interval does not attach to a difference in percentage points (gone_gap_pp), a lift, an odometer percentile, or a days-to-pass quantile. Those are not binomial rates. An age-standardised rate is a weighted sum of five binomial rates; it is not itself a binomial proportion and does not take this interval.

The exact function: wilson.py.

Advisory-axis intervals use the same function on a different population: cars whose index test was a pass (P or PRS). The denominator is passed_2024 (24,206,302), not the failure-axis Class 4 total. Control n is that pass total minus the advisory cohort. Gone events are still n − retested.

Age-standardisation

Cars that failed on the engine MIL have median age 12.0 years at the 2024 test. The Class 4 fleet that year is younger. A crude gap versus the unmatched control therefore mixes the certificate line with age.

The standard population is Class 4 vehicles at their earliest 2024 NT with a known age, in bands 3–5, 5–8, 8–12, 12–16, and 16+. Unknown age is excluded from the standard and from the age-specific study rates. The same weights are used for the treated group and for the control. A band below 300 cars is omitted; the standardised rate is then withheld. Remaining bands are not re-weighted.

Both numbers are labelled. Crude is the all-fuels rate already in the answer box (age still in the number). Age-standardised (Class 4 earliest-2024-NT) is the direct rate on that standard. The crude 14.78% figure is not an age-adjusted rate.

The exact function: standardise.py.

Suppression floors

A rate is omitted, not shown as zero, below these live floors:

Postcode area PE is Peterborough. It is not petrol. Petrol is PE only in the fuel file. The two files are not mixed. Diesel is DI. ED and GD are not diesel. Gone is a missing later test, not a DVSA scrappage flag.

Replication

The same failure-axis pipeline was re-run on a 2023 → 2024 window and stored as a sibling under replication-2023/. That folder is not live L0/L1/L2. It does not correct the sealed engine-MIL pin of 391,384.

Presence gap Δ17: 3 wordings appear only in the 2024 → 2025 primary file (no prior-window analogue); 14 appear only in the replica. Engine MIL is in both windows: 391,384 cars in 2024 → 2025 and 380,109 in 2023 → 2024. Same-item repeat replicates (14.78% vs 14.88%). Counts are test records, not a unique-vehicle census beyond the pin definition on this page.

A headline number that fails this replication is withdrawn or demoted. The replica is checkable; it is not a second pin.

What this page is not

It is not a prediction about one car. It is not a garage outcome. A later passed retest is a passed retest. Same-day PRS is station rectification. The engine-management-light body page is a later layer and is not this URL.

The compiled tables for edition 2026.1 are on the dataset page. Download the tables there.

Source: DVSA Anonymised MOT tests and results, 2024 and 2025 extracts (Class 4). Contains public sector information licensed under the Open Government Licence v3.0. Functions: wilson.py, standardise.py.