spb/qc-election
Public
Python 66.6%
HTML 24.8%
CSS 4.9%
JavaScript 3.6%
1> ⚠️ **URL live hors fonction pour le moment.** L'application a été retirée du cluster MacLustr le 2026-09-04 (processus arrêtés, copie du nœud supprimée). Ce dépôt spbgit est désormais la seule source de vérité du projet. Ancienne URL : https://www.qc-election.com23<!-- QC Élection Forecast — Plateforme de prévision électorale du Québec 2026 -->4<!-- Auteur : Simon-Pierre Boucher -->5<!-- Contact : contact@spboucher.ai -->6<!-- https://www.qc-election.com -->78# QC Élection Forecast910Plateforme de **prévision probabiliste** de l'élection générale québécoise du 5 octobre 202611(127 circonscriptions, majorité à 64). Ce n'est pas un agrégateur de sondages : c'est un moteur12statistique complet — modèle d'état latent bayésien, effets maison, simulations Monte Carlo à13erreurs corrélées, backtesting et calibration.1415**v2.0.0 « Au-delà des sondages »** : le forecast combine cinq couches d'inférence à poids16explicites et bornés — sondages (Kalman), **votes réels des élections partielles** injectés17dans le filtre, **prior de fondamentaux** (satisfaction gouvernementale, vote précédent,18usure du pouvoir — régression 1998-2022, poids décroissant vers le scrutin), **ajustement19médias** borné (±0,35 pp) et **ensemble 88/12 avec les marchés prédictifs** (Polymarket) sur20P(plus de sièges). Une **veille web continue (Firecrawl)** alimente le tout : radar des21nouveaux sondages, satisfaction Léger, presse élargie. Décomposition publique de chaque22couche sur `/signaux` et `/api/beyond`.2324**Production : https://www.qc-election.com** (nœud M2U64, PM2 + ngrok)2526## Architecture2728```29backend/30 app/31 config.py paramètres (élection, partis, hyperparamètres du modèle)32 models.py schéma SQLAlchemy (provenance complète de chaque donnée)33 seed.py chargement CSV → base (idempotent, dédoublonnage)34 pipeline.py collect → validate → normalize → dedupe → model → simulate → publish35 ingest/36 wikipedia.py sondages 2026 + 2022, résultats 2022 par circonscription, carte 202537 news_rss.py sentiment médiatique (RSS) : entités → stance → anomalies de volume38 byelections.py partielles 2022-2026 : votes réels → observations nationales (v2)39 firecrawl_watch.py veille web continue : radar sondages, satisfaction, presse (v2)40 modeling/41 fundamentals.py prior de fondamentaux + blend à poids décroissant (v2)42 ensemble.py ajustement médias borné + ensemble modèle/marchés (v2)43 compositions.py transformations log-ratio (alr) + covariance multinomiale44 weights.py pondération : récence, taille effective, design effect, cote maison45 house_effects.py biais maison rétrécis + cote de qualité dynamique46 trend.py filtre de Kalman (marche aléatoire en espace alr), q estimé par MV47 forecast.py nowcast vs forecast (incertitude d'opinion future)48 simulate.py Monte Carlo 25 000 élections, erreurs nationale/régionales/locales49 backtest.py rejoue 2022 à J-120…J-1 : MAE, Brier, log loss, couverture, calibration50 explain.py « Interroger le modèle » — réponses traçables aux données51 api/ API publique + administration (Bearer token)52 data/ CSV de seed + copies brutes HTML (provenance) + rapport de backtest53 tests/ pytest (14 tests du cœur statistique)54frontend/ pages statiques premium (ECharts) servies par FastAPI55```5657## Démarrage local5859```bash60cd backend61python3 -m venv .venv && .venv/bin/pip install -r requirements.txt62.venv/bin/python -m app.ingest.wikipedia # collecte + CSV de seed63.venv/bin/python -m app.seed # base SQLite64.venv/bin/python -m app.pipeline # premier forecast65.venv/bin/uvicorn app.main:app --port 814066```6768Variables d'environnement (`.env`) : voir `.env.example`. `ADMIN_TOKEN` est requis pour `/admin`.6970## Tests7172```bash73cd backend && .venv/bin/python -m pytest tests/ -q74```7576## Méthodologie7778Documentée en détail dans [METHODOLOGY.md](METHODOLOGY.md) et sur `/methodologie`.79Principes : incertitude d'abord, neutralité politique, traçabilité de chaque valeur,80calibration avant tout.81