How this works
A demographic regression model that distributes national polling shifts across 632 GB constituencies using Census 2021 data and the actual 2024 General Election baseline. Similar in spirit to MRP, but driven by published polling averages rather than fresh survey panels.
Baseline vote share
Every projection starts from what actually happened in each seat in 2024. The model adjusts away from that baseline by the difference between the user's national shares and the polling baseline, rather than ever assuming a uniform swing.
Demographic sensitivity
A per-party sensitivity multiplier is fit for every seat against Census 2021 variables — age, gender, education, ethnicity, religion, housing tenure and the EU referendum vote. A 5-point Reform rise lands harder in Leave-voting, non-graduate seats and softer in young, urban ones.
Turnout & tactical overlays
Two optional layers on top of the regression: differential turnout by demographic group (±8pp), and tactical voting where third-placed bloc voters consolidate behind the stronger ally — Progressive (Lab/LD/Grn) or Right (Con/Ref).
What the model can and can't do
It captures broad patterns — how education, age, ethnicity and the Brexit vote push different areas in different directions. It handles Scotland and Wales with their own polling data, and picks up signals from recent local elections.
It can't predict surprises: a popular independent candidate, an MP's personal vote, a local campaign surge, or a wholly new voting pattern that didn't exist in 2024. Use it to explore "what if" scenarios, not as a crystal ball.
Simulation shares
The headline seat counts are the model's central projection. The "largest party / majority in X% of simulations" line under the seat bar, and the "wins X% of simulations" classification on each constituency card, come from re-running the projection 500 times with random errors drawn from the model's calibrated uncertainty parameters and counting how often each outcome occurs.
Each simulation draws five kinds of error, with magnitudes calibrated against the 2015-2024 election backtests: a national polling error per party (±2.5pp, the historical average scale of UK polling misses), a systematic over/under-estimate of the overall swing (±15%), a "brand shock" that moves a party the same way in every seat at once (±5pp for Labour and the Conservatives, less for smaller parties - the dominant source, because real model errors are correlated across seats), an extra Scotland-wide SNP and Wales-wide Plaid error (±8pp and ±6pp regionally), and independent per-seat noise (±2pp or 10% of the share, whichever is larger).
Read these shares as a floor on the uncertainty, not a ceiling. When these same parameters were tested against the 2019→2024 result - a realignment election - the nominal 95% intervals contained the true outcome only 62% of the time overall (Labour and the SNP were the worst covered). In an ordinary election the simulation spread is roughly honest; in another realignment the true error would be wider than shown. Seat classifications (Safe ≥95%, Likely ≥80%, Lean ≥60%, Toss-up below) are shares of simulations, not calibrated probabilities. Restore Britain is a polling overlay rather than part of the fitted model, so its uncertainty is modelled only with the generic small-party parameters.
Data sources
- Census 2021 demographics — age, gender, education, ethnicity, religion, housing type and the Brexit vote for every constituency.
- 2024 General Election results — the anchor every projection starts from.
- Polls — a 7-poll average of recent national polls, plus separate Scottish, Welsh and regional polls where available.
- Vote switching data — polling crosstabs showing how 2024 voters are moving between parties, blended with the demographic predictions.
- Council elections & by-elections — current council seat shares and recent by-election results that pick up local momentum the national polls miss.
- Local overrides — a handful of seats where national models always get it wrong (Speaker's seat, strong independent candidates).
Frequently asked
How does the model work? (short version)
Most swing calculators apply the same national swing to every seat. This tool uses a demographic regression model that learns how age, gender, education, ethnicity, religion, housing tenure and the Brexit vote relate to voting patterns. Given a set of national vote shares, it predicts each constituency's result based on its unique demographic profile.
For example, a 5-point Labour rise doesn't add 5 points everywhere. It adds more in seats with demographics that correlate with Labour support (younger, more diverse, more renters) and less in seats where those demographics are absent.
The model is trained on the 2024 General Election results across all 632 GB constituencies, using Census 2021 demographic data as predictors.
How is this different from a uniform swing calculator?
A Uniform National Swing (UNS) calculator applies the same percentage-point change to every constituency. If Labour go up 3 points nationally, they go up 3 points in every seat. This is simple but unrealistic, because real swings vary enormously between seats.
This model distributes changes demographically. A rise in Reform support concentrates in Leave-voting, non-graduate seats. A rise in Green support concentrates in graduate, younger, urban seats. The same national shift produces different local effects depending on each seat's population.
How accurate is it?
Backtested against real elections, the model correctly predicts the winning party in 90%+ of seats for 2015, 2017 and 2019 when given actual national vote shares. 2024 was harder, with a historic Labour landslide, large geographically uneven swings and Reform emerging as a new force, bringing accuracy to roughly 75%. Accuracy is higher in safe seats and lower in tight marginals where small errors can flip the predicted winner.
It performs best when swings are moderate. In extreme scenarios (e.g. a party doubling its vote) or very tight marginals, accuracy drops. It cannot predict independent candidates, local incumbency effects, or localised tactical surges that depend on constituency-specific factors the demographics don't capture.
Use it as an exploratory guide to patterns, not a precise forecast.
How are the final seat numbers decided?
The headline seat counts come from running the model's predictions through first-past-the-post: whichever party has the highest projected vote share in a constituency wins that seat. Add up the winners across all 632 seats and you get the seat totals.
What features are available?
The tool has three main control groups:
- Vote share sliders: set national vote share for each party. Use the poll selector to load a specific poll, or adjust manually.
- Turnout differentials: model "what if" scenarios for different demographic groups turning out at higher or lower rates.
- Tactical voting: simulate voters switching to the best-placed party on their side (progressive or right bloc).
Additional features include lockable parties, interactive map with click-to-detail, a region filter, a sortable/paginated 632-seat constituency table, and CSV export.
What do the different map colour modes show?
The map colour dropdown lets you switch between several views:
- Winner — each constituency is coloured by its projected winner. The election-night view.
- Margin — how comfortable the projected win is (deeper colour = wider margin).
- Party heatmaps — vote-share gradient for a specific party. Useful for spotting geographic patterns.
- vs 2024 toggle — combine with a party heatmap to see change from the 2024 result (blue up, red down).
- Demographic choropleths — shade by a Census variable. A reference layer that helps explain why the model makes the predictions it does.
How does the poll selector work?
The pill row at the top of the Poll Scenario panel lets you load a specific recent poll. Choosing one sets the vote share sliders to that poll's published figures.
The default "7-poll average" averages the seven most recent polls to smooth out individual poll noise.
Some polls don't include all parties (e.g. GB-only polls may omit SNP and Plaid Cymru). For missing parties, the model falls back to the baseline average value.
Why doesn't the total add up to 100% when I select a poll?
Polls are conducted for Great Britain (or sometimes just England and Wales), so they don't always include SNP or Plaid Cymru. When a poll is missing these parties, the tool fills in baseline values which may not sum to exactly 100%.
Additionally, published polls often round figures and may not sum to exactly 100% even as published. The model handles non-100% totals gracefully and normalises internally.
What does the lock button do?
The lock icon next to each party's slider freezes that party's value. When you then move another party's slider, the change is redistributed proportionally among all unlocked parties only.
Useful for scenarios like "What if Reform rise to 35% and all the extra comes from the Conservatives?" — lock every party except Conservative and Reform, then move Reform's slider up.
Why do the Greens have so few seats?
The UK uses first-past-the-post (FPTP). The Green vote is spread relatively thinly across many seats rather than concentrated in a few. Even at 12–15% nationally, the Greens typically come 3rd, 4th or 5th in most seats; they only win where their support is highly concentrated (e.g. Bristol Central in 2024).
This is a feature of FPTP, not a model error. Under proportional representation, 12% of the vote would translate to roughly 12% of seats (~76 seats). Under FPTP, it translates to 1–4.
How do the turnout differential sliders work?
Each turnout slider represents a demographic group (Under 35s, Graduates, Social Renters, etc.). Moving the slider right simulates that group turning out at a higher rate than baseline; left means lower turnout.
Some sliders are composite. The Under 35s slider adjusts both age and secularity (young people are disproportionately non-religious), so it correctly captures how youth turnout affects parties like Green whose support concentrates in secular, young areas.
The model pre-computes how each constituency's vote shares would change if a given group's turnout shifted. These sensitivities vary by seat — Muslim voter turnout only matters in seats with a significant Muslim population, while older voter turnout affects most seats.
Why do I see such small changes when adjusting turnout sliders?
Turnout differentials produce subtle, targeted effects rather than dramatic nationwide swings. Even large turnout shifts only change a few seats: a +5pp young turnout boost shifts results in seats with lots of young people but has no effect in seats with few.
To see larger effects, combine multiple sliders or use the extreme ends of the range (±8pp).
How do the tactical voting sliders work?
Tactical voting simulates voters switching to the best-placed party on their side to prevent the other side winning. At 20% willingness, one-in-five tactical voters in seats where their party is 3rd or lower switch to the best-placed ally in their bloc.
The calculation is done per constituency. In a seat where Labour is 1st and Lib Dems are 3rd, progressive tactical voting would see some Lib Dem voters switch to Labour. In a seat where the Lib Dems are 2nd and Labour 4th, the reverse happens.
In 2024, real-world progressive tactical voting was estimated at roughly 10–15%.
How does the model handle Scotland and Wales?
Scotland and Wales are modelled alongside England using the same demographic regression. The model includes regional effects that capture how voting patterns differ by region — the SNP baseline in Scotland and Plaid Cymru baseline in Wales.
SNP and Plaid Cymru vote share sliders only affect their respective nations. National polls typically report GB-wide figures, so the SNP and Plaid Cymru values are derived from Scottish and Welsh sub-samples or separate polls where available.
Northern Ireland's party system is completely separate and there is no NI polling that maps to the GB demographic swing, so the model does not project NI. Its 18 seats are shown as a static placeholder held at the GE2024 result, included only so the full 650-seat House and the 326 majority line are represented. They do not respond to the sliders, but you can reassign them manually in the Northern Ireland panel.
When I move one party's slider, why do the others change?
Vote shares should broadly sum to 100%. When you increase one party, the others need to decrease to compensate. The tool does this using proportional redistribution: the change is shared among the other unlocked parties in proportion to their current share.
For example, if Labour is at 30% and you increase Reform by 2 points, Labour might lose ~0.8 points and the Conservatives ~0.5 points (proportional to their current sizes). Use the lock buttons to control exactly which parties absorb the change.