What's a residual? (and what's new in v1 vs the v2 Octavia tool)
Residual = actual price − expected price.
"Expected price" comes from a least-squares regression fitted on the currently filtered subset:
expected_price = intercept
+ b₁ × mileage
+ b₂ × age_months
+ Σ trim dummies
+ Σ body dummies
- Negative residual → priced below what comparable miles/age cars in the same trim & body sell for.
- Positive residual → priced above what miles/age/trim/body would suggest.
Why dummies for trim & body? The v2 Octavia tool warned readers to "filter to a single trim & body before reading residuals," because pooling SE and vRS into one regression makes vRS look overpriced. v1 fixes that: trim and body are absorbed into the regression as fixed effects, so the residual is always "cheaper or dearer than peers holding trim and body constant." You don't need to pre-filter.
Worked example. An Octavia · vRS · Estate, 12-month-old, 10,000-mile, listed at £30,000. The regression on Octavia says a vRS Estate at those miles & age "should" sell for £33,000. Residual = 30,000 − 33,000 = −£3,000 — i.e. £3,000 cheaper than its vRS Estate peers.
Negotiation signals (new in v1). Two extra panels show cars where the dealer is likely under pressure: longest-listed (high days on market) and biggest recent price drop. These come from the Marketcheck listing-tracker. A car listed 90+ days that has already dropped its price is a stronger negotiation candidate than one listed last week.
Caveats. The regression ignores condition, options, colour, equipment, location bias, and dealer reputation. It doesn't observe what the buyer can see in person. The weighted preference score is a different metric — it ranks cars by how well they match your stated price/miles/age priorities, not by whether they're under-/over-priced relative to peers. The two can disagree, which is informative.
Sample limits. Marketcheck's free tier caps each query at the 500 most-recently-seen listings per model. For models with more active inventory than that, this dashboard shows the freshest 500. Active inventory by model is shown in the num_found column of the model dropdown.