Who will win the 2027 French presidential election?
A transparent Bayesian poll-aggregation forecast — first-round vote intention and the runoff.
Who's running?
Choose the field — the left and centre are multi-select, the RN fields one nominee (Le Pen or Bardella), and Les Républicains may sit it out. Only candidates polled recently enough to estimate are shown; the always-included set and minor candidates are fixed. The forecast recomputes live from the model's posterior draws.
When you untick a candidate, they “drop out” and their vote is redistributed to the remaining candidates by inverse-distance weighting on a left–right axis (nearer candidates get more), with an abstention outlet for votes that would rather stay home — instead of the default proportional split. These positions and knobs are explicit assumptions; adjust them and everything recomputes live.
Candidate positions (0 = far left → 100 = far right)
The left–right ordering is fixed — each slider is clamped between its neighbours, so you calibrate distances, not who sits left of whom.
Who wins the presidency?
Each dot is one simulated election, placed in the row of the candidate who won it — so the width of each cloud is that candidate's chance of winning. Hover a dot to see that simulation's first-round result and the runoff it produced. ()
First-round vote intention over time
Lines are the model's estimate; shaded bands are the 80% credible interval, widening toward election day. Dots are individual polls (renormalised within the line-up).
1,000 simulated elections
Each dot is one simulated first-round result. The two candidates with the highest scores advance to the runoff, so candidates clustered near the top are fighting for the second qualifying spot.
Most likely runoff match-ups
The runoffs that occur most often across simulations. Each dot is one simulated runoff, placed by the RN candidate's second-round share and coloured by the winner; the dashed line is the 50% threshold. Hover a dot for that runoff's result.
The forecast is a Bayesian poll-aggregation model in the tradition of FiveThirtyEight and the Economist's 2020 model (Gelman, Morris & Heidemanns), which in turn build on the dynamic state-space election forecasting of Linzer (2013). We adapt that lineage to France's two-round, many-candidate system. It has two stages — a first-round vote-share model and a runoff model — and every prior is calibrated on the 2012–2022 cycles, so the uncertainty is empirically grounded rather than assumed. Everything is fit in Stan (first round: 4 chains, R̂ ≈ 1.00), and this page recomputes the forecast for any chosen line-up directly from the posterior draws.
1 · First round: latent vote intention as a random walk
For candidates c = 1…C over weeks w = 1…W (with W the election week), a latent support βc,w on an unbounded (log-odds–like) scale follows a Gaussian random walk:
The weekly step σ = 0.045 is fixed rather than estimated. This is a deliberate regularisation: the 2027 field is volatile, and letting σ float lets it soak up scenario-to-scenario disagreement as if it were real movement. (This departs from the usual “let the data speak” instinct — cf. Gelman's weakly-informative-prior advice — trading a little in-sample fidelity for a smoother, less overconfident line; the genuine forecast-horizon spread is recovered from history in §3.) The overall level is unidentified by the softmax below, so we anchor it with a soft sum-to-zero each week, ∑c βc,w ∼ Normal(0, 0.12).
2 · How a poll sees the latent state (subset softmax)
French polls test different line-ups: one release may or may not include a given candidate. A poll i fielded in week wi by pollster pi reports shares only over the candidate subset Si present in that hypothesis. We model it as the softmax over exactly that subset of the latent state plus a pollster house effect δp,c:
This renormalisation is exactly what a restricted-line-up poll measures (conditional shares), so polls with different fields all inform the same β. House effects use a hierarchical scale δp,c ∼ Normal(0, σhouse2) and are soft-centred, ∑p δp,c ≈ 0, so β tracks the average pollster.
Effective sample size. Reported shares are counts on a deflated sample,
3 · Calibration from history, and the forecast
Using final-stretch polls vs. actual results in 2012/2017/2022, we regress squared poll error on horizon h (days to the election). A random walk implies variance growing linearly in time:
The intercept gives the irreducible election-day poll error a ≈ 0.038 (about 3.8 points); the slope gives the daily drift √c ≈ 0.0020 (0.2 pt/day). To forecast, we take the latent state at the last poll week w∗ and add (i) random-walk drift to election day and (ii) the systematic election-day miss — the piece that does not shrink with more polls:
The share for a chosen line-up 𝒜 is the softmax over just those candidates, πc = softmax𝒜(β̃)c. The drift/error sds are the historical quantities mapped from the share scale to the latent scale by κ = 1⁄[π(1−π)] ≈ 5.9 (evaluated at a typical π ≈ 0.22), i.e. srw = √c · √7 · κ and serr = a · κ.
4 · Runoff: a Bradley–Terry model
Each candidate has a latent runoff strength sc. A head-to-head poll of A vs. B gives A's expected share as
with sc ∼ Normal(0, 1.52) (soft sum-to-zero) and over-dispersion φ ∼ Gamma(2, 0.05). Bradley–Terry pools sparse matchup polls and predicts any pairing through shared opponents. For a runoff between the first-round top two X, Y, the winner probability adds a horizon inflation σ2 = √(serr2 + srw,day2 H):
5 · What the dots are
One simulated election = one posterior draw of {β̃, s} plus fresh drift/error/runoff noise: draw the first-round shares π, take the top two, sample the runoff winner (Bernoulli at P(X wins)). Repeating over the thinned posterior gives the posterior predictive distribution you see — the trajectory bands are per-week quantiles of π, and each dot in the “who wins” and “1,000 simulations” panels is one such draw.
6 · Assumptions & limitations
- Shares among expressed votes. Turnout and undecideds are not modelled; reported shares are renormalised over modelled candidates, i.e. undecideds are assumed to split like decideds.
- The line-up is a scenario, chosen by you, not inferred.
- Softmax independence (IIA). Two candidates never polled together are placed on a common scale only through shared opponents; for true substitutes (e.g. the two RN nominees) the softmax would overstate their combined support, which is why they are mutually exclusive in the picker.
- Runoff uses posterior-mean strengths plus horizon inflation, not the full strength posterior — a modest understatement of runoff uncertainty.
- Polls-only. No economic or approval “fundamentals”.
Calibrated quantities
| quantity | symbol | value |
|---|---|---|
| election-day poll error (sd) | a | 3.8 pts |
| opinion drift (random walk) | √c | 0.20 pt/day |
| pollster house-effect sd | σhouse | 0.9 pt |
| design effect | deff | 2.2 |
| weekly RW step (fixed, smoothing) | σ | 0.045 (latent) |
| share→latent conversion | κ | ≈ 5.9 |
Full source (R + Stan + this page) accompanies the model;
calibration is produced by R/03_calibrate.R, the fits by
04–05, and the shipped draws by R/08_export_draws.R.