Seat-forecast methodology (model v1)
Every “% D / % R model” chip on GoodVote comes from the model documented on this page — including how often it has been wrong.
What it is
A logistic regression trained on every contested Democrat-vs- Republican U.S. House general election from 2016 through 2024 (3,406 candidate-races; results from the FiveThirtyEight election-results archive). It forecasts the chance that a party's nominee wins the seat in 2026 — it is not a candidate-level forecast, because primaries may not be settled. The Democratic and Republican probabilities for a race are normalized to sum to 100%.
Features and fitted coefficients
| Feature | Coefficient | What it measures |
|---|---|---|
| District lean | 0.104 | The party's two-party vote share in the same district last cycle, minus 50. Redistricting between cycles adds noise we do not correct for. |
| Party incumbency | 1.571 | Whether the seat was won by this party last cycle (0/1). Party-level, so it does not know about retirements or primary losses. |
| National environment | 0.075 | The party's national House two-party vote share minus 50. In training this is the actual result; for 2026 scoring it is the average of the last 90 days of public generic-ballot polls. |
| Money backing share | 7.084 | The party's top-funded candidate's share of all race money backing (own spend + IEs for), minus 0.5 — from GoodVote's amendment-deduped FEC pipeline. Missing money data is imputed as neutral (0.5). |
| Hostile IE share | 0.172 | Share of the money aimed at the candidate that was spent AGAINST them (independent expenditures). |
| Intercept | -0.379 |
Backtests (leave-one-cycle-out)
Each cycle is predicted by a model trained only on the other cycles. Brier score: 0 is perfect, 0.25 is a coin flip.
| Cycle | Races | Brier | Accuracy |
|---|---|---|---|
| 2016 | 620 | 0.032 | 96.0% |
| 2018 | 652 | 0.107 | 86.7% |
| 2020 | 724 | 0.054 | 92.8% |
| 2022 | 702 | 0.070 | 91.5% |
| 2024 | 708 | 0.035 | 95.9% |
| Overall (out-of-sample) | 3,406 | 0.059 | 92.6% |
2018 is the weakest cycle (Brier 0.107): wave years are hard for a fundamentals model with no district polling. That failure mode still exists.
Calibration
Out-of-sample predictions bucketed by forecast probability. A calibrated model's bars match the diagonal: races given ~70% should be won ~70% of the time.
Bar = actual win rate; tick = average forecast in that bucket. Mid-range buckets have small samples and wobble accordingly.
Known limitations — read before trusting a chip
- No district polls in the model. Where race raters (Cook, Sabato, etc.) or district polls disagree with the model, they know things it doesn't — candidate quality, retirements, scandals. We show both signals side by side on race cards; disagreement is information, not an error.
- Party-level incumbency. An open seat after a retirement still counts as “incumbent party,” which overstates that party's edge.
- Mid-cycle money. 2026 money features are year-to-date and will move; forecasts refresh with the weekly data pipeline.
- Unscored races. Districts without a 2024 D-vs-R general (uncontested seats, same-party generals under top-two rules) have undefined features and get no forecast.
- Redistricting noise. District-lean features compare the same district number across cycles even when lines moved.
Data sources
- Election results 1998–2024: FiveThirtyEight election-results archive (GitHub).
- Generic-ballot polls: VoteHub public API (public, non-internal polls only).
- Money features: GoodVote's FEC pipeline (candidate spending + amendment-deduped independent expenditures).
Model coefficients are versioned in the open — explore the money data the forecasts draw on.