03
What is a used car actually worth?
Every one of the 119 value deductions in the model survived an independent attempt to refute it before it was allowed in.
- Python
- SQL
- idempotent seeds
- adversarial review
The valuation grid is 84 baseline cells, one per year, engine and mileage band, plus 119 researched deductions in zloty, one for every inspection finding at every severity. The research ran as a governed fleet: finders proposed numbers, a matching set of verifiers were told to break those numbers, and a plausibility auditor held back anything that could not be defended.
The part I am most pleased with is not the model, it is the loader. It refuses to half load. Row count, currency, price sanity and severity ordering are all checked inside the transaction, and any violation rolls the whole thing back. A worse fault priced above a milder one is not a rounding error, it is a broken model, and the database will not accept it.
-- Self-checks: abort on a dropped slug, a banned dash, a bad band, or broken -- severity ordering within an item. DO $$ DECLARE bad integer; cnt integer; BEGIN SELECT count(*) INTO cnt FROM fmv_deductions WHERE source = 'fleet_curated_2026_06'; IF cnt <> 119 THEN RAISE EXCEPTION 'expected 119 fmv_deduction rows, found %', cnt; END IF; SELECT count(*) INTO bad FROM fmv_deductions a JOIN fmv_deductions b ON a.inspection_item_id = b.inspection_item_id AND a.severity < b.severity WHERE a.pln_low > b.pln_low OR a.pln_high > b.pln_high; IF bad > 0 THEN RAISE EXCEPTION '% severity-monotonicity violations (a milder grade priced above a worse one)', bad; END IF; END $$;
What the market pays, by build year
The band is the honest part. There is no single price for a used car, so the model carries a range and shows it, rather than inventing a confident number.
Source: fmv_baselines, 84 rows, 1.6 Valvematic between 80 000 and 130 000 km. Manual market curation, sample sizes 8 to 18 per cell. PLN.
How it was done
Price a range, never a point
There is no single price for a used car. Every cell carries a low and a high, and the interface shows the band rather than collapsing it into one confident looking number.
Have someone try to break each figure
Researchers proposed numbers and a matching set of verifiers were briefed to refute them, not to confirm them. A plausibility auditor held back anything that could not be defended.
Make the loader refuse bad data
Row count, currency, price sanity and severity ordering are all asserted inside the transaction. A worse fault priced below a milder one is not a rounding error, it is a broken model, and the load aborts rather than half completing.
Make the load reproducible
The seed is generated from a committed research file rather than hand edited, so re running it reproduces exactly the same grid, including the corrections the audit forced.
What this does not tell you
Every dataset has an edge. Here is where this one stops, said plainly, because a number you have to qualify is worth more than one you do not.
- Of the 84 baseline cells, 44 are grounded in observed listings and 40 are extrapolated to fill combinations the market rarely offers. The extrapolated cells are flagged in the data rather than presented as observations.
- Sample sizes behind the observed cells run from 8 to 18 listings. That is enough to place a band, not enough to claim precision.
- It reflects asking prices in one market at one time. It is a guide for a negotiation, not a valuation, and it is stated as such wherever it is shown.