UK home insurance · market pricing

How close can you get to twelve insurers’ prices?

A model is trained on nine weeks of quotes, then asked to price three weeks it has never seen. This is what it got right, what it got wrong, and why.

Code, data pipeline and method: github.com/SMcode-source/uk-home-insurance-market-pricing

SYNTHETIC
Every figure here comes from a synthetic sample extract, not real market data. The generator produces genuine multiplicative rating structure, minimum-premium floors, per-brand declines and tactical price drift, which is what makes the measurements meaningful — but the brand names are labels on invented data. Nothing here describes any real insurer’s pricing.

The headline

Typically within about 4% of the actual premium

Across 7,353 quotes in three held-out weeks, the median prediction lands 4.1% away from what the insurer actually charged. The average miss is larger, at 6.0%, because a minority of quotes are badly wrong and pull the mean up.

4.1%Median absolute error — the typical quote
6.0%Mean absolute error — pulled up by the tail
82%Of quotes land within 10% of the real price
0.6%Overall bias — no systematic over- or under-pricing

Those are the figures for the system as it would actually run, re-reading the panel each week before pricing the next one. Held fully blind for all three weeks instead — no refresh at all — it degrades to 4.5% median, 7.0% mean and 77% within 10%. Both numbers appear throughout this page, and the difference between them is the subject of the section on Churchill.

Read this before the numbers

“Accurate” has two meanings here and they do not move together. Getting the premium right is what this page measures. Getting the cheapest five in the right order is a different task, and the model identifies the actual cheapest provider only 58% of the time even while sitting within 4% on price — because when a dozen insurers quote within a few pounds of each other, a 2% error reshuffles the ranking.

Provider by provider

Accuracy is not evenly spread

Five providers are predicted almost exactly. One is not. The bar is the average absolute error; the darker portion is what remains once the model is allowed to see each week before pricing the next.

With weekly refresh Recovered by the refresh
Admiral3.2%←3.1%
Policy Expert3.2%←3.3%
Homeprotect3.5%←3.5%
AXA4.0%←4.0%
Aviva3.9%←4.6%
Esure4.6%←4.6%
NFU Mutual5.3%←6.4%
Saga5.9%←7.0%
Direct Line6.8%←7.1%
Ageas5.9%←7.2%
LV=7.1%←8.3%
Churchill10.7%←14.2%
0%5%10%15%
Mean absolute percentage error per provider on the three held-out weeks. Providers are ordered by how hard they are to predict.

Level error versus scatter

Two very different failures hide inside a single accuracy number, and they call for different fixes. Bias is the model having a provider’s whole price level wrong — a correctable, systematic offset. Spread is what is left after that offset is removed, and it is the genuinely hard part.

Held-out weeks 9–11, batch evaluation
ProviderQuotesMean premiumBiasSpread (SD)Mean abs. errorWithin 10%Avg miss
Admiral395£208−0.5%5.23.11%94%£6
Policy Expert421£203−0.5%6.83.30%95%£5
Homeprotect352£422+1.3%6.53.47%95%£18
AXA724£214+0.7%7.24.05%90%£8
Aviva750£272+3.3%5.74.56%93%£13
Esure272£211−0.4%8.14.62%89%£9
NFU Mutual345£334+5.9%7.36.37%83%£25
Saga721£386−5.8%9.97.02%82%£32
Direct Line1,063£475−4.8%9.67.09%79%£36
Ageas500£273+6.8%7.77.23%78%£23
LV=726£300−4.0%9.48.26%58%£32
Churchill1,084£363−14.8%10.514.24%36%£64
All7,353£323−0.6%10.56.97%77%£27
Bias is the median signed error: negative means the model quotes below what the provider charged. Spread is the standard deviation of that signed error, so it is the scatter that would remain if the bias were corrected. Admiral, Policy Expert, Esure, Homeprotect and AXA sit within ±1.3% on bias, so their error is essentially all scatter — the model is genuinely predicting their price, not just its neighbourhood.

Where it breaks

Churchill did something the training data could not have shown

Churchill is the worst-predicted provider by a wide margin, at nearly 15% average error against a field where the next worst is 8%. It is worth understanding exactly why, because the obvious explanations are all wrong.

0
1
2
3
4
5
6
7
8
9
10
11
Weeks 0–8 trained · weeks 9–11 held out
How far Churchill’s actual prices sat above the model’s, week by week. The model tracks Churchill to within 0.15% in every single training week, including the last one — then Churchill repriced upward the moment the data ran out and kept moving away, roughly 9% adrift in the first held-out week and more than 20% by the third.

This rules out the comfortable explanations. It is not that Churchill is a hard risk mix, or that the model under-fits it, or that the boundary week was averaged away — the fit at week 8 is essentially perfect. It is a structural break: Churchill changed its prices after the training window closed, and its fitted trend over weeks 0–8 pointed the other way, at −1.5% per week.

What this means for any fix

Weeks 0–8 contain no information about a week-9 break. Any change that improves Churchill’s holdout number using only that data is not a fix, it is fitting the answer. Two earlier attempts to extrapolate harder both made Churchill worse — the second pushed its error from 14.6% to 15.9% — precisely because they projected a downward trend into a market that was moving up.

What is actually fixable: the operating assumption

The batch test withholds all three weeks at once. That is the right test of pure extrapolation and the wrong model of how the capability runs: the panel is re-collected every week, so week 9’s outturn is in hand before week 10 is priced. Feeding that back in is not cheating, it is the job.

The model now supports exactly that, and only that — it re-reads each provider’s price level from the newly observed week and carries it forward. The point model, the shape of every curve and every interaction are left untouched.

Churchill, week by week
Holdout weekBias, blindBias, weekly refreshError, blindError, refresh
Week 9−9.5%−9.5%8.51%8.51%
Week 10−19.3%−11.6%16.20%11.93%
Week 11−23.3%−6.0%17.99%11.71%
Week 9 is identical under both regimes by construction — nothing has been observed yet, so there is nothing to correct. Every gain appears at weeks 10 and 11, which is the evidence that the mechanism is doing what it claims rather than quietly leaking the answer. Churchill’s residual error never reaches zero because it is still climbing 8–9% a week and the correction is always one week behind.
6.97 → 5.97Mean absolute error, all providers (%)
14.2 → 10.7Churchill mean absolute error (%)
77 → 82Quotes within 10% of actual (%)
109 → 84Variance of percentage error

How the number is produced

Eleven approaches, scored only on data they never saw

Nothing here is scored in-sample and no split is random. Two holdouts ask different questions, and the answers disagree — which is the point of running both.

Leaderboard — median absolute error, %
ApproachTemporalSpatialWithin 10% (temporal)Fit time
Boosted trees per brand, drift-corrected4.4811.8677%105s
Boosted trees per brand4.6011.8676%9s
Random forest5.3012.6169%32s
Boosted trees, pooled5.6310.2273%5s
CatBoost, pooled6.298.8671%6s
Explainable boosting machine, per brand6.7211.5669%865s
Explainable boosting machine, pooled9.9113.1950%190s
Ridge on log premium13.4711.8837%<1s
Per-brand geometric mean (baseline)42.3139.5111%<1s
Market geometric mean (baseline)47.3342.8114%<1s
The two baselines exist to make the rest legible: quoting every risk at the market average is 47% out, so a real rating model has to beat that before it has done anything at all. Note that the winner flips between splits — CatBoost is best at unseen geography and mid-table at unseen weeks.

The interpretability question, measured

An explainable boosting machine is additive: it produces a readable table of one curve per rating factor, which is what an actuary can actually argue with. Unrestricted boosted trees can represent caps, collars and three-way interactions that an additive model structurally cannot. The gap between them is a measurement of how much non-additive structure the market really contains.

+2.13Temporal split: points of error the additive model gives up
−0.30Spatial split: the additive model is marginally ahead

The sign flips. On unseen weeks there is real non-additive structure worth 2 points; on unseen geography the interpretable model costs nothing and is slightly better. That is a finding about the market, not a verdict on either model — and it means the choice between them is a decision about which risk you care about, not a race.

What to distrust

Five things this page does not prove

The data is synthetic

Everything above is measured on a generated sample extract. The generator was built to reproduce the structural features that make this problem hard — multiplicative rating, minimum-premium floors, brand-specific declines, tactical drift — so the measurements are meaningful as engineering. They are not observations about any real insurer.

Three weeks is a short horizon

The model is asked to price three weeks ahead. Nothing here says anything about three months. The forward drift correction is deliberately capped at a 13-week horizon and its strength was chosen on held-out weeks, which selected only a quarter of the fitted trend — the level series behaves like a random walk, and for a random walk the best forecast of next week is this week.

The mean premium is not what is optimised

The model is fitted on log premium, so exponentiating gives a median-unbiased price, not a mean-unbiased one. That is why the pooled median error is −0.6% while the pooled mean error is −2.2%. Anything that needs expected spend rather than a typical price — reserving, budgeting — needs a smearing correction that is not applied here.

Ranking accuracy is much weaker than price accuracy

Sitting within 4% of every provider still only identifies the actual cheapest one 58% of the time, and reproduces the true cheapest-five list about 44% of the time. If the deliverable is a cheapest-N table rather than a price, these are the numbers that matter and they are far less flattering.

The index basket is a decision, not a measurement

The weekly index runs on 46 risks present in every week, derived because no basket was declared. Which risks constitute your index is an editorial choice that changes the answer, and a vendor extract cannot make it for you.