Skip to content
535

Methodology

Every parameter this model uses lives in one file (config/model_params.yml) and is listed below, with a citation where one exists. If a number isn't on this page, it isn't in the model.

How the forecast works

  1. Average the polls. For each race, polls fielded within the last 45 days are averaged — widening to 120 days when fewer than 2 qualify — keeping one poll per pollster and weighting by recency (a 14-day half-life) and sample size (capped at 1,500).
  2. Correct for pollster house effects. Before a poll enters an average, the model subtracts that pollster's estimated lean — how far its polls sit from everyone else's. Every firm's number is published, including the ones the model decided not to act on. The method is spelled out below.
  3. Blend with fundamentals. The poll average is blended with a fundamentals-only prior — partisan lean and incumbency for the Senate; the district's 2024 result and the national swing since then for the House. The more a race has been polled, the more the average counts, saturating at a poll weight of 3.0; a race with no polls sits entirely on its prior.
  4. Simulate 100,000 correlated elections. Every simulated world draws error at four levels and adds them up: one national error (3.0 points) shared by every race in both chambers; one regional error (2.0) per U.S. Census division; one state error (2.0) read by that state's Senate race and every one of its House districts; and each race's own. A bad night in Georgia is therefore a bad night for Georgia's Senate race and its districts together, not fourteen independent coin flips around a shared national mood — which matters, because independent error averages away over 435 districts and correlated error does not. Every error is scaled up the further out from election day the forecast is run (up to 1.75× at its widest).
  5. Call control. 34 Democratic-caucus and 31 Republican Senate seats aren't on the 2026 ballot at all; add each simulated world's contested seats to those holdovers. Because the sitting vice president is a Republican (the tiebreak), Republicans control the Senate at a 50-seat tie and Democrats need 51 — an independent who hasn't said which party they'd caucus with is uncommitted, and a world where an uncommitted independent holds the balance counts toward neither party's control probability. The House is simpler: whoever reaches 218 of 435 seats controls it. A candidate's party (for who wins this race) and their caucus (for who controls the chamber) are deliberately different questions throughout.

Where the data comes from

Poll results come from The New York Times’ polling database, the continuation of the FiveThirtyEight polls dataset, which The Times maintains and publishes. Alongside each poll’s toplines it records the sponsor and whether that sponsor is party-aligned — the flag this site’s treatment of partisan internal polls is built on — plus field dates, sample size, population, and methodology where disclosed. We fetch it every two hours, keep an archived copy of every version we ingest, and take only general-election questions for the current cycle.

Candidate rosters, race metadata, and the 2024 results that anchor each district’s baseline are read from Wikipedia (text available under CC BY-SA). Neither source endorses this site or its forecasts; every aggregation choice, adjustment, and mistake here is ours.

The maps are drawn from the U.S. Census Bureau’s TIGERweb boundaries: each state’s shoreline-clipped outline, and the congressional districts of the 120th Congress — the lines the states submitted for the 2026 election, including those redrawn mid-decade. We fetch them once and draw every map ourselves.

Partisan internal polls, and the toggle

About a quarter of the corpus is flagged as sponsored by a party-aligned client — campaigns, PACs, partisan media. The forecast this site publishes excludes those polls entirely: the headline numbers rest on independent polling alone. The “Partisan internals” switch in the header shows the same model with the flagged polls included — not at face value, but shifted toward the non-sponsor party by an amount estimated each run from how flagged polls compare with unflagged polls of the same race at the same moment (shrunk toward a 3.0-point prior while the evidence is thin) and carrying 50% of an independent poll’s weight. Both versions are computed in the same model run from the same simulation draws, so the difference you see is the polls, never the dice. Flagged polls appear in every poll table either way, labeled with their sponsor’s side.

Pollster house effects, in plain language

Some polling firms consistently show a race a point or two more Democratic, or more Republican, than everyone else polling the same thing at the same time. That gap is called a house effect. It is not the same as being wrong — it is measured against other pollsters, not against an election result that hasn't happened — but leaving it in means the average partly reflects who happened to poll recently rather than what the electorate thinks.

  1. Measure one poll against its contemporaries. For every poll, we build an average of what other firms found on the same question — the generic ballot, or that specific race — within 45 days either side of it, weighted the same way the model's own averages are. The gap between the poll and that average is the poll's residual. The firm's own polls are excluded from the comparison, so nobody is ever measured against themselves.
  2. Only compare what is comparable. A residual needs at least 3 other firms in the window; against one or two, the "gap from the field" is mostly the other firm's own lean. Polls in races where the polling disagrees about who is actually running, and polls fought against a placeholder opponent, are left out entirely — the same rule that keeps them out of the averages.
  3. Pool a firm's residuals into one number. All of a firm's residuals, across the generic ballot and every race, average into a single estimated lean. Older polls count for less, halving every 180 days, because a firm's methods change.
  4. Shrink it toward zero, then cap it. A firm with three polls might look 6 points off the field purely by chance, so the raw number is pulled toward zero by how much evidence stands behind it: a firm keeps n / (n + 5) of its raw effect, where n is its number of usable polls. Whatever survives that is capped at 3.0 points, just above the largest house effect published research reports. Firms with fewer than 3 usable polls have their estimate shown but not applied.
  5. Subtract it, and publish it. The surviving number comes off each of that firm's polls before they are averaged, and every firm's figures are on the pollsters page — raw, shrunk, and whether it was used. Race pages show the adjustment poll by poll.

One simplification, stated plainly. House effects and polling averages depend on each other: the "field" a poll is compared against is itself made of polls with their own leans. 538 handles that by running its aggregation three times, and Silver Bulletin loops the average and the house effects until the numbers stop moving. We compute house effects once, from unadjusted averages, and then use them. That is a simplification, not a refinement, and it means our effects are slightly biased toward zero for firms polling alongside other firms that lean the same way.

Known limitations

Every parameter

In file order, exactly as config/model_params.yml has them.

Poll averaging

window_days 45 —
extended_window_days 120 —
min_polls_in_window 2 —
half_life_days 14 —
default_sample_size 400 —
sample_size_cap 1500 —
sample_size_pivot 600 —

Blending polls with fundamentals

weight_saturation 3 —

Fundamentals — partisan lean & national baselines

incumbency_adj 1.5 —
open_seat_adj 1.5 —
pres_national_margin_2024 -1.5
pres_national_margin_2020 4.5
house_national_margin_2024 -2.6
imputed_baseline_margin 35 —

Chamber control rules

senate_holdover_dem_caucus 34
docs/BUILD_NOTES.md Phase 2 §A2 holdover arithmetic
senate_holdover_rep 31 —
vp_party rep
docs/BUILD_NOTES.md Phase 2 §A2
senate_total_seats 100 —
house_majority_seats 218 —

Simulation

n_sims 100000 —
stale_run_minutes 30 —

Election date

date 2026-11-03 —

Newsroom (Phase 5)

writer_model ~anthropic/claude-opus-latest
brief_model ~anthropic/claude-opus-latest —
max_output_tokens 8000 —
max_dispatches_per_race_per_day 3 —
max_dispatches_per_day 40 —
movement_threshold 0.08 —
movement_note_cooldown_max_days 5 —
movement_note_cooldown_min_days 1 —
movement_note_cooldown_scale_days 8 —
brief_poll_count 12 —
recent_headline_count 5 —
headline_max_chars 90 —
dek_max_chars 200 —
body_words_backstop 1000 —

Data collection (Wikipedia fallback)

write_enabled no —
user_agent_contact [email protected] —
max_district_sources 40
docs/BUILD_NOTES.md Phase 8 §A (state-by-state district survey)

Poll feed (New York Times)

cadence_hours 1 —
staleness_alarm_days 3 —

Partisan internal polls

prior_shift 3
weight_factor 0.5 —
pair_window_days 21 —
shrinkage_k 10 —

Site display rules

corpus_note_days 7 —
movers_window_days 7 —
movers_floor_pp 1.5
docs/BUILD_NOTES.md Phase 3 §8.2 (10,000-sim noise measurement)
movers_count 6 —
tossup_band_pp 65 —