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

  1. 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.
  2. pp_noise_only Consistently Outperforms base:
    • 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)
    • 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$).
  3. Standalone Forward Evaluation (2010–2022):
    • Evaluated directly from 14-day pre-election polling consensus, pp_noise_only reduced 8-party CRPS in all 4 historical elections (2010, 2014, 2018, 2022), improving overall CRPS from 0.9537 to 0.7195.
  4. 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

  1. Exact Sum to 100%: $\sum x’_p = \sum x_p + \lambda \sum r_p = 100.0\%$.
  2. Strict Positivity: $x’_p \ge \epsilon > 0$ for all parties $p$.
  3. 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

  1. base: $x’_i = x_i$ (unmodified state_plus_dynamics).
  2. 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}$.
  3. pp_noise_only: $x’i = x_i + \lambda^{(i)} (\mathbf{r}{k^{(i)}} - \bar{\mathbf{r}})$ with $k^{(i)} \sim \text{Uniform}(1..K)$.
  4. pp_bias_plus_noise: $x’i = x_i + \lambda^{(i)} \mathbf{r}{k^{(i)}}$ using the exact same sampled index $k^{(i)}$ as pp_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 ElectionHistorical Pool Sizebase 8p CRPSpp_bias_only 8p CRPSpp_noise_only 8p CRPSpp_bias_plus_noise 8p CRPSMean $\lambda$
2010$K=2$ (2002, 2006)0.59500.86570.54680.67111.0000
2014$K=3$ (2002–2010)1.25741.02140.97430.76331.0000
2018$K=4$ (2002–2014)1.18911.10920.88560.83651.0000
2022$K=5$ (2002–2018)0.77320.63380.47130.41100.9554
Overall (2010–2022)0.95370.90750.71950.67050.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)

Variant8-Party MAE8-Party Mean CRPSAll-9 Mean CRPSREST CRPS50% Coverage (Width)80% Coverage (Width)90% Coverage (Width)Mean $\lambda$$\lambda < 0.90$
base1.11%0.84940.81830.569625.9% (0.87 pp)43.5% (1.69 pp)54.6% (2.29 pp)1.00000.0%
pp_bias_only1.14%0.88860.84090.458825.9% (0.87 pp)51.9% (1.69 pp)63.0% (2.29 pp)0.99970.1%
pp_noise_only1.11%0.80010.77300.556244.4% (1.54 pp)69.4% (2.85 pp)76.9% (3.51 pp)0.99910.3%
pp_bias_plus_noise1.11%0.85680.80720.410650.9% (1.52 pp)71.3% (2.82 pp)80.6% (3.48 pp)0.98794.1%

By Target Election

ElectionVariant8-Party MAE8-Party Mean CRPS50% Coverage (Width)80% Coverage (Width)90% Coverage (Width)
2018base1.34%1.062313.0% (0.84 pp)31.5% (1.62 pp)38.9% (2.20 pp)
2018pp_noise_only1.33%0.984535.2% (1.51 pp)53.7% (2.69 pp)63.0% (3.31 pp)
2018pp_bias_only1.38%1.115418.5% (0.84 pp)38.9% (1.62 pp)50.0% (2.20 pp)
2018pp_bias_plus_noise1.36%1.072040.7% (1.51 pp)63.0% (2.69 pp)70.4% (3.31 pp)
2022base0.89%0.636438.9% (0.90 pp)55.6% (1.76 pp)70.4% (2.38 pp)
2022pp_noise_only0.90%0.615853.7% (1.56 pp)85.2% (3.00 pp)90.7% (3.72 pp)
2022pp_bias_only0.91%0.661833.3% (0.90 pp)64.8% (1.76 pp)75.9% (2.38 pp)
2022pp_bias_plus_noise0.86%0.641561.1% (1.53 pp)79.6% (2.94 pp)90.7% (3.64 pp)

By Horizon (8-Party CRPS)

Horizonbasepp_bias_onlypp_noise_onlypp_bias_plus_noise
7 days0.44690.56380.40320.5086
14 days0.61090.59280.53140.5645
28 days0.86130.73650.77660.7120
56 days1.02731.02780.98251.0058
84 days1.10891.19581.08021.1704
112 days1.04101.21511.02701.1792

6. Attenuation Diagnostics ($\lambda$)

  • pp_noise_only:
    • mean_lambda: 0.9991
    • p05_lambda: 1.0000
    • fraction_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

  1. Why pp_noise_only Works:
    • pp_noise_only injects 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).
  2. 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_dynamics under-dispersed. pp_noise_only fills this gap naturally, reducing $h=7\text{d}$ CRPS from 0.4469 to 0.4032.
  3. 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.