Méthodologie

Le système est auditable et reproductible : sources, formules, hypothèses et limites, sans boîte noire.

1. Ce que la plateforme calcule

Deux estimations distinctes sont publiées : le nowcast (« si l'élection avait lieu aujourd'hui, quelle serait l'intention de vote réelle ? ») et le forecast (« quelle est la distribution probable du résultat le jour du scrutin ? »). Le forecast ajoute au nowcast l'incertitude liée à l'évolution possible de l'opinion d'ici le vote.

2. Données et provenance

Chaque valeur en base conserve sa source, son URL, sa date d'accès, sa valeur brute et sa valeur normalisée. Sources actuelles : données ouvertes officielles d'Élections Québec (DGEQ) — carte électorale 2026 (GeoJSON des 127 circonscriptions), liste officielle, registre des candidatures avec drapeau « député sortant »; agrégation des sondages publics (Wikipédia, avec lien vers chaque maison); résultats officiels 2022 par circonscription; marchés prédictifs (Polymarket, affichage auxiliaire seulement). Les circonscriptions nouvelles (Bellefeuille, Marie-Lacoste-Gérin-Lajoie) reçoivent comme référence la moyenne de leurs circonscriptions parentes — approximation documentée dans la fiche de chaque circonscription.

3. Pondération des sondages

Aucun sondage n'est traité également. Trois facteurs :

FacteurFormuleRôle
Récence0,5^(âge / 12 jours)demi-vie de 12 jours (la date de terrain compte, pas la date de publication)
Précisionn_eff = min(n / deff, 2500)taille effective avec design effect par mode (web 1,30, téléphone 1,20…), plafonnée pour qu'aucun sondage géant ne domine
Qualité de la maison×0,6 à ×1,4selon l'erreur absolue moyenne historique; maison inconnue : ×0,9 et incertitude accrue

À la variance d'échantillonnage s'ajoute une erreur excédentaire de ±1,5 pp (erreur totale d'enquête : cadre, non-réponse, pondération du sondeur).

4. Effets maison (house effects)

Pour chaque maison, on compare ses sondages des 21 derniers jours des campagnes passées au résultat réel. Le biais moyen par parti est rétréci de 50 % vers zéro (on reste incertain sur l'estimation du biais) et borné à ±3 pp, puis soustrait des sondages avant l'ajustement du modèle. Les cotes sont recalculées à chaque cycle — il n'y a aucune note arbitraire fixe.

5. Modèle latent (state space bayésien)

Les intentions de vote sont compositionnelles (somme = 100 %). L'état latent est le vecteur des log-ratios additifs y_k = log(p_k / p_CAQ) (5 dimensions pour 6 composantes), ce qui garantit la cohérence de la composition et la corrélation négative entre partis : si un parti monte, les autres baissent.

Dynamique : marche aléatoire gaussienne x_t = x_{t−1} + w_t, w_t ∼ N(0, q·I). Chaque sondage est une observation bruitée y = alr(parts ajustées) avec covariance multinomiale (méthode delta) sur la taille effective. L'inférence est un filtre de Kalman exact (lisseur RTS pour les courbes historiques); la variance quotidienne q est estimée par maximum de vraisemblance sur grille, bornée à [0,004²; 0,030²].

6. Du nowcast au forecast

Le forecast au jour du vote conserve la moyenne du nowcast (martingale) mais ajoute la variance de dérive q × jours restants × 1,6 — le facteur 1,6 reflète la volatilité accrue en campagne, observée sur les cycles québécois passés. Six mois avant le scrutin, les intervalles sont donc nettement plus larges que la veille du vote.

6 bis. Au-delà des sondages (v2) — les cinq couches

Depuis la version 2.0.0, le forecast n'est plus construit sur les seuls sondages. Quatre couches s'ajoutent au modèle de tendance, chacune à poids explicite, borné et débrayable, et leur contribution exacte est publiée à chaque run sur la page Signaux :

CoucheSourceMécanismePoids
Votes réelsÉlections partielles 2022-2026 (DGEQ) le swing local observé, rétréci ×0,6 (les partielles exagèrent le mouvement national), devient une observation nationale du filtre de Kalman à sa date n équivalent ~350, erreur excédentaire ±3 pp
FondamentauxSatisfaction envers le gouvernement (Léger, via veille web), vote précédent, usure du pouvoir régression ridge sur les 8 générales de 1998 à 2022 (validation leave-one-out) → prior bayésien combiné au posterior des sondages par pondération de précision w(t) = min(0,8; (jours/540)^1,3) — décroît vers 0 au scrutin
MédiasSentiment de presse 14 j (RSS + veille Firecrawl) nudge de la moyenne du forecast, saturé par tanh et seuillé par volume borné à ±0,35 pp par parti
Marchés prédictifsPolymarket (probabilités implicites) la P(plus de sièges) publiée est une moyenne pondérée modèle/marché, renormalisée — les intentions de vote ne sont pas modifiées 88 % modèle / 12 % marché

Signaux web avancés (v2.1) — deux signaux issus de la littérature récente complètent les couches : (a) l'attention Wikipédia (pageviews quotidiens des pages des partis et des chef·fe·s, API Wikimedia) — la recherche montre qu'elle ajoute du pouvoir prédictif au-delà des sondages et fondamentaux (Smith & Gustafson, Public Opinion Quarterly 2017); comme un pic peut être bon ou mauvais pour un parti, le signal n'est jamais directionnel : un pic global (z ≥ 2) gonfle la variance de dérive du forecast (multiplicateur ≤ 1,45) sans toucher aucune moyenne; (b) un sondage synthétique LLM (« silicon sampling », 96 strates démographiques du Québec poststratifiées, LLM local ancré dans les manchettes réelles de notre veille) — expérimental, poids strictement nul : un LLM ne collecte aucune donnée nouvelle (critique McKown-Dawson/Silver 2025); l'écart au forecast est publié comme objet d'étude et sera évalué après le 5 octobre.

Une veille web continue (Firecrawl) alimente ces couches à chaque cycle : radar des nouveaux sondages dans la presse (alerte de provenance, aucune ingestion automatique de chiffres), extraction du % de satisfaits envers le gouvernement, et articles au-delà des flux RSS. Chaque page brute est archivée pour audit.

Le backtest 2022 rejoue le blend de fondamentaux avec l'information de l'époque (sortant CAQ, 1er mandat, satisfaction ~54 %) et publie côte à côte l'erreur v2 et l'erreur « sondages seuls » — les partielles et l'ajustement médias, non rejouables faute de données 2022, sont exclus du backtest et bornés par construction.

7. Modèle de circonscription

Pas de swing uniforme : le swing national est appliqué en espace log-ratio (swing proportionnel) à la référence 2022 de chaque circonscription, ce qui respecte les planchers et plafonds locaux. S'y ajoutent la tendance régionale (partial pooling : les régions pauvres en données empruntent au national), l'historique local, et une pénalité de 0,06 en log-ratio (~1,3 pp) au parti sortant quand son député ne se représente pas (48 retraits en 2026).

8. Simulateur Monte Carlo et corrélation des erreurs

À chaque mise à jour, 25 000 élections complètes sont simulées avec des erreurs en couches, jamais indépendantes :

CoucheDistributionEffet
Erreur d'opinionposterior complet du forecast (Kalman + dérive)incertitude sur l'état réel de l'opinion
Erreur systémique de sondageN(0, 0,12²) nationale, corrélée entre partistoute l'industrie peut se tromper ensemble (2022 : CAQ sous-estimée de ~3 pp) — déplace les 127 circonscriptions simultanément
Erreur régionaleN(0, 0,14²) par région (13 régions)corrélation intrarégionale
Erreur localeN(0, 0,20²) par circonscriptionidiosyncrasies locales (candidats, enjeux)

Les écarts-types régionaux et locaux sont calibrés empiriquement sur les résidus du backtest 2022 (swing proportionnel 2018→2022), atténués parce que 2022 fut un réalignement atypique; l'ajout de la couche systémique fait passer la couverture des intervalles à J−1 de 20 % à 100 % dans le backtest, sans dégrader le Brier score.

De chaque simulation on tire les sièges par parti; on publie la moyenne, les percentiles P5/P25/P50/P75/P95, la probabilité d'obtenir le plus de sièges, la probabilité de majorité (≥ 64/127) et la probabilité de gouvernement minoritaire.

9. Backtesting et calibration

Le modèle est rejoué sur l'élection de 2022 à J−120, J−90, J−60, J−30, J−14, J−7 et J−1, avec uniquement l'information disponible à chaque date. Mesures : EAM/RMSE du vote, couverture des intervalles, EAM des sièges, Brier score, log loss et courbe de calibration (voir la page Calibration). La calibration est jugée plus importante que la prédiction correcte d'un scrutin donné. Limite connue : en 2022 l'ensemble de l'industrie a sous-estimé la CAQ (~3 pp) — l'erreur excédentaire et les couches corrélées du simulateur existent précisément pour intégrer ce risque.

10. Sentiment Web et momentum

Un moteur indépendant analyse la presse québécoise (flux RSS publics) : document → extraction d'entités → détection de stance (pro/anti/neutre/ambigu, avec gestion de la négation et des attaques dirigées : « X affirme que Y est incompétent » est négatif envers Y) → agrégats quotidiens → détection d'anomalies de volume. Un scoreur LLM optionnel peut raffiner la stance. Poids dans le forecast : un ajustement borné à ±0,35 pp par parti (voir §6 bis) — le sentiment Web n'est pas représentatif de la population et ne peut jamais devenir un moteur du forecast; l'indicateur de momentum reste purement auxiliaire.

11. IA

L'IA sert uniquement à l'extraction et au traitement du langage (stance, résumé, regroupement de nouvelles) et à la reformulation d'explications déjà calculées. Le cœur du forecast est entièrement statistique : on ne demande jamais à un modèle de langage « qui va gagner ». La fonction « Interroger le modèle » compose ses réponses à partir des chiffres réels des runs (sondages ajoutés, variations de probabilité, événements), toutes traçables.

12. Neutralité et incertitude

Les mêmes règles s'appliquent à tous les partis : mêmes formules de pondération, mêmes corrections, ordre d'affichage déterminé par les données (probabilité courante), jamais par un choix éditorial. La plateforme n'affirme jamais « X va gagner » : toute sortie est une probabilité accompagnée de son incertitude.

13. Versions et reproductibilité

Chaque exécution du modèle est archivée (snapshot complet consultable par l'API /api/forecast/history et /api/forecast/run/{id}), ce qui permet de vérifier a posteriori ce que le modèle disait à toute date. Code : Python (NumPy/SciPy, FastAPI), base SQLite, simulations vectorisées.

Limites connues