SPB Git forge

spb/qc-election

Public
20commits 1branches 0releases
4.9 MBsize
maindefault branch
20 days agolast push
Python 66.6% HTML 24.8% CSS 4.9% JavaScript 3.6%

History of METHODOLOGY.md · clear filter

  1. Mon, Aug 31, 2026 1

    1. v3.2.0 — Phase D population, soir d'élection, scénarios URL, fiches enrichies, favicon/og
      …
      - PHASE D : feature store démographique depuis le classeur OFFICIEL Élections
        Québec (Recensement 2021 × 127 circonscriptions 2026, codes stables, source
        parfaite — aucune interpolation) : population, 65+, langue à la maison,
        universitaire, locataires, immigrants, revenu 100k+, autochtones,
        appartements, minorités visibles + z-scores + SIMILARITÉ top-10 (validée :
        Gouin≈Mercier/SMSJ, Westmount≈NDG/MRO, Ungava profil nordique).
        API /api/demographics/{nom}; démographie + semblables intégrés aux fiches
      - MODÈLE DU SOIR D'ÉLECTION (modeling/election_night.py, dormant) : prior =
        forecast final; décomposition hiérarchique des résidus rapportés (national
        ~N(0,σ_ind²) → régional → local, pondérés par dépouillement propre — garde
        anti-biais des premiers bureaux); resimulation à variances réduites; calling
        conservateur (P≥99,5 % ET ≥40 % dépouillé). /api/election-night +
        POST /api/admin/election-night. Test synthétique : décalage national +3 pp
        retrouvé, zéro invention à décalage nul
      - LABO DE SCÉNARIOS partageables par URL (?s=base64) : encodage/décodage
        complet, bouton copier, presets appliqués aux contrôles, étiquetage strict
        « conditionnel — pas le forecast officiel »
      - FICHES ENRICHIES : sensibilité au swing (marge attendue, chemin de bascule
        minimal, stabilité vs IC) + démographie officielle
      - FAVICON (SVG+PNG 64/180/512, fleur QC Signal) + OG:IMAGE 1200×630 (hémicycle)
        + balises og/twitter sur les 11 pages
      - COMPAS-PROGRAMMES.md : mandat complet du compas électoral IA inscrit à la
        feuille de route (règles de neutralité/preuve, ordre d'exécution, actifs
        réutilisables) — prochaine grande phase
      - 37/37 tests (slug, bornes démographiques, soir d'élection)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 23 days ago · 1 file +27 −1
  2. Sun, Aug 30, 2026 6

    1. v3.1.0 — replay historique multi-élections + modèle d'erreur des sondeurs (σ appris)
      …
      Méthodologie ultra avancée, première vague (§100 : replay + scoring + erreur
      dynamique des sondeurs) :
      
      - ingest/wikipedia_historical.py : 462 sondages archivés sur 6 élections
        (2007: 34, 2008: 36, 2012: 121, 2014: 60, 2018: 106, 2022: 105), ères de
        partis (ADQ 2007-2008), cache data/historical/*.csv avec provenance
      - Cœur alr PARAMÉTRÉ par liste de partis (trend/forecast/house_effects/
        fundamentals) — zéro changement de comportement 2026, replay multi-ères
      - validation/historical_replay.py : LOEO STRICT (house effects, fondamentaux
        exclude_year, σ sur les autres élections), rolling origin J-120→J-1,
        CRPS + log score + couverture 50/90/95 + sharpness (scoring.py)
      - national/pollster_error.py : erreur d'INDUSTRIE par élection (2018 CAQ −5,4,
        2007 PLQ −9,2, 2014 PQ +4,9…), σ_industrie estimé LOEO ≈0,21 (composantes
        principales ≥5 %, borné [0,08; 0,25]), house effects hiérarchiques n/(n+k)+τ
      - ADOPTION σ appris (use_empirical_industry_error=True) validée par replay :
        log score −3,80 vs −5,33, CRPS 2,64 vs 2,67, couverture 95 % 83 % vs 76,5 %,
        EAM inchangée (3,71 vs 3,69) — fuite du backtest fondamentaux corrigée
      - API /api/replay, /api/pollster-error (+ v3), POST /api/admin/replay
      - Audits §100 : METHODOLOGY_AUDIT, STATISTICAL_DEBT (dette paramétrique
        complète), V3_MODEL_ARCHITECTURE, HISTORICAL_REPLAY_PLAN
      - 33/33 tests (CRPS/log score, bornes σ, replay 2018 smoke, ère ADQ 5 partis)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 24 days ago · 1 file +24
    2. Socle de données v3 (ADDENDUM) — sources canoniques, registres vérifiés, owned/earned
      …
      - ingest/elections_quebec.py : DGEQ CANONIQUE — tableau officiel des partis
        provinciaux autorisés (20 partis, chefs, nb de candidats, date d'autorisation,
        data/partis_autorises.json) + alertes dérive-chef (jamais de remplacement
        silencieux) + électeurs/circ. best-effort (GeoJSON brut)
      - config/social_seeds.json : registre canonique des comptes (provenance
        official_site=verified / search=pending_review, PLQ 100 % vérifié site
        officiel, CAQ FB+YT officiels) + config/social_queries.json versionné
      - ingest/social_account_discovery.py : découverte hebdo depuis les sites
        officiels (Firecrawl) → promotion verified / WebSignal pending_review /
        alertes dérive-chef; anti-bruit (ids FB numériques des candidats, plafond)
      - social_pulse : cibles/requêtes chargées des registres (plus de handles en
        dur); SocialPost.content_class (owned ≠ discussion publique, §33) +
        micro-migration SQLite additive (db._migrate)
      - Cadence : vérifications canoniques + découverte 1×/7 j dans le pipeline
      - Livrables §42 : DATA_SOURCE_AUDIT.md (inventaire tiers 1-5, statuts réels
        testés), POPULATION_FEATURES.md (plan StatCan AD→127, cellules MRP),
        SOCIAL_ACCOUNT_REGISTRY.csv (26 comptes)
      - 29/29 tests verts
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 24 days ago · 1 file +13
    3. v3.0.0 « 127 » — Phases A+B : validation, Social Intelligence, forecast par comté
      …
      Phase A (fondations) :
      - modeling/validation/ : scoring commun (EAM/RMSE, couverture 50/90/95, Brier,
        log loss, sharpness, biais) + cadre d'ABLATION (backtest 2022 par variante,
        deltas vs FULL publiés, data/ablation_report.json, /api/ablation,
        POST /api/admin/ablation)
      - Feature flags conservateurs (enable_social_volatility, enable_tipping_points,
        enable_ablation, enable_social_directional=OFF)
      - Observabilité Apify (table apify_runs) + /api/admin/data-health (§33-34)
      
      Phase B (Social Intelligence Layer) :
      - modeling/signals/social.py : métriques inter-plateformes normalisées
        (attention_z, velocity_z, breadth, cross_platform, stance_balance) +
        filtrage de coordination (quasi-doublons, rafales) → attention organique
      - modeling/signals/volatility.py : multiplicateur de variance unifié
        wiki+social, borné [1, 1,5], variance seulement (§16)
      - modeling/signals/event_detection.py : événements à confirmation croisée
        (≥2 familles : presse, social, Wikipédia), sans effet directionnel présumé
      
      Forecast par comté :
      - simulate.tipping_points : circonscriptions pivots de la majorité (méthode
        des simulations, 64e siège le plus sûr), stocké par run (§24)
      - Page /circonscriptions : 127 fiches (recherche, filtres, tri, détail complet
        IC 95 %/candidatures/2022), pivots avec barres de course, KPIs
      - /api/battlegrounds + API v3 (/api/v3/forecast|ridings|social|battlegrounds|
        events|beyond|calibration|ablation), compatibilité v1 conservée
      
      29/29 tests verts. METHODOLOGY §9 bis. ModelVersion 3.0.0.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 24 days ago · 1 file +37
    4. Frontend v3 « sharp » + ingestion de sondages parfaite (v2.1.1)
      …
      Frontend :
      - Refonte style.css : header compact blur, drawer hamburger mobile (verrou, backdrop,
        Escape), safe-areas, anti-zoom iOS 16px, cartes dégradées + hover lift, focus rings,
        skeleton shimmer, clamp typographique, prefers-reduced-motion
      - Charts : thème Inter, grille recessive, tooltips arrondis/blur, légendes cercle,
        dégradés sous courbe (areaGrad), traits lumineux (lineGlow), pastilles endLabel,
        barres à coins arrondis, ResizeObserver
      - Palette des partis validée (dataviz : CVD ΔE≥20, contraste ≥3:1, 2 surfaces)
      
      Sondages (« ça doit être parfait ») :
      - Parseur Wikipédia par SECTION (« Opinion polls »/« Campaign period » acceptées,
        ventilations langue/région et projections exclues) — plus de seuil de 20 rangées :
        la table de campagne entre dès sa 1re rangée
      - Mode de collecte par maison (design effects réels), vraie plage de terrain,
        indécis parsés
      - Upsert par (maison, fin de terrain) : n/MoE/chiffres révisés mis à jour, jamais
        dupliqués; purge des doublons hérités
      - Boucle de garantie radar→base (statut intégré/en attente), pipeline 3 h en campagne
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 24 days ago · 1 file +11 −2
    5. v2.1.0 — signaux web avancés + « Le point du jour »
      …
      - Attention Wikipédia (pageviews partis+chefs, API Wikimedia) : parts 7 j/28 j,
        z-scores; détecteur de turbulence → variance de campagne ×≤1,45 (jamais la moyenne)
        [Smith & Gustafson POQ 2017]
      - Sondage synthétique LLM « silicon sampling » : 96 strates région×âge×genre×langue
        poststratifiées, ancré dans les manchettes réelles — EXPÉRIMENTAL, poids nul
        [arXiv:2411.01582; critique McKown-Dawson 2025]
      - Page quotidienne /aujourdhui : forecast daté, Δ vs veille, journal 24 h (sondages
        intégrés + radar), attention web avec sparklines, synthétique vs forecast
      - API : /api/today, /api/attention, /api/synthetic; admin POST /synthetic (amorçage)
      - forecast(drift_multiplier) : turbulence élargit l'incertitude seulement
      - 24 tests verts
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 24 days ago · 1 file +20
    6. v2.0.0 « Au-delà des sondages » — fondamentaux, partielles, médias, marchés, veille Firecrawl
      …
      - Prior de fondamentaux : satisfaction gouvernementale + vote précédent + usure,
        régression ridge 1998-2022 (LOO), blend à poids décroissant w(t) vers le scrutin
      - Votes réels des 4 partielles 2023-2025 injectés dans le filtre de Kalman
        (swing local rétréci ×0,6, n équiv. 350, erreur excédentaire ±3 pp)
      - Ajustement médias borné ±0,35 pp (sentiment 14 j, tanh + seuil de volume)
      - Ensemble 88/12 modèle/Polymarket sur P(plus de sièges), publié partout
      - Veille continue Firecrawl : radar de nouveaux sondages, extraction de la
        satisfaction (Léger 40 % trouvée live), presse élargie au-delà des RSS
      - Décomposition du forecast couche par couche à chaque run (API /api/beyond)
      - Nouvelle page /signaux + carte « D'où vient le forecast » sur l'accueil
      - Backtest 2022 comparatif (mae v2 vs sondages seuls)
      - Tables byelections / web_signals / indicators, endpoints admin (watch,
        indicator, byelection), 8 nouveaux tests (22/22 verts)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 25 days ago · 1 file +65 −14
  3. Thu, Aug 27, 2026 1

    1. QC Élection Forecast — plateforme de prévision électorale du Québec 2026
      …
      Modèle bayésien d'état latent (Kalman/alr) + house effects + Monte Carlo
      corrélé (erreurs systémique/régionale/locale), backtesting 2022 calibré,
      carte officielle DGEQ (127 circonscriptions), simulateur what-if, sentiment
      médiatique et marchés prédictifs en signaux auxiliaires. FastAPI + SQLite,
      frontend ECharts thèmes sombre/clair, responsive mobile. Déployée sur M2U64
      → https://www.qc-election.com (PM2 + ngrok).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 27 days ago · 1 file +132