OMEN
Simulate the electorate, not the candidate.
Census-backed populations, one campaign at a time. Events move them. Manual live orders are reserved for campaigns that clear provenance, backtest, and market-mapping gates.
A population simulator for predictable events.
Elections, awards, referendums, regulatory decisions — outcomes are not fate. They are the aggregate of millions of individual decisions under predictable behavioral biases. OMEN simulates that aggregation. Where our population disagrees with the market, we only act once the campaign is explicitly marked ready for manual live trading.
The loop.
Populate
Census ACS 5-year PUMS microdata — real individual records for the race's state or district — get weighted-sampled down to the simulation size (default 2,000; cap 25,000). Same seed, same voters, every time.
Event-feed
The race's timeline — polls, debates, endorsements, scandals, ad spend — is encoded with a valence and magnitude against our rubric. Events flow through the population chronologically.
Simulate
Each voter updates their intent under a stateful belief-updating rule. Partisan base locks in. Swing moves on debates. Low-info chases endorsements. Cross-pressured swings late. The population drifts.
Aggregate & gate
Per-event snapshots sum to a campaign-level prediction. OMEN only surfaces a live trade when provenance, backtests, geometry coverage, and market mapping are all green.
Real people. Real demographics. Real districts.
Populations come from US Census ACS 5-year PUMS microdata — every simulated voter is a real individual record, preserving the joint distribution of age × sex × education × race × ethnicity × income × citizenship × PUMA as reported to Census. We filter to voting-age citizens, weighted-sample down to 25,000 rows per state for repo size, and rescale so the total weight still equals the state's full citizen-voting-age population.
source · data/acs/*.json · fetched via Census ACS 5-year PUMS API · filters: AGEP≥18, CIT∈{1-4} · weighted-sample-without-replacement cap 25,000 rows · weight rescaled so totalWeight = full citizen-voting-age population
Each simulated voter holds an ideological coordinate, a turnout propensity, and a behavioral-segment label (partisan base, swing, low-info, demographic bloc, cross-pressured). Events propagate through the population under segment-specific update rules — base locks in, swing moves on debates, low-info reacts to endorsements + attack ads. The segment mix is drawn from Pew + ANES typology studies as an informed starting prior, then calibrated per-race when polling crosstabs are available. The forecast does not rely on these mix proportions in isolation — they're a rule for how recent events perturb the outcome on top of the Census-demographic + polling + structural signal, all weighted via the four-engine ensemble.
full derivation + thresholds · /omen/methodology
Held-out evaluation. No grading your own work.
The honest number below is the hybrid forecast with information frozen 30 days before election day — the forecast OMEN would have produced at T−30, without knowing the late polls or last-minute events. It's the only number that counts. Deterministic seeds mean any result is exactly reproducible from source.
For comparison: the same hybrid ensemble scored with full information (every poll + event up to election day visible). This is the ceiling we grade ourselves against — the gap between it and the honest T−30 number is what the late-cycle information was worth.
Where the system is strong and weak. Sorted by hybrid share err, best-calibrated first. Primaries are genuinely the hardest class because within-party ideology is a noisier signal than D/R contrast.
Four engines combine via confidence-weighted ensemble with 15% shrinkage toward uniform: fundamentals (pregame + incumbency), polling aggregate (recency × sample × population weighted), synthetic electorate (real ACS Census populations + CPS-calibrated individual turnout propensity + ideology-proximity voter preferences), and an event/sentiment engine. Populations for 7 of 9 fixtures are drawn from US Census ACS microdata — real people from the actual state or district, every dimension (age × education × race × income) sampling within ~2pp of the true weighted distribution at n=2,000. The two national-popular-vote fixtures use the segment-mix generator instead (national ACS caches exceed repo size budget).
Every backtest. Every number.
Eight historical races across primaries, gubernatorial, senate, and presidential contests from 2016 to 2024. Ranked by share error. Two documented upsets where pregame priors had the wrong winner.
Deterministic. Traceable. Falsifiable.
No LLMs in the hot path. Same seed + same events = byte-identical prediction. Reproducibility is load-bearing.
Every aggregate prediction decomposes to per-segment and per-voter contributions. If you can't explain the call, the call is wrong.
Backtests score on a held-out slice the model never saw. Live predictions will be pre-registered before election date. Known failures documented in the repo, not buried.
Grounded in Levitt 2004, Croxson & Reade 2014, Argyle et al. 2023, Park et al. 2023–2024, Gao et al. 2024.
Live predictions begin when the first market opens.
OMEN is a research system today. Backtests are clean; live trading is the next phase. The plan: pre-register a forecast for a 2026 primary market on Kalshi at least 72 hours before election day, with full per-segment breakdowns and the exact population seed. Pre-registered means the record is public.