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

FeatureCoefficientWhat it measures
District lean0.104The 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 incumbency1.571Whether the seat was won by this party last cycle (0/1). Party-level, so it does not know about retirements or primary losses.
National environment0.075The 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 share7.084The 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 share0.172Share 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.

CycleRacesBrierAccuracy
20166200.03296.0%
20186520.10786.7%
20207240.05492.8%
20227020.07091.5%
20247080.03595.9%
Overall (out-of-sample)3,4060.05992.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.

0.0-0.1
3% won (n=1369)
0.1-0.2
18% won (n=164)
0.2-0.3
33% won (n=79)
0.3-0.4
31% won (n=59)
0.4-0.5
39% won (n=41)
0.5-0.6
68% won (n=38)
0.6-0.7
72% won (n=46)
0.7-0.8
65% won (n=66)
0.8-0.9
75% won (n=152)
0.9-1.0
97% won (n=1392)

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.