How accurate is the model?
We rate every race, every day. To keep us honest, this page is automatically generated from held-out evaluations — races the model never saw during training. We do not describe how the model works on this page. We describe how well it performs.
In a typical race, our predicted final margin is off by about 5.55 points (the median miss across 1383 held-out races). We call the right winner 95.2% of the time overall, and 97.2% of the time when we say a race is likely or safe. When we say "60% chance Democrat wins", that race breaks D about 60% of the time — though we're a little overconfident on the very tightest races, and we're working on it.
Reliability diagram
Each dot is a probability bin from the full held-out set (n=14–635 races per bin). Closer to the diagonal = better calibrated. Whiskers are 95% confidence intervals; dot area scales with the number of races in the bin. Overall ECE (expected calibration error) = 0.7 pt.
Per-cycle accuracy
Mean absolute error on each historical cycle's held-out races (no peeking).
% correct by horizon
Share of held-out races where the called winner won, at each forecast horizon. Leftmost is earliest, rightmost is closest to election day. Numbers are flat within ~1 percentage point — the model's accuracy is stable from 90 days out through the final week. Note: the y-axis is truncated to 85–95% to make the small horizon-to-horizon differences visible; bar heights are not proportional to zero.
How the model compares to each forecaster
poliagg-v34 · same race set per rater · 3 of 10 wins overallWhen a race is well-polled, the model beats every one of the 10 forecasters on their own race set. This is the model's strongest ground: well-polled races are also the competitive ones, where the raters' own accuracy is worst — so a clean sweep here is harder than it looks, not easier.
| Forecaster | Races compared | Their Brier | Our Brier | Winner |
|---|---|---|---|---|
| Elections Daily | 48 | 0.0697 | 0.0545 | Model |
| FiveThirtyEight | 104 | 0.0849 | 0.0640 | Model |
| Sabato's Crystal Ball | 172 | 0.0889 | 0.0668 | Model |
| Split Ticket | 19 | 0.0814 | 0.0456 | Model |
| Decision Desk HQ | 38 | 0.0757 | 0.0395 | Model |
| Cook Political Report | 198 | 0.1108 | 0.0734 | Model |
| CNalysis | 25 | 0.0742 | 0.0356 | Model |
| Inside Elections | 107 | 0.1019 | 0.0630 | Model |
| The Economist | 19 | 0.0795 | 0.0335 | Model |
| RealClearPolitics | 107 | 0.1237 | 0.0749 | Model |
Across all races each forecaster rated
Each row compares the model against one external forecaster (Cook, Sabato, Inside Elections, etc.) on only the races that forecaster rated — including the safe, sparsely-polled seats where every forecaster does well and the gaps are tiny. Same race set both sides, so no one's penalized for races they didn't call. Lower Brier score wins.
| Forecaster | Races compared | Their Brier | Our Brier | Delta | Winner |
|---|---|---|---|---|---|
| The Economist | 415 | 0.0389 | 0.0464 | +0.0075 | The Economist |
| Inside Elections | 1266 | 0.0350 | 0.0423 | +0.0073 | Inside Elections |
| FiveThirtyEight | 570 | 0.0396 | 0.0457 | +0.0061 | FiveThirtyEight |
| Sabato's Crystal Ball | 1435 | 0.0367 | 0.0415 | +0.0047 | Sabato's Crystal Ball |
| Elections Daily | 411 | 0.0279 | 0.0312 | +0.0033 | Elections Daily |
| Cook Political Report | 1527 | 0.0405 | 0.0438 | +0.0033 | Cook Political Report |
| Decision Desk HQ | 561 | 0.0358 | 0.0379 | +0.0020 | Decision Desk HQ |
| CNalysis | 417 | 0.0253 | 0.0245 | -0.0008 | Model |
| Split Ticket | 31 | 0.0548 | 0.0317 | -0.0231 | Model |
| RealClearPolitics | 142 | 0.1012 | 0.0654 | -0.0358 | Model |
Brier score = mean squared error on the predicted win probability. 0 = perfect, 0.25 = coin flip; lower wins. Delta is (our Brier − their Brier): positive means we scored worse than them on the shared race set, negative means we did better. Raters with fewer than 20 overlapping races are excluded.
When did the model get it wrong?
10 worst held-out calls| Race | Cycle | Quality | Predicted | Actual | Miss | Why |
|---|---|---|---|---|---|---|
| AZ-8 · House · 2022 | 2022 | medium | R +12.4 | R +94.0 | 81.56 | Limited polling data · Sparse polling · Model leaned too far D |
| AL-7 · House · 2020 | 2020 | medium | D +18.6 | D +97.2 | 78.60 | Limited polling data · Sparse polling · Model leaned too far R |
| AL-6 · House · 2020 | 2020 | medium | R +23.2 | R +97.1 | 73.92 | Limited polling data · Sparse polling · Model leaned too far D |
| AZ-9 · House · 2022 | 2022 | medium | R +22.8 | R +96.0 | 73.22 | Limited polling data · Sparse polling · Model leaned too far D |
| FL-2 · House · 2020 | 2020 | medium | R +26.8 | R +95.7 | 68.88 | Limited polling data · Sparse polling · Model leaned too far D |
| LA-6 · House · 2022 | 2022 | medium | D +0.5 | R +67.4 | 67.85 | Limited polling data · Sparse polling · Decided by more than expected · Wrong winner called · Model leaned too far D |
| WI-6 · House · 2022 | 2022 | medium | R +29.1 | R +94.9 | 65.78 | Limited polling data · Sparse polling · Model leaned too far D |
| CA-5 · House · 2020 | 2020 | medium | R +7.9 | D +52.2 | 60.07 | Limited polling data · Sparse polling · Wrong winner called · Model leaned too far R |
| SC-4 · House · 2022 | 2022 | medium | R +32.6 | R +90.8 | 58.17 | Limited polling data · Sparse polling · Model leaned too far D |
| AL-5 · House · 2024 | 2024 | medium | R +38.2 | R +95.4 | 57.23 | Limited polling data · Sparse polling · Model leaned too far D |