FutureBallotU.S. election forecasts, with every number traced to its source

Parameters in force

every fitted number the live forecast is standing on, and what it came from

Generated from the committed artifacts at request time, not written down. Every value below is the one the live forecast is standing on; where a parameter is re-estimated per cycle from data strictly before it, the row says so, because that property is what makes the backtest mean anything.

Correlated error across races

How much of a polling miss is shared by every race in a cycle rather than particular to one. This is the term that makes a chamber forecast three times wider than independent races would imply, and getting it wrong is the difference between a probability and a guess.

ParameterIn force
National polling error (sigma_nat)2.438 pts
…its own standard error0.4181 pts
Race-specific residual (sigma_race)4.972 pts
Total5.538 pts

fitted on 587 observations · using only data before 2026 · re-estimated walk-forward per cycle · experiments/uncertainty_terms_pre2026.json

Scale correction (c15)

Polls understate the leader in uncompetitive races, so a forecast built on them is compressed toward the middle. Every published central estimate becomes intercept + slope × estimate. Promoted through the gate; refitted whenever the corpus grows.

ParameterIn force
Slope1.07
Intercept-1.744 pts
Residual sd5.466 pts

fitted on 463 observations · using only data before 2026 · re-estimated walk-forward per cycle · experiments/scale_pre2026.json

Sparse-poll variance

Polls of safe, lightly polled races are wrong by far more than their sample sizes imply. The blend weights a thin race's polls by this measured error instead of by sampling error — which was the single largest calibration defect this project has found.

ParameterIn force
Realised error sd (2024)10.17 pts
What sampling error implied4.415 pts
Ratio2.303 x

fitted on 23 observations · re-estimated walk-forward per cycle · experiments/sparse_poll_variance.json

Environment drift to election day

How far the national environment still moves between now and November, as a variance growing with the horizon. Fitted on non-overlapping increments of the generic-ballot path so a long series cannot be counted twice.

ParameterIn force
Var(h) = a·h^b — a0.203
…b0.4966

fitted on 371 observations · using only data before 2026 · re-estimated walk-forward per cycle · experiments/environment_drift_pre2026.json

Poll dispersion

A poll carries noise no sample size reduces, and a firm's house effect does not average away across its own waves. This is why the national environment is weighted by measured variance rather than by n.

ParameterIn force
Variance floor no sample size reduces2.368 pts2
Sampling term (var = floor + slope/n)7,571
House-effect dispersion across firms2.584 pts
Design effect0.7571 x

fitted on 13,996 observations · using only data before 2026 · re-estimated walk-forward per cycle · experiments/poll_dispersion_pre2026.json

District presidential baseline

For a redrawn district, its own previous margin describes an electorate that no longer exists. This relation reads the presidential vote inside the current boundaries as a House margin instead.

ParameterIn force
Presidential margin coefficient0.9923
Incumbency3.933 pts
Intercept-0.1579 pts
Residual sd5.427 pts
MAE using this relation3.174 pts
MAE of the prior it replaces13.11 pts

fitted on 303 observations · re-estimated walk-forward per cycle · experiments/baseline_relation.json

Seats-votes relationship

An independent check rather than an input: what the national House vote has historically bought in seats, with a separate level per apportionment map because redistricting moves it by roughly eighteen seats.

ParameterIn force
Seats per point of national margin3.085 seats
Residual sd6.961 seats

fitted on 11 observations · estimated once on the full record · experiments/seats_votes.json

Promotion gate thresholds

The minimum improvement worth changing the champion for, per metric, set at about a fifth of the champion's own measured edge over a polling average. Not a round number somebody liked; re-measured when the champion changes.

ParameterIn force
Champion's CRPS edge over the baseline0.5499 pts
→ threshold at 20% of it0.11 pts

fitted on 435 observations · estimated once on the full record · experiments/crps_edge.json