SPB Git forge

spb/qc-election

Public
20commits 1branches 0releases
4.9 MBsize
maindefault branch
19 days agolast push
Python 66.6% HTML 24.8% CSS 4.9% JavaScript 3.6%
ZIP tar.gz
NameLast commitUpdated
apify Pouls social continu — actor Apify maison qc-social-pulse + sources... 24 days ago
backend chore(retrait cluster): synchro copie du nœud M2U64 + README « URL... 19 days ago
docs QC Signal (refonte frontend complète) + distribution prédictive du... 24 days ago
frontend v3.2.0 — Phase D population, soir d'élection, scénarios URL, fiches... 23 days ago
.env.example Pouls social continu — actor Apify maison qc-social-pulse + sources... 24 days ago
.gitignore QC Élection Forecast — plateforme de prévision électorale du Québec... 27 days ago
COMPAS-PROGRAMMES.md v3.2.0 — Phase D population, soir d'élection, scénarios URL, fiches... 23 days ago
DATA_SOURCE_AUDIT.md Socle de données v3 (ADDENDUM) — sources canoniques, registres... 24 days ago
ecosystem.config.js QC Élection Forecast — plateforme de prévision électorale du Québec... 27 days ago
HISTORICAL_REPLAY_PLAN.md v3.1.0 — replay historique multi-élections + modèle d'erreur des... 24 days ago
METHODOLOGY_AUDIT.md v3.1.0 — replay historique multi-élections + modèle d'erreur des... 24 days ago
METHODOLOGY.md v3.2.0 — Phase D population, soir d'élection, scénarios URL, fiches... 23 days ago
POPULATION_FEATURES.md Socle de données v3 (ADDENDUM) — sources canoniques, registres... 24 days ago
README.md chore(retrait cluster): synchro copie du nœud M2U64 + README « URL... 19 days ago
SOCIAL_ACCOUNT_REGISTRY.csv Socle de données v3 (ADDENDUM) — sources canoniques, registres... 24 days ago
STATISTICAL_DEBT.md Directive maître — baselines de replay, Course à 64, connecteurs... 23 days ago
V3_MODEL_ARCHITECTURE.md v3.2.0 — Phase D population, soir d'élection, scénarios URL, fiches... 23 days ago
README.md source

⚠️ 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.com

# QC Élection Forecast

Plateforme de prévision probabiliste de l'élection générale québécoise du 5 octobre 2026 (127 circonscriptions, majorité à 64). Ce n'est pas un agrégateur de sondages : c'est un moteur statistique complet — modèle d'état latent bayésien, effets maison, simulations Monte Carlo à erreurs corrélées, backtesting et calibration.

v2.0.0 « Au-delà des sondages » : le forecast combine cinq couches d'inférence à poids explicites et bornés — sondages (Kalman), votes réels des élections partielles injectés dans le filtre, prior de fondamentaux (satisfaction gouvernementale, vote précédent, usure du pouvoir — régression 1998-2022, poids décroissant vers le scrutin), ajustement médias borné (±0,35 pp) et ensemble 88/12 avec les marchés prédictifs (Polymarket) sur P(plus de sièges). Une veille web continue (Firecrawl) alimente le tout : radar des nouveaux sondages, satisfaction Léger, presse élargie. Décomposition publique de chaque couche sur /signaux et /api/beyond.

Production : https://www.qc-election.com (nœud M2U64, PM2 + ngrok)

# Architecture

text
backend/
  app/
    config.py            paramètres (élection, partis, hyperparamètres du modèle)
    models.py            schéma SQLAlchemy (provenance complète de chaque donnée)
    seed.py              chargement CSV → base (idempotent, dédoublonnage)
    pipeline.py          collect → validate → normalize → dedupe → model → simulate → publish
    ingest/
      wikipedia.py       sondages 2026 + 2022, résultats 2022 par circonscription, carte 2025
      news_rss.py        sentiment médiatique (RSS) : entités → stance → anomalies de volume
      byelections.py     partielles 2022-2026 : votes réels → observations nationales (v2)
      firecrawl_watch.py veille web continue : radar sondages, satisfaction, presse (v2)
    modeling/
      fundamentals.py    prior de fondamentaux + blend à poids décroissant (v2)
      ensemble.py        ajustement médias borné + ensemble modèle/marchés (v2)
      compositions.py    transformations log-ratio (alr) + covariance multinomiale
      weights.py         pondération : récence, taille effective, design effect, cote maison
      house_effects.py   biais maison rétrécis + cote de qualité dynamique
      trend.py           filtre de Kalman (marche aléatoire en espace alr), q estimé par MV
      forecast.py        nowcast vs forecast (incertitude d'opinion future)
      simulate.py        Monte Carlo 25 000 élections, erreurs nationale/régionales/locales
      backtest.py        rejoue 2022 à J-120…J-1 : MAE, Brier, log loss, couverture, calibration
      explain.py         « Interroger le modèle » — réponses traçables aux données
    api/                 API publique + administration (Bearer token)
  data/                  CSV de seed + copies brutes HTML (provenance) + rapport de backtest
  tests/                 pytest (14 tests du cœur statistique)
frontend/                pages statiques premium (ECharts) servies par FastAPI

# Démarrage local

bash
cd backend
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python -m app.ingest.wikipedia      # collecte + CSV de seed
.venv/bin/python -m app.seed                  # base SQLite
.venv/bin/python -m app.pipeline              # premier forecast
.venv/bin/uvicorn app.main:app --port 8140

Variables d'environnement (.env) : voir .env.example. ADMIN_TOKEN est requis pour /admin.

# Tests

bash
cd backend && .venv/bin/python -m pytest tests/ -q

# Méthodologie

Documentée en détail dans METHODOLOGY.md et sur /methodologie. Principes : incertitude d'abord, neutralité politique, traçabilité de chaque valeur, calibration avant tout.