Every published model side by side, plus my ensemble built from all of them. 435 House seats, 35 Senate races, 36 governors, re-run four times a day on my own hardware.
Generic ballot & net presidential approval, VoteHub polls, √n-weighted trailing average.
So this is my attempt at building my own midterm forecast instead of just reading everyone elses. The short version is that I pull in basically every credible forecast and data source I could find and blend them together into one number per race, and then I let myself mess with the weights to see how the map changes. Its part aggregator, part actual model.
Every race gets scored in margin space, meaning everything gets converted into "how many points would the Dem win or lose by". Polls are already in that format, ratings like Lean R get converted (Lean is about 7.5 points, Likely 10.5, Safe 16, which I set so they match how often those ratings have actually held up historically), and market prices get converted from a probability back into an equivalant margin. Then I take a weighted average of all the factors that exist for that race. Not every race has every factor, alot of house races have no polling and no betting market at all, so when somethings missing its weight just gets spread across the factors that do exist.
One thing I learned auditing this: alot of my factors were the same signal wearing different hats. The 2024 lean, the voting history and the "fundamentals" are 99% correlated with each other, and the outside models are built from the same stuff. So the factors are now grouped into five blocks (partisan structure, outside models, expert ratings, race specific signals, and the electorate) and each block gets one weight. You can still tune the pieces inside a block but the block weight is the thing that actually matters.
The factors right now: the ElectIndex composite (a full quant model someone publishes openly on github, its very good), the FiftyPlusOne model (G. Elliott Morris, basically the 538 successor), Grant's forecast (an open bayesian model on github with real backtests, I weight it low since its one guy), the average of 8 expert rating shops (Cook, Sabato, Inside Elections, Split Ticket, Decision Desk, RacetotheWH, Fox and the Almanac), race level polling, betting markets (Kalshi and PredictIt averaged together), fundamentals like approval and the economy, the national generic ballot, fundraising, candidate quality, county level trends since 2024, demographics, the seats partisan lean from 2024, a three cycle voting history average, and a midterm turnout model. That last one is based on the idea that midterm electorates skew college educated and high propensity, which is now the Democratic coalition, so high college seats get a small D bump. You can click the little i icons on each slider to see what each one does and where the data comes from.
The margin then becomes a win probability using a normal distribution. Every race gets its own sigma now: it starts at the base slider (6 points, roughly recent polling error), gets wider when my inputs disagree with each other about a race, and gets narrower the more polls a race has. An unpolled house seat where the models argue might sit at 9 or 10, a heavily polled senate race closer to 5. Low sigma means confident, margins become basically calls. High sigma means everything drifts back toward a tossup.
For chamber control I dont just add up the favorites, I run 4000 simulations where races swing together. Theres a national shock, a regional one (so Michigan and Ohio move together), a same state one, and a demographic one where similar states move together. This matters because the "sum of the favorites" always understates how likely a wave is in either direction. If republicans are having a good enough night to win Michigan then they almost certainly already won Ohio, the sims know that now.
Independents were anoying to handle but important. Dan Osborn in Nebraska and a couple others have real win odds, and none of the 2026 independents have commited to caucusing with either party (King and Sanders arent up this cycle). So an independent win counts toward neither side in the seat math, they show up yellow on the map.
How does this compare to the forecasts you actually see in the news? The ratings shops like Cook and Sabato are reporting driven, they talk to campaigns and donors and move races one category at a time, there great at candidate quality stuff but slow and categorical. Nate Silver style models (Silver Bulletin, Strength in Numbers, ElectIndex) are polls plus fundamentals with simulations, rigorous but you cant touch the assumptions. Betting markets are fast and put real money on the line but they can get weird on thin volume. Mine is deliberately in the middle: I use all of them as inputs, I keep the simulation machinery the serious models have, but every weight and assumption is a slider I can drag and the whole thing recalculates instantly. Its less about beating Nate Silver and more about being able to ask "what would have to be true for the senate to flip" and actually get an answer.
Everything gets collected 4 times a day and every raw pull is archived forever, so after November I can score my model against the actual results and against everyone else, and eventually train better weights off the history. Slider settings save in your browser so feel free to mess with it, reset puts my defaults back.