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
-
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).
-
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.
-
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.
-
Simulate 10,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).
-
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.
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.
-
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.
-
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.
-
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.
-
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.
-
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
-
One correlated error component is missing. 538's published House
model decomposes error into five parts — national 3, regional 2, state 2, demographic-cluster 2, and
6 at the district level. We carry four of them at their values. The one we omit is the
demographic-cluster term, which correlates districts that resemble each other
regardless of where they are; building it needs a clustering of all 435 districts that we have no
data for, and inventing one would be inventing the correlation it is supposed to measure. Our correlated
total is therefore 4.12 against their 4.58.
Measured on the board of 2026-08-12 — same polls, same seed, only the error model changed —
adding a fifth component of 2 points takes between 0.4 and 3.4 points off the House
control probability, depending on whether the missing term is assumed to behave like a state, a regional
or a national one. The far end of that range assumes it correlates every district in the country at once,
which a clustering can't do — it sorts the 435 districts into groups, so a shock hits some of them
and the rest of the chamber absorbs it. The honest reading of the House figure is therefore a
point or so softer than printed, and at the outside three, in whichever party's favour it leans.
The Senate moves by under a point in either direction across the same three assumptions, which at
10,000 simulations is inside sampling
noise — so we don't claim a direction for it. (For scale: the House control probability was 93.3%
on model run 19, 2026-08-12. That is a figure from one run, not a live reading — the current one is
on the front page.) All of this is a much smaller gap than this page reported before 2026-08-12, when the
model had one correlated term instead of four; the arithmetic is in docs/BUILD_NOTES.md Phase 10 §C, and
the run behind the scale figure is in §H.
-
House effects are computed in a single pass. The correction
described above is estimated once, from averages that have not themselves been corrected, where the two
published models that do this iterate until the numbers settle. The effect of the shortcut is small and
one-directional: where several firms polling the same thing lean the same way, each is measured partly
against the others' lean, so all of their estimated effects come out a little too close to zero. The
correction is therefore conservative rather than overcooked.
-
2024 House baselines are redistricting-stale. Several states redrew
their House districts for 2026. A district's baseline is still its 2024 result on 2024 lines — for a
redrawn district, that describes different territory than the one actually on the 2026 ballot.
-
Imputed baselines.
37 of 435 House districts (8.5%) had no
major-party opponent in 2024 at all, so their baseline is a fixed
±35.0-point assumption signed toward
the winner, rather than a real two-party result. These carry a small "est." marker on the House table.
-
Unsettled nominees. The Senate candidate list
(
db/seed_data/senate_2026.yml) is maintained
by hand, not scraped — re-running the seed task does not pick up a primary result; only editing that file
does.
10 of 35 Senate races
(28.6%) are currently affected: where a party's
nominee isn't settled yet, the model uses the declared front-runner where one has emerged, or a generic
party prior where it hasn't — never a guess at a specific name.
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 |
—
|
Pollster house effects
| enabled |
yes |
|
| min_polls_to_apply |
3 |
|
| shrinkage_k |
5 |
|
| max_effect_pp |
3 |
|
| residual_window_days |
45 |
—
|
| residual_half_life_days |
180 |
—
|
| min_comparison_pollsters |
3 |
—
|
Blending polls with fundamentals
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 |
—
|
Error model — how much uncertainty each draw carries
| sigma_national |
3 |
|
| sigma_regional |
2 |
|
| sigma_state |
2 |
|
| sigma_senate_polled |
2.2913 |
|
| sigma_senate_unpolled |
7.2973 |
|
| sigma_district |
6 |
|
| time_scale_days |
180 |
|
| time_mult_cap |
1.75 |
—
|
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 |
10000 |
—
|
| stale_run_minutes |
30 |
—
|
Newsroom (Phase 5)
| writer_model |
anthropic/claude-opus-5 |
|
| brief_model |
anthropic/claude-opus-5 |
—
|
| max_output_tokens |
2000 |
—
|
| max_dispatches_per_race_per_day |
3 |
—
|
| max_dispatches_per_day |
40 |
—
|
| movement_threshold |
0.08 |
—
|
| movement_note_cooldown_days |
7 |
—
|
| brief_poll_count |
12 |
—
|
| recent_headline_count |
5 |
—
|
| headline_max_chars |
90 |
—
|
| dek_max_chars |
200 |
—
|
| body_max_words |
450 |
—
|
Data collection
| cadence_hours |
2 |
—
|
| user_agent_contact |
[email protected] |
—
|
| max_district_sources |
40 |
docs/BUILD_NOTES.md Phase 8 §A (state-by-state district survey)
|
Site display rules
| 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 |
—
|