Busabase
Busabase is an open-source (MIT) database and workspace for AI agents — data, docs, skills, and apps in one place. Run it locally, self-host it inside your network, or use Busabase Cloud, and turn age
翻訳待ち
A daily forecast of the 2026 U.S. House, Senate and governor elections: 20,000 simulated elections built from every poll, each race's fundamentals and a shared national polling miss.
翻訳待ち
データPython · HTMLGitHub @scorvecオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
2026 U.S. House, Senate and governor forecast - daily Monte Carlo model, run in GitHub Actions (scorvec.com/midterms)
翻訳待ち
Loading the full README.
Read the full README ↗A Monte Carlo forecast of the 2026 U.S. House, Senate and governor elections, with an experimental forecast of 22 state
legislative chambers. It is published at scorvec.com/midterms; the reader-facing
explanation is How the forecast works (web/about.html).
The election was held on 3 November 2026. The forecast was frozen at 17:04 UTC that day, before the first polls closed
(data/final/, with its SHA-256 and commit; see The daily run), and the site now
opens on the results and how the frozen forecast did. results.yml reads the calls and counts, scores the forecast,
writes the results page's data and projects the races still out (live/remaining.js: the frozen forecast's own simulations,
from live/engine.js and data/final/whatif_2026.json at the frozen commit, reweighted by every call and count); the daily
forecast no longer runs.
Each day the model re-reads the polls, refits a national generic-ballot trend from individual polls, blends every race's
polls with a fundamentals prior and simulates the elections 20,000 times with correlated errors: a national miss, a
statewide miss, regional and demographic swings, and each race's own error. The whole run happens in GitHub Actions and
commits its outputs to web/; the pages are static, and every position of the "national mood" slider is precomputed.
| page | what it shows |
|---|---|
web/index.html | the races still out (the front page): each chamber's median outcome and seat range, and every uncalled race's chance from the calls and counts so far |
web/results.html | the results: each chamber as called, the national House vote against every election since 1946, every race next to its frozen forecast, and the scorecard |
web/forecast.html | the final forecast, as frozen: chamber and governor odds, seat distributions, every race and how each moved |
web/about.html | how the forecast works, the track record and every source |
web/legislatures.html | state legislative chambers (experimental), with district maps |
National environment (generic.py, national_mood.py). The generic-ballot trend is fitted to individual polls, not to
other people's averages: a penalised piecewise-linear trend (knots every 14 days), one house effect per pollster
(ridge-shrunk, centred), likely / registered / adult offsets and a partisan-sponsor offset. Each poll sits at the
midpoint of its field period, and the versions of one survey (for example likely and registered voters) count as one
poll. A poll's weight is the square root of its sample size (capped at 1,500), lowered for a pollster whose polls scatter
about the trend more than sampling explains, times the pollster's quality rating squared (score out of 3; a C+ pollster keeps
0.36 of its weight); its precision halves every 60 days of age, and no pollster's polls may carry more than 15 % of today's
value. The approval trend is fitted the same way. The trend is taken as it stands: there is no correction for the direction
of a polling miss.
The size of past misses, in either direction, sets the national error s(L), which grows with the days L to the election
(fitted on the 15 House elections 1996-2024; data/static/national_mood_fit.json). The part of that error that is late
opinion movement is scaled state by state by how much of the vote is already banked (early_vote.py), and so is the
part of each race's own error that is late movement in that race (0.25 pts² a day, measured on 538's raw_polls from how
polls of the same race by different pollsters drift apart over the final two months; data/static/race_move_fit.json).
A state banking at the historical pace keeps its total error; one banking faster gets tighter, one banking slower wider.
House (model.py, run2026.py). Each seat's expected Democratic two-party margin starts from a fundamentals prior:
the district's partisan lean (our own, from precinct returns: 0.75 x its 2024 presidential margin against the nation's +
0.25 x the same for 2020, on the 2026 maps; cd_lean_build.py), incumbency and the nominees' fundraising through June
30 (money.py), fitted on the contested seats of 2018 and 2022 with the same lean on those elections' maps, plus the
national environment. Demographic terms carry the Hispanic and Asian swing since 2024, with Texas, Florida and Western
Hispanic factors, white non-college and urbanization factors; the district polls update those factors
(model.factor_update). Race polls are corrected before they are blended, with the corrections measured on 538's
archive of rated polls (race_poll_calibration.py): sponsored polls are shifted and down-weighted, each pollster's
measured lean is removed, polls with many undecided or third-party respondents and polls from inexperienced pollsters
get more variance, older polls fade (63-day half-life, 150-day window), and several versions of one survey count once.
The blend is a Student-t (robust) update against the fit's own prior sd, so a poll that disagrees with everything else
counts for less until other polls confirm it; the measured poll errors enter as standard deviations (the t scale is
adjusted for the degrees of freedom). A poll by a pollster rated A or better with no sponsor is taken at face value instead:
its error is normal with the t's scale (model.TOP_RATED_SD; ratings as known before each election, neutral in the
backtest).
This is the beginning of the README. Read the rest at the original. Read the full README ↗