Election Result Layer v2 (Bounded Percentage-Point Transfers) — Methodology and Report
Election Result Layer v2 (Bounded Percentage-Point Transfers) — Methodology and Report
1. Executive Summary
This study implements and evaluates Election Result Layer v2, testing whether historical poll-to-election residuals improve election forecasts when applied via bounded percentage-point transfers on the simplex, rather than multiplicative shifts in Centered Log-Ratio (CLR) space.
Core Findings
- Percentage-Point vs CLR Space:
- Unlike CLR residuals (which produced catastrophic distortions due to log-ratio multiplier leverage on historically unpolled parties), percentage-point transfers remain strictly well-behaved and preserve the simplex geometry.
pp_noise_onlyConsistently Outperformsbase:- 8-Party Mean CRPS: Improves overall from 0.8494 (
base) to 0.8001 (pp_noise_only). - Election-by-Election: Improves in both target general elections:
- 2018: 0.9845 vs 1.0623 (
base) - 2022: 0.6158 vs 0.6364 (
base)
- 2018: 0.9845 vs 1.0623 (
- Horizon-by-Horizon: Improves CRPS across all six forecast horizons ($h \in {112, 84, 56, 28, 14, 7}$).
- Calibration: 90% coverage improves from 54.6% to 76.9% (reaching 90.7% in 2022) with only modest interval widening ($+1.22$ pp).
- Minimal Attenuation: Mean $\lambda = 0.9991$; over 99.7% of samples required zero or negligible attenuation ($\lambda \ge 0.90$).
- 8-Party Mean CRPS: Improves overall from 0.8494 (
- Standalone Forward Evaluation (2010–2022):
- Evaluated directly from 14-day pre-election polling consensus,
pp_noise_onlyreduced 8-party CRPS in all 4 historical elections (2010, 2014, 2018, 2022), improving overall CRPS from 0.9537 to 0.7195.
- Evaluated directly from 14-day pre-election polling consensus,
- Static Bias (
pp_bias_only) Adds No Value:- Applying a static historical mean bias vector degrades full hindcasts (8-party CRPS worsens to 0.8886) because party-specific errors vary across political eras.
2. Mathematical Formulation & Transfer Scaling
Let $x \in \Delta^9$ be the base composition from state_plus_dynamics ($\sum x_p = 100\%$, $x_p \ge \epsilon = 0.01\%$), and let $r \in \mathbb{R}^9$ be a joint residual vector satisfying $\sum_{p=1}^9 r_p = 0$.
Bounded Simplex-Safe Transfer
The maximum feasible uniform transfer scale $\lambda \in [0, 1]$ is:
\[\lambda = \begin{cases} 1.0 & \text{if } \{p : r_p < 0\} = \emptyset \\ \min\left(1.0,\; \min_{r_p < 0} \frac{x_p - \epsilon}{-r_p}\right) & \text{otherwise} \end{cases}\]The transferred composition is: \(x' = x + \lambda r\)
Theoretical Guarantees
- Exact Sum to 100%: $\sum x’_p = \sum x_p + \lambda \sum r_p = 100.0\%$.
- Strict Positivity: $x’_p \ge \epsilon > 0$ for all parties $p$.
- Directional Preservation: If $\lambda > 0$, the relative transfer proportions $\frac{x’_p - x_p}{x’_q - x_q} = \frac{r_p}{r_q}$ are strictly preserved.
3. Four Model Variants
base: $x’_i = x_i$ (unmodifiedstate_plus_dynamics).pp_bias_only: $x’i = x_i + \lambda^{(i)} \bar{\mathbf{r}}$ where $\bar{\mathbf{r}} = \frac{1}{K}\sum{k=1}^K \mathbf{r}_{e_k}$.pp_noise_only: $x’i = x_i + \lambda^{(i)} (\mathbf{r}{k^{(i)}} - \bar{\mathbf{r}})$ with $k^{(i)} \sim \text{Uniform}(1..K)$.pp_bias_plus_noise: $x’i = x_i + \lambda^{(i)} \mathbf{r}{k^{(i)}}$ using the exact same sampled index $k^{(i)}$ aspp_noise_only.
4. Standalone Forward Evaluation from 14-Day Polling Consensus (2010–2022)
Evaluated directly on $x = \text{PollConsensus}_E$ using exact discrete distributions:
| Target Election | Historical Pool Size | base 8p CRPS | pp_bias_only 8p CRPS | pp_noise_only 8p CRPS | pp_bias_plus_noise 8p CRPS | Mean $\lambda$ |
|---|---|---|---|---|---|---|
| 2010 | $K=2$ (2002, 2006) | 0.5950 | 0.8657 | 0.5468 | 0.6711 | 1.0000 |
| 2014 | $K=3$ (2002–2010) | 1.2574 | 1.0214 | 0.9743 | 0.7633 | 1.0000 |
| 2018 | $K=4$ (2002–2014) | 1.1891 | 1.1092 | 0.8856 | 0.8365 | 1.0000 |
| 2022 | $K=5$ (2002–2018) | 0.7732 | 0.6338 | 0.4713 | 0.4110 | 0.9554 |
| Overall (2010–2022) | — | 0.9537 | 0.9075 | 0.7195 | 0.6705 | 0.9888 |
5. Full Pipeline Hindcasts with OpinionState + Dynamics (2018 & 2022)
Evaluated across 6 horizons ($112, 84, 56, 28, 14, 7$ days) $\times$ 9 categories $\times$ 5000 paired Monte Carlo samples ($N=432$ rows):
Overall Comparison (2018 + 2022)
| Variant | 8-Party MAE | 8-Party Mean CRPS | All-9 Mean CRPS | REST CRPS | 50% Coverage (Width) | 80% Coverage (Width) | 90% Coverage (Width) | Mean $\lambda$ | $\lambda < 0.90$ |
|---|---|---|---|---|---|---|---|---|---|
base | 1.11% | 0.8494 | 0.8183 | 0.5696 | 25.9% (0.87 pp) | 43.5% (1.69 pp) | 54.6% (2.29 pp) | 1.0000 | 0.0% |
pp_bias_only | 1.14% | 0.8886 | 0.8409 | 0.4588 | 25.9% (0.87 pp) | 51.9% (1.69 pp) | 63.0% (2.29 pp) | 0.9997 | 0.1% |
pp_noise_only | 1.11% | 0.8001 | 0.7730 | 0.5562 | 44.4% (1.54 pp) | 69.4% (2.85 pp) | 76.9% (3.51 pp) | 0.9991 | 0.3% |
pp_bias_plus_noise | 1.11% | 0.8568 | 0.8072 | 0.4106 | 50.9% (1.52 pp) | 71.3% (2.82 pp) | 80.6% (3.48 pp) | 0.9879 | 4.1% |
By Target Election
| Election | Variant | 8-Party MAE | 8-Party Mean CRPS | 50% Coverage (Width) | 80% Coverage (Width) | 90% Coverage (Width) |
|---|---|---|---|---|---|---|
| 2018 | base | 1.34% | 1.0623 | 13.0% (0.84 pp) | 31.5% (1.62 pp) | 38.9% (2.20 pp) |
| 2018 | pp_noise_only | 1.33% | 0.9845 | 35.2% (1.51 pp) | 53.7% (2.69 pp) | 63.0% (3.31 pp) |
| 2018 | pp_bias_only | 1.38% | 1.1154 | 18.5% (0.84 pp) | 38.9% (1.62 pp) | 50.0% (2.20 pp) |
| 2018 | pp_bias_plus_noise | 1.36% | 1.0720 | 40.7% (1.51 pp) | 63.0% (2.69 pp) | 70.4% (3.31 pp) |
| 2022 | base | 0.89% | 0.6364 | 38.9% (0.90 pp) | 55.6% (1.76 pp) | 70.4% (2.38 pp) |
| 2022 | pp_noise_only | 0.90% | 0.6158 | 53.7% (1.56 pp) | 85.2% (3.00 pp) | 90.7% (3.72 pp) |
| 2022 | pp_bias_only | 0.91% | 0.6618 | 33.3% (0.90 pp) | 64.8% (1.76 pp) | 75.9% (2.38 pp) |
| 2022 | pp_bias_plus_noise | 0.86% | 0.6415 | 61.1% (1.53 pp) | 79.6% (2.94 pp) | 90.7% (3.64 pp) |
By Horizon (8-Party CRPS)
| Horizon | base | pp_bias_only | pp_noise_only | pp_bias_plus_noise |
|---|---|---|---|---|
| 7 days | 0.4469 | 0.5638 | 0.4032 | 0.5086 |
| 14 days | 0.6109 | 0.5928 | 0.5314 | 0.5645 |
| 28 days | 0.8613 | 0.7365 | 0.7766 | 0.7120 |
| 56 days | 1.0273 | 1.0278 | 0.9825 | 1.0058 |
| 84 days | 1.1089 | 1.1958 | 1.0802 | 1.1704 |
| 112 days | 1.0410 | 1.2151 | 1.0270 | 1.1792 |
6. Attenuation Diagnostics ($\lambda$)
pp_noise_only:mean_lambda: 0.9991p05_lambda: 1.0000fraction_lambda_lt_0_99: 0.30%fraction_lambda_lt_0_90: 0.30%fraction_lambda_lt_0_75: 0.10%
- Conclusion: Percentage-point transfers virtually never violate simplex boundaries on real Swedish compositions, confirming that $\lambda$-scaling serves as a reliable guardrail without artificially compressing transfer vectors.
7. Substantive & Methodological Interpretations
- Why
pp_noise_onlyWorks:pp_noise_onlyinjects realistic, empirical joint election-day co-movement without assuming static bias directions.- It captures the historical scale of late-breaking / election-day error while preserving cross-party correlations (e.g. Left/Green intra-bloc consolidation and Alliansen co-movements).
- Double-Counting Caveat:
- A 14-day poll-to-election residual includes genuine late campaign movement as well as polling error.
- At long horizons ($h=112$ days), Dynamics already accounts for most opinion drift. However, as $h \to 7$ days, Dynamics uncertainty contracts toward zero, leaving
state_plus_dynamicsunder-dispersed.pp_noise_onlyfills this gap naturally, reducing $h=7\text{d}$ CRPS from 0.4469 to 0.4032.
- Small Sample Size Warning:
- Training pools contain only $K=2..5$ elections. The empirical improvements are clear and consistent, but must be treated as a parsimonious empirical dispersion layer rather than an exhaustive asymptotic distribution.
8. Final Recommendation for Production Simulator
Recommended Production Vote-Share Layer:
pp_noise_only
- Architecture: \(\text{Sample } \theta_t^{(i)} \sim \text{OpinionState v1.1}\) \(\mathbf{z}^{(i)} = \text{clr\_to\_composition}(\text{CLR}(\theta_t^{(i)}) + S^{(i)}\mathbf{\Delta}_h^{(i)}) \quad \text{via Dynamics v2}\) \(x_E^{(i)} = \mathbf{z}^{(i)} + \lambda^{(i)}(\mathbf{r}_{k^{(i)}} - \bar{\mathbf{r}})\)
- Why: It improves 8-party CRPS in both 2018 and 2022, outperforms across every forecast horizon, elevates 90% coverage to ~77–91%, operates with virtually zero attenuation ($\lambda \approx 1.0$), and avoids all pathological distortions of CLR log-ratio models.
