Overview
Swingometer uses a multi-stage probabilistic forecasting pipeline to predict UK general election outcomes. Our approach combines poll aggregation, swing modeling, and Monte Carlo simulation to produce seat projections with properly quantified uncertainty.
The Pipeline
Unlike simple poll averages, we account for pollster methodology differences ("house effects"), weight by sample size and recency, and propagate uncertainty through every stage of the model.
Poll Aggregation
Individual polls are noisy. Different pollsters use different methodologies and have systematic biases. Our aggregation model addresses both issues.
Weighted Average
For each party p at time t, the aggregated vote share is:
Recency Weight
Exponential decay with ~15-day half-life
w = 2^(-days/14.7)
Sample Weight
Square root scaling (diminishing returns)
w = √(n/1000)
House Effects
Learned from historical errors
hp = calibrated
What We Don't Publish
Exact house effect coefficients are not published. This prevents pollsters from gaming our model and maintains the integrity of our adjustments. The methodology is transparent; the specific calibrations are proprietary.
Swing Calculation
To translate national polling into constituency-level predictions, we use a modified Uniform National Swing (UNS) model with regional adjustments.
# Base UNS model
swing = current_national - previous_national
# Apply regional adjustment
regional_swing = swing × regional_factor[region][party]
# Project constituency result
new_share = previous_share + regional_swing
Regional factors capture systematic differences in how national swings play out locally. London typically sees amplified Labour swings; Scotland has unique SNP dynamics; the "Red Wall" areas may swing differently than traditional Labour heartlands.
Why Not MRP?
Multilevel Regression with Poststratification (MRP) is powerful but requires extensive demographic modeling and granular survey data. Our UNS-with-adjustments approach provides a good balance of accuracy and transparency. Future versions may incorporate MRP elements.
Monte Carlo Simulation
Rather than producing a single "best guess," we run 10,000 simulated elections. Each simulation samples from our uncertainty distributions, producing a range of plausible outcomes.
for sim in range(10_000):
# Sample national vote with polling uncertainty
national = sample_multivariate_normal(
mean=aggregated_polls,
cov=correlation_matrix
)
# For each constituency
for seat in constituencies:
# Add local variance
local = national + random_normal(0, σ_local)
projected = apply_swing(seat.previous, local)
winner = argmax(projected)
# Count total seats
results.append(count_seats())
Correlation Structure
Conservative and Labour vote shares are negatively correlated (~-0.5). When one rises, the other typically falls. We model this covariance structure.
Local Variance
Each constituency has ~2% additional uncertainty beyond national swing, capturing local candidate effects, tactical voting, and constituency-specific factors.
From these 10,000 simulations, we extract summary statistics: mean seats, confidence intervals, and outcome probabilities. An 89% probability of Labour majority means Labour wins 326+ seats in 8,900 of our 10,000 simulations.
Quantifying Uncertainty
Honest uncertainty quantification is central to our approach. We prefer calibrated probabilities to false precision.
| Source | Magnitude | Reducible? |
|---|---|---|
| Sampling Error | ~2% | Partially (more polls) |
| House Effects | ~1-2% | Partially (historical data) |
| Late Swing | ~2-3% | No |
| Turnout Variation | ~1-2% | Partially |
| Tactical Voting | ~1-3% | Partially |
| Total Uncertainty | ~4-6% | — |
Calibration Goal
A well-calibrated model means events we give 80% probability should happen approximately 80% of the time. We'd rather be honestly uncertain than confidently wrong.
International Signals
Foreign election results can provide weak signals about UK political dynamics. We incorporate these with appropriate skepticism.
US Elections
"Special relationship" sentiment effects. Democratic wins may boost Labour perception; Republican wins may energize right-wing movements.
EU Elections
Proxy for European populism trends. Strong showing for far-right parties across Europe may correlate with Reform UK support.
Signal Decay
International signals lose relevance over time:
Half-life of 6 months. After 1 year, signal strength is ~25% of original.
Live Signal Effects
See how foreign and local election signals adjust our poll aggregation in real-time. These adjustments are small but help capture political momentum that polls may lag in reflecting.
Signal data unavailable. Run the full pipeline (npm run pipeline) to generate signal-inclusive data.
Signal Breakdown by Party
How each signal type adjusts poll averages (percentage points)
| Party | Polls Only | + Foreign | + Local | = Final |
|---|---|---|---|---|
|
|
Polls Only vs With Signals
Signal Decay Over Time
Signals lose relevance over time. Foreign elections have a 180-day half-life; local elections have a 90-day half-life.
Backtesting
We validate our model by testing against historical elections. Using only data available before each election, we generate predictions and compare to actual results.
| Metric | Target | Backtest Result |
|---|---|---|
| 95% CI Coverage | 95% | 100% (4/4) |
| 80% CI Coverage | 80% | 50% (2/4) |
| Seat Prediction MAE | <20 | 19.7 |
| Largest Party Accuracy | 90%+ | 100% (4/4) |
| Majority Call Accuracy | — | 75% (3/4) |
Historical Elections Tested
Known Limitations
New Constituency Boundaries
The 2024 election used new boundaries, limiting historical data. We use notional results but these add uncertainty.
Tactical Voting
Our simplified tactical voting model may miss nuanced local dynamics, especially in three-way marginal seats.
Black Swan Events
Models assume continuity. Major unexpected events (scandals, crises) are not predictable and can invalidate forecasts.