Electioneer ElectioneerDocumentation
Play
Game Systems/The Model

The vote model

The vote model is deliberately simple, and its simplicity is the point: every number it produces can be traced back to something you did.

The core equation#

A state is divided into blocs. Each bloc's two-party share is:

share = sigmoid(baselineMargin + campaignMargin)

That is the whole model.

baselineMargin is where that bloc started — the historical, scenario-defined position before anyone campaigned.

campaignMargin is the sum of every cause logged against that bloc. Not a derived score, not a weighted blend: literally the sum. When the recap tells you a rally in Pennsylvania moved margin by some amount, that number is a term in this equation.

This is why the recap can be honest about attribution. There is no hidden term to explain away a discrepancy.

Momentum is transient#

Signed state momentum couples into vote margin at a per-point rate, but it does so as a separate term rather than being added into campaignMargin.

The distinction matters. Momentum decays every week (×0.7 at state level), so its contribution fades. It never bakes into the permanent campaign margin. A surge is a surge; it is not a structural gain.

The coupling is zero at neutral momentum, so it leaves the model's calibration untouched when nothing is happening.

Blocs and enthusiasm#

Each bloc carries enthusiasm, which relaxes toward neutral by 40% a week. Enthusiasm modulates how much a bloc actually turns out, which is why get-out-the-vote work is a different lever from persuasion: persuasion moves campaignMargin, turnout work moves who shows up.

From blocs to a result#

Bloc shares aggregate into a contest tally per state — Democratic votes, Republican votes, total, two-party share, and a winner. Contests aggregate into electoral votes, with a tossup category for states too close to call.

What this means in play#

See also#

Ask