spb/qc-election
Public
Python 66.6%
HTML 24.8%
CSS 4.9%
JavaScript 3.6%
1<!-- QC Élection Forecast — Plateforme de prévision électorale du Québec 2026 -->2<!-- Auteur : Simon-Pierre Boucher -->3<!-- Contact : contact@spboucher.ai -->4<!-- https://www.qc-election.com -->56# STATISTICAL DEBT — inventaire honnête des paramètres manuels (§100.8-9)78Chaque paramètre « choisi à la main » est une dette : il doit devenir estimé9(inférence hiérarchique, validation croisée) ou documenté comme prior10conservateur assumé. État au 2026-08-30 (v3.0.x).1112## Paramètres manuels du cœur (config.py)1314| Paramètre | Valeur | Origine | Dette | Plan |15|---|---|---|---|---|16| `time_decay_halflife_days` | 12 j | convention (538-like) | moyenne | replay multi-élections → profil de vraisemblance |17| `max_effective_n` | 2500 | anti-domination, heuristique | faible | test de sensibilité |18| `design_effects` (web 1,30…) | littérature | littérature générale, pas QC | moyenne | `pollster_error.mode_effects` sur 6 élections |19| `excess_poll_sd_pp` | 1,5 pp | littérature TSE | moyenne | résidus multi-élections |20| `rw_daily_sd` bornes | [0,004; 0,030] | garde-fous | faible | q déjà estimé par MV dans les bornes |21| `campaign_drift_inflation` | 1,6 | « cycles passés », non formalisé | **élevée** | replay : estimer l'inflation campagne vs hors-campagne |22| `house_effect_shrinkage` | 0,5 | heuristique | moyenne | hiérarchique (global + déviation élection, τ estimé) |23| `house_effect_max_pp` | ±3 pp | garde-fou | faible | conserver comme borne |24| `industry_error_sd` | 0,12 (alr) | calibré sur 2018+2022 SEULEMENT | **élevée** (§60 : no single-election calibration) | `pollster_error.industry_sigma` empirique sur 6 élections (implémenté) |25| `regional_error_sd` | 0,14 | résidus backtest 2022, atténués à la main | **élevée** | résidus multi-élections (2018→2022 + 2014→2018…) quand les résultats par circ. seront ingérés |26| `riding_error_sd` | 0,20 | idem | **élevée** | idem |27| `incumbent_retirement_penalty` | 0,06 alr | littérature | moyenne | §29 : apprendre P(perte du vote personnel) par contexte |28| `byelection_swing_shrink` | 0,6 | littérature partielles | moyenne | §30 : modèle de partielle avec effet participation/candidat |29| `byelection_equivalent_n` / excess | 350 / ±3 pp | jugement | moyenne | idem |30| `media_nudge_pp_max` | ±0,35 pp | borne prudente, NON backtestée | assumée (borne stricte, décomposée) | validation post-2026 (§96) |31| `market_blend_weight` | 12 % | prudence, NON appris | **élevée** (§36 : no fixed 88/12) | stacking appris quand historique de marchés QC existera (aucun marché 2022) |32| `fundamentals_horizon_days`/`max_weight`/exp 1,3 | 540/0,8/1,3 | forme 538-like | **élevée** (§33) | replay : apprendre la décroissance |33| `fundamentals_term_penalty_pp` | 1,5 pp/mandat | littérature | moyenne | LOEO (8 obs. — restera un prior) |34| `RIDGE_LAMBDA` (fondamentaux) | 4,0 | jugement | moyenne | LOEO sur grille |35| volatilité A/B/C (0,10/0,06/0,05) et cap 1,5 | jugement borné | **assumée** (variance seulement, bornée, décomposée) | validation post-2026 |36| catégories Solide/Probable/Favorisé (95/80/60) | convention | faible | présentation seulement |3738## Couches non backtestées (état)39- **Partielles, nudge médias, volatilité sociale/wiki** : non rejouables avant40 2022 (données absentes) — bornées par construction, Δ=0 documenté dans41 l'ablation, évaluation après le 5 octobre 2026 (§96).42- **Ensemble marchés** : aucun marché 2022 → poids prudent 12 % assumé.43- **Sondage synthétique LLM** : poids nul, objet d'étude (§97).4445## Fuites potentielles identifiées (et leur état)461. ~~`compute_pollster_profiles` en backtest~~ — le backtest 2022 passe `{}`47 (aucune correction maison) : pas de fuite, mais sous-utilise l'info →48 remplacé par LOEO dans le replay (profils appris sur les AUTRES élections).492. **Fondamentaux en replay** : `_ridge_fit()` s'ajuste sur les 8 élections,50 INCLUANT celle testée → fuite dans le backtest 2022 actuel (faible mais51 réelle). Corrigé : `compute_prior(exclude_year=…)` (LOEO strict).523. `industry_error_sd=0,12` calibré sur 2018/2022 puis testé sur 2022 →53 circulaire. Corrigé par l'estimation multi-élections LOEO.5455## Constats du replay v3.1 (recherche ouverte)56- **EAM ponctuelle** : modèle 3,71 pp vs baseline « moyenne 14 j » 3,49 (le modèle57 bat « dernier sondage » 3,84). L'écart vient surtout de 2007 (surge ADQ 6,6 vs58 5,4) — cohérent avec le chantier queues lourdes. La valeur du modèle est la59 DISTRIBUTION : les baselines n'ont ni intervalle, ni couverture, ni P(sièges).60 Pistes : corrections maison LOEO possiblement contre-productives en point aux61 horizons lointains (petits échantillons); q trop lisse en campagne; Student-t.62 À trancher par le même replay avant tout changement (§84).63