Méthodologie · Validation externe

Comment Vigil'Asso a été calibré et validé contre des sources externes.

Le scoring s'appuie sur un dataset de 184 associations effectivement défaillantes publiées au BODACC (procédures collectives) et a été validé indépendamment contre 162 rapports des chambres régionales et de la Cour des comptes — soit 38 cas exploitables après extraction des comptes JOAFE. Ce document décrit le protocole de validation, expose les chiffres bruts, et liste les limites.

Le protocole en quatre étapes

Chaque étape produit un CSV versionné. Les scripts sont reprenables : relancer un script ne refait pas le travail déjà fait.

01

Scraping des rapports CRC

Le sitemap public de ccomptes.fr est parcouru, les pages des publications sont extraites, on filtre sur les rapports portant explicitement sur une association loi 1901 (mention juridique vérifiée dans le corps du texte).

Sortie
data/reports.csv — 162 rapports
PDFs
scripts/crc_validator.rb pdfs télécharge les fichiers
02

Identification SIREN

Pour chaque rapport, requête sur l'API officielle SIRENE filtrée sur les natures juridiques associatives (codes 92xx/93xx). Les cinq meilleurs candidats sont arbitrés par Claude Haiku 4.5, qui peut répondre « aucun » — meilleur qu'un faux positif. 116 SIREN identifiés en confiance haute ou moyenne.

Script
scripts/crc_validator.rb verify
Sortie
data/sirens_verified.csv
03

Audit qualitatif des conclusions

Chaque rapport est lu par Haiku 4.5 qui catégorise le sujet principal — fragilité financière, gouvernance, conformité, performance, stratégie, ou rien de critique. La vérité terrain est binaire : primary == "fragilite_financiere"fragile ; primary == "rien_critique"sain. Les autres rapports sont écartés.

Script
scripts/audit_pdfs.rb all
Sortie
data/audit_pdfs.csv
04

Scoring Vigil'Asso et comparaison

Les comptes annuels JOAFE de chaque SIREN sont récupérés en deux temps : exercice le plus récent (ce que Vigil'Asso scorerait aujourd'hui) et exercice contemporain du rapport CRC. Extraction par Sonnet 4.5, scoring par ScoringService, puis comparaison au label CRC. 38 cas exploitables après élimination des SIREN sans PDF JOAFE disponible.

Script
scripts/phase4_run.rb
Sortie
data/phase4_results.csv

Sources

Toutes les sources sont publiques et l'ensemble du protocole est reproductible.

Vérité terrain
ccomptes.fr/fr/publications

Rapports d'observations définitives de la Cour des comptes et des chambres régionales et territoriales.

Référentiel SIREN
recherche-entreprises.api.gouv.fr

API officielle DINUM. Filtrage sur les natures juridiques associatives (9220–9300).

Comptes annuels
journal-officiel.gouv.fr

JOAFE — dépôt obligatoire des comptes annuels pour les associations recevant plus de 153 000 € de fonds publics.

Modèles IA
Anthropic Claude

Haiku 4.5 — arbitrage SIREN (étape 2) et audit qualitatif des conclusions CRC (étape 3). Sonnet 4.5 — extraction des données financières des PDFs JOAFE (étape 4).

Le dataset d'entraînement

Le calibrage des seuils du scoring s'appuie sur les comptes annuels JOAFE de 184 associations effectivement défaillantes identifiées dans le BODACC (procédures collectives), confrontés à un échantillon équilibré d'associations saines tirées du JOAFE. Le sample a été élargi en trois temps (sample initial 64 SIREN, première extension BODACC stratifié 2022–2026 portant à 107, seconde extension v11 portant à 184) et un filtrage temporel des comptes pré-défaillance a été adopté pour resserrer le signal.

Filtrage temporel adopté

(version courante — v9)

Les associations en procédure collective ont parfois jusqu'à 15 ans de comptes annuels indexés au JOAFE — la majorité de ces exercices sont antérieurs à la défaillance et ne portent pas de signal « pré-défaillance ». Le dataset retenu ne conserve, côté défaillantes, que les comptes clôturés au plus 3 ans avant le jugement d'ouverture. Ce filtre améliore l'AUC du modèle de référence d'environ +0.05 à +0.10 points selon le pipeline (cf. tableau ci-dessous), sans dégrader le rappel.

Effet du filtrage temporel sur un Random Forest de référence
Modèle de validation interne (n_estimators=300, max_depth=6) — le scoring de production reste piloté par les seuils du ScoringService, inchangés.
Pipeline AUC test v6 AUC test v9-filtré F1 v6 F1 v9-filtré
Ratios financiers seuls0.7320.8320.670.71
+ effectif estimé0.7530.8140.650.74
+ secteur APE0.8030.8500.710.76
+ ratios relatifs au secteur0.7790.7980.760.73
Pipeline complet0.8050.8070.760.78
Lecture : le gain est concentré sur les pipelines comptables purs (FINANCIER, +EFFECTIF, +APE) où le filtrage évite que le modèle apprenne sur des comptes trop éloignés de la défaillance. Sur les pipelines à ratios relatifs, l'effet est neutre — le sectoriel jouait déjà un rôle de cadrage. AUC issus d'un test set n=50, σ ≈ 0.07 — gains tangents à la limite de significativité, jugés crédibles par cohérence inter-pipelines.

Résultats

Sur n=38, les intervalles de confiance à 95 % sur la précision et le rappel sont d'environ ±15 points. Les chiffres ci-dessous indiquent une tendance, pas un engagement de performance. Deux seuils d'alerte sont mesurés.

Seuil d'alerte — recommandé
Vigil'Asso prédit « fragile » si le niveau est C, D ou E.
Prédit fragile (C / D / E) Prédit sain Réel fragile (n=25) Réel sain (n=13) 24 96% des fragiles vrais positifs 1 4% des fragiles faux négatifs 10 77% des sains faux positifs 3 23% des sains vrais négatifs n total = 38
Précision
71%
IC 95 % [54–83%]
TP / (TP+FP)
Rappel
96%
IC 95 % [80–99%]
TP / (TP+FN)
F1
81%
moyenne harmonique
Seuil d'alerte forte — conservateur
Vigil'Asso prédit « fragile » uniquement si le niveau est D ou E.
Prédit fragile (D / E) Prédit sain Réel fragile (n=25) Réel sain (n=13) 9 36% des fragiles vrais positifs 16 64% des fragiles faux négatifs 2 15% des sains faux positifs 11 85% des sains vrais négatifs n total = 38
Précision
82%
IC 95 % [52–95%]
TP / (TP+FP)
Rappel
36%
IC 95 % [20–55%]
TP / (TP+FN)
F1
50%
moyenne harmonique
Comment lire ces deux matrices ?

Le seuil d'alerte (C/D/E) est calibré pour le rappel : on rate très peu d'associations fragiles, au prix d'environ 29 % de faux positifs sur les sains. C'est le réglage adapté à un usage de signalement précoce — la vérification humaine reste systématique.

Le seuil d'alerte forte (D/E) est calibré pour la précision : presque toute alerte forte est justifiée, mais le rappel chute fortement — on ne capte qu'environ 36 % des cas réellement fragiles. À réserver aux décisions à fort enjeu.

Pistes testées et écartées

Tout n'a pas marché. La transparence sur les pistes infructueuses compte autant que sur celles qui ont fonctionné.

Quatre features non-comptables, écartées après évaluation

(test étape v10)

Quatre features non-comptables ont été testées par ré-extraction Sonnet 4.5 enrichie sur 380 PDFs : qualité de la certification CAC (sans réserve, avec réserve, refus, alerte continuité d'exploitation), concentration des financeurs publics, évolution pluriannuelle des subventions, évolution pluriannuelle du résultat net. Résultat : pas de gain au-delà du bruit statistique (Δ AUC ≤ 0.015 sur 6 pipelines RF comparés à dataset équivalent). Diagnostic : ces features sont redondantes avec les ratios financiers déjà utilisés. Le scoring purement comptable suffit pour le périmètre actuel.

Constat secondaire : la qualité de la certification CAC est dominée à 91 % par la modalité « certifié sans réserve » sur ce sample, ce qui revient pratiquement au booléen cac_certifie déjà capté ; et le détail nominatif des financeurs publics n'est présent que dans 32 % des annexes — trop sparse pour porter un signal robuste.

Re-calibration des seuils sur dataset élargi

(test étape v11)

Le passage à 184 défaillances réelles a permis de relancer un sweep complet des seuils T_B et T_C sur un sample combiné de n=1523 (38 cas CRC + 1485 BODACC élargi). Résultat : tous les optima du sweep collapsent les deux seuils à 2–4 points l'un de l'autre (T_B=64–66, T_C=62–64), ce qui efface visuellement le palier C entre B et D — c'est-à-dire que le sweep optimise mathématiquement un classifieur binaire, pas un système 5 niveaux.

Décision : maintenir 80 / 60 / 40 / 20. L'optimum CRC seul reste à (62, 60), à 2 points des seuils actuels. La macro-F1 BODACC aux seuils inchangés a en revanche progressé de 38 % à 56.4 % en passant de v6 à v11 — autrement dit, le système 60/40 fonctionne mieux à mesure qu'on enrichit le sample, sans qu'il ait fallu modifier le code.

Détail complet du sweep, comparaison ligne à ligne v6 → v11, et impact mesuré d'un déplacement T_C : 40 → 60 dans ml/CALIBRATION_v11.md. Aucune modification de ScoringService.

Tentative d'élargissement du sample CRC

(test étape v2 — mai 2026)

Sur les 115 SIREN identifiés en phase 2-3, seuls 38 ont été scorés en phase 4. Pour comprendre l'origine du gap, les 74 SIREN « perdus » sans PDF JOAFE local ont été scrapés (taux JOAFE 62 %, 500 PDFs, 0 erreur). Résultat : l'élargissement du sample CRC binaire a été nul. Sur les 74 SIREN, seulement 9 portent un label binaire (fragile/sain) ; et précisément ces 9 sont ceux pour lesquels aucun PDF JOAFE n'existe — pattern cohérent avec le sample BODACC, où les associations en fragilité financière ont quasi toutes cessé de déposer leurs comptes.

Apport méthodologique néanmoins : les intervalles de confiance Wilson 95 % sur les chiffres affichés ont été calculés et sont désormais visibles directement à côté des matrices ci-dessus. Précision C/D/E 71 % [54–83 %], rappel 96 % [80–99 %].

Détail complet (composition des 74 SIREN par primary CRC, 46 SIREN scorés en analyse exploratoire, croisement audit_primary × niveau Vigil'Asso) dans ml/CRC_VALIDATION_v2.md. phase4_results.csv original intact.

Analyse des faux positifs

(test étape FP v1)

Une analyse des 10 faux positifs CRC (Vigil'Asso classe en C/D/E une association que la CRC conclut saine) révèle trois causes : 50 % relèvent de fonds dédiés ou ressources affectées qui font apparaître la trésorerie comme tendue alors qu'elle est juste affectée à un usage spécifique, 40 % concernent des profils sectoriels atypiques (fondations très liquides, structures à modèle économique particulier) que le scoring pénalise, 10 % une volatilité conjoncturelle.

Aucune règle de désalerte automatisable n'a pu être définie sans dégrader significativement le rappel — les sous-scores des faux positifs et des vrais positifs en zone C sont indistinguables avec les 18 indicateurs actuels. Une amélioration future passerait par l'extraction explicite du ratio fonds dédiés/fonds propres et du profil sectoriel — pistes documentées pour une éventuelle v12.

Détail complet (catégorisation Haiku 4.5 cas par cas, deux règles testées avec impact mesuré sur précision et rappel) dans ml/FP_ANALYSIS_v1.md. Aucune modification de ScoringService.

Validation prospective en cours

La validation CRC est rétrospective — elle compare le scoring à des rapports déjà publiés. Pour mesurer la performance prédictive réelle, il faut un test prospectif : figer l'état du scoring à un instant T, attendre, mesurer ce qui s'est effectivement passé.

Un snapshot des 121 associations actuellement scorées par Vigil'Asso a été figé au 8 mai 2026 (CSV public dans le dépôt : data/snapshot_prospectif_2026-05-08.csv). Dans 12 à 24 mois, ce snapshot sera apparié aux jugements BODACC publiés entre-temps pour mesurer la performance prédictive niveau par niveau (A → E), avec intervalles de confiance binomiaux par classe.

Hypothèse à tester : la probabilité de défaillance dans la fenêtre 12–24 mois croît strictement de A à E. Protocole détaillé et caveats (censure à droite, biais de sélection) dans data/README_snapshots.md. Le rapport de mesure paraîtra ensuite sous ml/VALIDATION_PROSPECTIVE_<date>.md.

Limites honnêtes

Cinq points qui doivent être connus avant d'utiliser ces chiffres pour décider.

  1. 01

    Taille d'échantillon limitée

    n=38 donne un intervalle de confiance à 95 % d'environ ±15 points sur la précision et le rappel. Les chiffres présentés sont des indicateurs de tendance, pas une garantie statistique. Un test indépendant à n ≥ 200 reste à faire pour parler de validation au sens strict.

  2. 02

    Vérité terrain construite, pas juridique

    Le label « fragile » ne désigne pas une faillite mais le verdict d'un audit Haiku 4.5 des conclusions CRC. C'est cohérent avec ce que Vigil'Asso cherche à détecter — une alerte précoce, pas un constat post-mortem — mais ça reste une étiquette construite, dépendante du prompt de classification et de la qualité de la synthèse rendue par le modèle. Les biais éventuels du classifieur s'incrustent ici.

  3. 03

    Biais de sélection amont

    Les CRC ne contrôlent que des associations recevant plus de 153 000 € de fonds publics — donc plutôt grosses, déjà sous regard public, et avec une comptabilité formalisée. La performance mesurée ici ne se transpose pas mécaniquement au segment des associations plus modestes, qui constitue pourtant une cible importante du produit. Le biais joue probablement dans le sens d'une sur-estimation de la qualité du scoring sur le segment > 1 M€.

  4. 04

    Indépendance partielle de la validation

    Les seuils du ScoringService (rentabilité, solidité, liquidité…) ont été calibrés en amont par analyse manuelle de cas similaires. La validation CRC confirme que le calibrage n'est pas absurde — elle ne constitue pas un test out-of-distribution strict. Pour cela, il faudrait un échantillon collecté indépendamment, sans recouvrement avec les cas ayant servi à fixer les seuils.

  5. 05

    Effet temporel — mesuré, et faible

    Les rapports CRC examinent fréquemment des exercices vieux de deux à quatre ans, alors que Vigil'Asso score les comptes les plus récents disponibles sur le JOAFE. On a donc calculé deux scores par SIREN : score_recent sur les comptes actuels (le cas d'usage réel) et score_contemp sur les comptes contemporains du rapport CRC. L'écart entre les deux mesure la stabilité temporelle du signal.

    Seuil C/D/E (recent − contemp)
    Précision : +0.9 pt
    Rappel : +0.2 pt
    F1 : +0.7 pt
    Seuil D/E (recent − contemp)
    Précision : +4.0 pt
    Rappel : +6.8 pt
    F1 : +7.6 pt

    Les écarts restent dans la même magnitude que le bruit d'échantillonnage. Conclusion : sur ce sample, l'âge du rapport CRC ne biaise pas significativement la validation, et le scoring Vigil'Asso est suffisamment stable d'un exercice à l'autre pour qu'on puisse comparer un rapport ancien à un score actuel. C'est un résultat indépendamment intéressant.