Méthodologie
Transparence totale sur le calcul des scores.
Chaque score est reproductible à partir des sources publiques citées.
Principe fondamental : Ces scores mesurent la cohérence des données publiques. Ils ne constituent ni une accusation, ni un jugement de valeur, ni une imputation de comportement illégal. Un score bas peut résulter de données incomplètes, d'erreurs administratives, ou de délais de publication. Le citoyen tire ses propres conclusions.
1. Score de cohérence patrimoine coherence-v2
Ce qu'il mesure
La complétude des déclarations HATVP et la proximité entre les intérêts financiers déclarés par un élu et les contrats publics attribués dans son département.
Formule
Le score part de 100 et subit des pénalités :
Score = 100 - Σ(pénalités), borné à [0, 100]
| Pénalité | Points | Condition |
|---|---|---|
| Pas de déclaration d'intérêts (DI) | -30 | Aucun document DI trouvé |
| Pas de déclaration de patrimoine (DP) | -30 | Aucun document DP trouvé |
| Données XML absentes | -20 max | Proportionnel au taux de déclarations sans XML |
| Déclarations anciennes | -10 | Dernière déclaration antérieure à 2025 |
| Matching participations partiel | -5 | 50 à 80% des participations retrouvées dans SIRENE |
| Matching participations faible | -10 | Moins de 50% retrouvées dans SIRENE |
| Participation dans entreprise attributaire | -5 par entreprise | L'élu détient des parts dans une entreprise ayant des contrats publics dans son département (max -20) |
Matching des participations
Les participations financières extraites du XML HATVP sont rapprochées du répertoire SIRENE
par fuzzy matching (bibliothèque rapidfuzz, algorithme token_sort_ratio).
Seuls les matchs avec un score ≥ 85/100 sont retenus.
Indice de confiance : Chaque score de cohérence est accompagné d'un indice de confiance (0 à 1) basé sur la qualité moyenne des matchs fuzzy. Un indice de 0.85+ indique un rapprochement fiable. En dessous de 0.5, le score doit être interprété avec précaution — les noms de sociétés n'ont peut-être pas été correctement appariés.
Limites connues :
- Le matching fuzzy peut produire des faux positifs (deux sociétés au nom proche confondues) ou des faux négatifs (société non retrouvée si le nom HATVP diffère fortement du nom SIRENE).
- Les déclarations HATVP ont un délai de publication : un élu récemment nommé peut avoir un score bas sans anomalie réelle.
- Le XML open data n'est pas disponible pour toutes les déclarations — l'absence de XML n'est pas un indicateur de dissimulation.
- Les participations dans des SCI familiales sont traitées comme toute autre participation, même si elles sont généralement sans rapport avec les marchés publics.
Sources : HATVP Open Data (déclarations CSV + XML participations), API Recherche Entreprises (SIRENE), DECP (marchés publics)
2. Score de concentration marchés concentration-v1
Ce qu'il mesure
La diversité des entreprises qui remportent les contrats publics dans un département. Un score élevé signifie que les contrats sont répartis entre de nombreuses entreprises.
Formule
Utilise l'indice de Herfindahl-Hirschman (HHI), un indicateur standard de concentration de marché utilisé en économie et en droit de la concurrence.
HHI = Σi (part_marchéi)²
où part_marchéi = montanti / montant_total
Score = (1 - HHI) × 100
| Paramètre | Valeur | Rôle |
|---|---|---|
| Filtre montant max | 1 milliard € | Exclut les erreurs de saisie dans les données DECP |
| Filtre SIREN | non vide | Exclut les marchés sans attributaire identifié |
| Périmètre | département | Calculé par département, pas au niveau national |
Interprétation
- 100 = concurrence parfaite, aucune entreprise ne domine
- 80-100 = bonne diversité
- 40-80 = quelques entreprises dominent
- < 40 = concentration inhabituelle — une ou quelques entreprises captent l'essentiel
Fiabilité : Le HHI est un indicateur économique reconnu, utilisé notamment par l'Autorité de la concurrence et le DOJ américain. La confiance dépend directement de la complétude des données DECP : si un département a peu de marchés recensés, le score reflète un échantillon partiel.
Limites connues :
- Les données DECP sont déclaratives : certaines collectivités publient peu ou pas de marchés.
- Les groupements d'entreprises apparaissent sous le SIREN du mandataire, ce qui peut masquer une répartition réelle plus large.
- Le score est calculé au niveau départemental : une concentration locale (commune) peut être noyée dans la moyenne départementale.
- Les marchés sans montant (montant = 0 ou absent) sont exclus du calcul.
Source : DECP (data.gouv.fr) — Données Essentielles de la Commande Publique
3. Score réseau network-v1
Ce qu'il mesure
La densité des liens détectés entre un élu et les entreprises présentes dans les contrats publics de son département. Plus les liens sont nombreux, plus le score est bas.
Formule
Utilise une décroissance exponentielle du degré (nombre de connexions) :
Score = 100 × e(-degré / 50)
| Degré | Score | Interprétation |
|---|---|---|
| 0 | 100 | Aucun lien détecté |
| 5 | 90 | Quelques liens (normal pour un élu actif) |
| 15 | 74 | Liens modérés |
| 35 | 50 | Réseau dense — seuil d'alerte |
| 50 | 37 | Très dense |
| 100+ | < 14 | Extrêmement connecté |
Types de liens comptés
- Participations financières déclarées (HATVP → SIRENE)
- Marchés publics dans le département (DECP)
- Relations détectées par le croisement multi-sources
Facteurs rapportés : Nombre d'entités connectées, densité du sous-graphe (0-1), nombre de marchés liés, nombre d'entreprises liées. Ces facteurs permettent de comprendre la composition du score.
Limites connues :
- Un élu avec un portefeuille d'investissements diversifié (fonds, SCPI, etc.) peut avoir un score bas sans aucune proximité réelle avec les marchés publics.
- Le graphe ne distingue pas la nature des liens : un mandat dans une association locale et une participation dans un attributaire de marchés ont le même poids.
- La fonction exponentielle pénalise fortement les départements où les données DECP sont très complètes (plus de marchés = plus de connexions potentielles).
- Le paramètre d'échelle (50) est fixé empiriquement, pas calibré statistiquement.
Sources : Croisement HATVP + DECP + SIRENE
4. Score de transparence transparence-v1
Ce qu'il mesure
Le niveau de transparence globale d'un élu : présence et fraîcheur de ses déclarations, disponibilité des données ouvertes, traçabilité dans les sources officielles.
Formule
Système à points (accumulation de bonus) :
Score = Σ(points), borné à [0, 100]
| Critère | Points | Condition |
|---|---|---|
| Déclarations complètes (DI + DP) | +40 | Les deux types de déclarations sont présents |
| Déclarations partielles | +20 | Un seul type présent (DI ou DP) |
| Déclarations récentes | +20 | Publication ≥ 2025 |
| Déclarations relativement récentes | +10 | Publication ≥ 2023 (si pas récent) |
| Données XML ouvertes | +15 max | Proportionnel au taux de déclarations avec XML |
| Présence au Journal Officiel | +15 | Nomination tracée dans le JO |
| Lien avec le registre des lobbys | +10 | Mention directe dans le registre HATVP des lobbys |
Maximum théorique : 40 + 20 + 15 + 15 + 10 = 100
Limites connues :
- Le score récompense la quantité de données disponibles, pas leur qualité. Un élu peut publier des déclarations incomplètes et obtenir un bon score.
- La présence au JO dépend du type de mandat : certains élus locaux n'ont aucune nomination publiée au JO par nature.
- Le registre des lobbys ne concerne que les élus nationaux qui intéressent des lobbyistes — l'absence de lien lobby n'est pas négative en soi.
- Les seuils de fraîcheur (2025, 2023) sont arbitraires et devront être mis à jour chaque année.
Sources : HATVP, Journal Officiel (DILA), Registre des représentants d'intérêts
5. Score composite composite-v2
Ce qu'il mesure
Synthèse des quatre dimensions en un score unique.
Formule
Composite = 0.30 × Cohérence + 0.30 × Concentration + 0.25 × Réseau + 0.15 × Transparence
| Dimension | Poids (v2) | Justification |
|---|---|---|
| Cohérence patrimoine | 30% | Signal le plus direct d'intérêts croisés |
| Concentration marchés | 30% | Indicateur structurel de la commande publique |
| Réseau | 25% | Proxy de proximité intérêts privés / publics |
| Transparence | 15% | Complémentaire — mesure la disponibilité des données |
Seuils d'alerte
Un facteur d'alerte est ajouté au score quand une dimension est en dessous de son seuil :
| Dimension | Seuil |
|---|---|
| Cohérence | < 60 |
| Concentration | < 40 |
| Réseau | < 50 |
| Transparence | < 50 |
Rétrocompatibilité
Si le score de transparence n'est pas disponible pour un élu, le composite retombe sur les poids v1 : Cohérence 35%, Concentration 35%, Réseau 30%. Les poids sont renormalisés dynamiquement.
Limites connues :
- Les pondérations sont fixées manuellement sur la base d'une analyse qualitative, pas d'une calibration statistique.
- Le score composite mélange des dimensions de nature différente : la concentration est un indicateur départemental (identique pour tous les élus d'un même département), tandis que la cohérence est individuelle.
- Un score composite moyen peut masquer une dimension très basse compensée par d'autres.
5b. Classification des participations & score de suspicion classifier-v1
La table participations agrège toutes les déclarations HATVP des élus
(mandats sociaux, parts détenues, fonctions). En brut, elle contient ~36 000 lignes, dont
la majorité sont du bruit légitime : mandats ès qualités dans des
organismes parapublics (CCAS, SEM, FRAC, bailleurs sociaux...), actions cotées banales
(CAC40 / SBF120), fonds standardisés (SCPI, OPCI...).
Pour rendre la donnée exploitable par les journalistes / ONG, VigiCité classe automatiquement chaque ligne en 5 catégories et calcule un score de suspicion 0−100.
Les 5 catégories
| Catégorie | Définition | Action |
|---|---|---|
| parapublic | SEM, SPL, CCAS, SDIS, syndicats publics, FRAC, bailleurs sociaux, régies publiques, mission locale, BGE, agences d'urbanisme, services publics locaux (Gaz/Eau/Transports de Ville), Conseils Départementaux / Régionaux comme entité, etc. | Mandat légal d'élu — écarté |
| cotee | Société cotée CAC40 / SBF120, par SIREN whitelist + regex fallback de noms | Action banale — écartée |
| fonds | Fonds standardisé (SCPI, OPCI, FCPI, FCPR, SICAV, ETF...) | Placement financier banal — écarté |
| engagement | Association loi 1901 sans dimension de marchés publics (amicale, club sportif, comité des fêtes) | Engagement personnel — écarté |
| qualified | PME / SARL / SAS / EURL / SCI / SCEA / GAEC privée ne tombant dans aucune catégorie ci-dessus | Signal à investiguer |
Score de suspicion (0−100)
Calculé uniquement pour les lignes qualified. Combine 5 facteurs :
| Facteur | Points max | Formule |
|---|---|---|
| Catégorie | 40 | qualified : 40, engagement : 10, parapublic/cotee/fonds : 2−5 |
| Densité marchés locaux | 25 | min(nb_marches_locaux / 10, 1) × 25 |
| Montant total local | 15 | min(montant / 5 M€, 1) × 15 |
| Type de mandat | 10 | dirigeant : 10, fonctions : 8, financiere : 3 |
| Territorialité | 10 | 10 si marchés dans le département de l'élu |
Lecture du score :
- 80−100 : très qualifié. ~10 cas en France au 2026-05-12.
- 60−79 : qualifié. ~150 cas.
- 40−59 : à vérifier (entité privée sans marchés locaux détectés).
- < 40 : pas un signal.
Endpoints
L'accès aux cas qualifiés est public :
/cas-qualifies— tableau HTML filtrable/api/v2/cas-qualifies— JSON / CSV/rss/cas-qualifies.xml— flux RSS
Limites de la classification
- Faux positifs possibles : une entité nommée ambiguëment peut être mal classée (ex. "ALPHA SERVICES" est une SAS mais le nom ne le dit pas).
- Faux négatifs : un mandat déguisé sous un nom d'association masque le caractère commercial réel.
- Le score est une heuristique méthodologique, pas un jugement. Aucun seuil n'est juridiquement contraignant.
- Tous les chiffres sont sourcés URL : HATVP pour la participation, DECP pour les marchés publics. Le citoyen vérifie.
6. Intervalles de confiance
Chaque score est déterministe : pour les mêmes données en entrée, le résultat est toujours identique. L'incertitude ne vient pas du calcul mais de la qualité des données sources.
Sources d'incertitude
| Source | Type d'incertitude | Impact |
|---|---|---|
| Matching fuzzy (SIRENE) | Faux positifs / négatifs dans l'appariement des noms de sociétés | Cohérence ± 5-15 pts |
| Complétude DECP | Certains départements publient peu de marchés | Concentration et Réseau biaisés vers le haut |
| Délai publication HATVP | Déclarations récentes pas encore publiées | Transparence et Cohérence temporairement bas |
| Erreurs de saisie DECP | Montants aberrants, SIREN incorrects | Concentration faussée localement |
| Homonymie | Deux élus ou entreprises au même nom | Relations erronées dans le graphe |
Indice de confiance du score de cohérence
Le score de cohérence est le seul à disposer d'un indice de confiance quantifié (0 à 1), basé sur la qualité moyenne des appariements fuzzy entre les noms de sociétés déclarées et le répertoire SIRENE.
- ≥ 0.85 — Appariement fiable (noms quasi identiques)
- 0.5 – 0.85 — Appariement probable, vérification manuelle recommandée
- < 0.5 — Appariement incertain — le score doit être interprété avec réserve
Estimation de la marge pour les autres dimensions
En l'absence d'indice quantifié, nous estimons qualitativement les marges d'incertitude :
| Dimension | Marge estimée | Condition pour une bonne fiabilité |
|---|---|---|
| Cohérence | ± 5-15 pts | Confiance ≥ 0.85 |
| Concentration | ± 2-5 pts | ≥ 50 marchés dans le département |
| Réseau | ± 5-10 pts | Données DECP complètes pour le département |
| Transparence | ± 0-5 pts | Données généralement complètes (faible incertitude) |
| Composite | ± 3-10 pts | Moyenne pondérée des marges individuelles |
7. Limites générales du système
Ce que VigiCité ne fait PAS :
- Pas de prédiction. Les scores mesurent l'état actuel des données publiques, pas une probabilité de comportement futur.
- Pas de jugement. Un score bas peut résulter de données manquantes, de délais administratifs, ou de situations tout à fait légitimes.
- Pas d'exhaustivité. Les données publiques françaises sont inégales : certains départements sont mieux couverts que d'autres.
- Pas de causalité. Un croisement entre participations et marchés ne prouve rien : une entreprise peut légitimement remporter un contrat.
Biais systémiques identifiés
- Biais de couverture DECP : Les grandes collectivités publient davantage de marchés. Les départements ruraux peuvent sembler plus “concentrés” simplement parce que moins de marchés sont recensés.
- Biais de mandat : Les élus nationaux (députés, sénateurs) ont davantage de données disponibles (JO, lobbys) et tendent à avoir de meilleurs scores de transparence.
- Biais temporel : Les élus récemment nommés ont moins de données et donc des scores tendanciellement plus bas.
- Biais de taille : Plus une entreprise a d'activités, plus elle a de chances d'apparaître dans les croisements, indépendamment de tout lien réel avec un élu.
Ce que nous faisons pour atténuer ces biais
- Facteurs expliqués : chaque score est accompagné de la liste des facteurs qui l'ont influencé
- Sources citées : chaque donnée est traçable jusqu'à sa source publique
- Versionnage : chaque méthodologie est versionnée pour permettre la comparaison dans le temps
- Seuils centralisés : tous les paramètres sont dans un fichier unique (
thresholds.py), modifiable et auditable - Code ouvert : tout le code source est publié sous licence AGPL-3.0
8. Sources de données
| Source | Données | Format | Licence |
|---|---|---|---|
| HATVP | Déclarations patrimoine, intérêts, participations | CSV + XML | Etalab / Licence Ouverte |
| DECP | Marchés publics (commande publique) | JSON / XML | Licence Ouverte 2.0 |
| SIRENE | Répertoire national des entreprises | API JSON | Licence Ouverte |
| Journal Officiel (DILA) | Nominations, décrets | XML | Données publiques |
| Registre des lobbys (HATVP) | Représentants d'intérêts, activités | JSON / CSV | Etalab |
| RNA | Répertoire National des Associations | CSV | Licence Ouverte |
| CNCCFP | Comptes de campagne, financement partis | CSV | Données publiques |
| OFGL | Budgets des collectivités locales | CSV / API | Licence Ouverte |
Toutes ces sources sont en accès libre et anonyme. Aucune API nécessitant une identification n'est utilisée. Les données sont collectées, stockées et croisées localement.
9. Export reproductible
Pour permettre la vérification indépendante et la recherche, VigiCité met à disposition un export anonymisé du dataset complet.
Formats disponibles
- CSV scores — tous les élus avec leurs 5 scores et métadonnées : /api/export/csv
- JSON détaillé — un élu avec scores, facteurs, déclarations, participations, relations : /api/export/json?elu_id=1
- Dataset anonymisé — scores + statistiques sans noms, pour analyse statistique : /api/export/dataset
Contenu du dataset anonymisé
Le dataset anonymisé contient pour chaque élu :
- Un identifiant aléatoire (pas l'ID réel)
- Département, type de mandat (mais pas le nom)
- Les 5 scores avec leur version de méthodologie
- Nombre de déclarations, participations, relations
- Indice de confiance du matching (quand disponible)
Ce dataset permet de reproduire les analyses statistiques (distributions, corrélations entre dimensions, biais) sans identifier les élus individuellement.
src/scoring/thresholds.py.
Pour signaler une erreur méthodologique, utilisez le droit de réponse.