Spécification de la méthode Icioola (v1.4)
Version 1.4 · publiée le 2026-08-16 (v1.0), révisée le 2026-08-28 (v1.1), le 2026-10-02 (v1.2, poids SR), le 2026-10-09 (v1.3, note publique en valeur) et le même soir (v1.4, le Français médian à 50, sécurité en trois parts), texte réaligné sur le code le 2026-09-18 · licence CC BY 4.0
Le nom du fichier resteSPEC-METHODE-v1.0.mdpour que les liens déjà posés ne tombent pas ; la version en vigueur est celle écrite ci-dessus, et la même que la cléspecdes vecteurs dorés.
Ce document décrit comment Icioola transforme des données publiques en notes, en classements et en lettres A–E. Il est écrit pour être réimplémenté : chaque formule est accompagnée d'un exemple numérique, et chaque exemple figure dans les vecteurs dorés (web/src/engine/golden/vecteurs.json), rejoués à chaque build côté TypeScript et côté Python.
Si vous réimplémentez cette spécification et que vous ne retrouvez pas ces nombres, l'un de nous deux a tort — et c'est vérifiable.
Ce que cette spec n'est pas. Ce n'est pas une justification. Les choix décrits ici sont défendables, pas neutres ; là où ils sont discutables, la section « Questions ouvertes » le dit plutôt que de le maquiller.
0. Vue d'ensemble
Icioola produit deux grandeurs différentes, et les confondre est l'erreur la plus courante :
| Le match | La note de qualité de vie | |
|---|---|---|
| Répond à | « où moi devrais-je vivre ? » | « quelle est la qualité de cette commune ? » |
| Dépend de | vos priorités, votre budget, votre trajet | rien — elle est la même pour tout le monde |
| Compare à | toutes les communes de France | les communes de taille comparable (bande, §1.2) |
| Calculée | dans le navigateur, à chaque changement | une fois, au build |
| Publiée dans | votre classement personnel | les palmarès, les fiches, l'API |
Les deux partagent la même agrégation non compensatoire (§3) et la même conversion en percentiles (§2) ; elles diffèrent par la population de référence de ces percentiles.
1. Les entrées
1.1 Indicateurs
Un indicateur est une valeur publique rattachée à une commune, avec son millésime. Aucune valeur n'est estimée, interpolée ou imputée à la source : ce qui n'est pas publié reste absent.
Chaque indicateur porte un sens favorable. Pour la plupart, plus grand est meilleur ; pour certains, l'inverse — prix, loyers, délinquance enregistrée, bruit, NO₂, taxe foncière, distances (au grand espace naturel, à l'eau, aux urgences). Ce sens est déclaré, jamais deviné (schema.INDICATOR_INVERTED).
1.2 Population de référence : une bande continue
Une commune n'est comparable qu'à des communes de taille voisine pour la note de qualité de vie : un village n'a pas les équipements d'une métropole, et la délinquance _enregistrée_ par habitant dépend fortement de l'activité d'un centre-ville.
Depuis le 2026-08-19, cette comparaison se fait dans une bande de population continue : les pairs d'une commune sont celles dont la population va du tiers au triple de la sienne (normalize.PEER_RATIO = 3). Quand la bande compte moins de cinq communes, elle s'élargit aux plus proches voisines en taille jusqu'à en compter cinq (PAIRS_MIN = 5). Il n'y a donc aucun seuil brutal : 9 999 et 10 001 habitants ont des pairs presque identiques.
Les trois classes de taille ne servent plus qu'à publier. Il faut bien des listes : les palmarès et le rang national sont rangés en trois classes, aux bornes suivantes.
| Classe | Population |
|---|---|
village | moins de 10 000 habitants |
moyenne | 10 000 à 49 999 |
grande | 50 000 et plus |
Population inconnue ⇒ village. La classe range ; elle ne calcule aucun percentile.
Le match, lui, compare à toute la France (depuis le 2026-09-01) : quand vous demandez où vivre, la question porte sur la France, pas sur les communes de la taille de la vôtre. Pour ne voir que des villes, on règle la population.
1.3 Ce qui n'est jamais une entrée
Ces données sont affichées sur les fiches, comme faits bruts, et n'entrent dans aucun score, aucun classement, aucun filtre :
- la part de logement social et le statut SRU ;
- les quartiers prioritaires (QPV) ;
- les lieux de culte ;
- l'étiquette politique du maire ;
- l'indice de position sociale des collèges (IPS) ;
- la marge fiscale (dette et taux d'imposition en lecture prospective).
La ligne de partage. Est notable un risque attaché au territoire, publié par l'État, avec information obligatoire de l'acquéreur ou du locataire : inondation, Seveso, nucléaire, argiles, rupture de barrage, arrêtés de catastrophe naturelle. Est interdite toute caractérisation des habitants : la scorer reviendrait à noter une commune sur qui y vit.
Un test exécuté à chaque build lit le code source du moteur et échoue si l'une de ces clés y apparaît. La liste est aussi publiée dans les vecteurs dorés (exclusions.jamaisScore).
2. Normalisation : de la valeur au percentile
Une valeur brute n'est pas comparable d'un indicateur à l'autre (2 100 €/m² contre 11,3/20). Chaque indicateur est donc converti en percentile 0–100 où 100 est toujours favorable.
- Pairs : la bande de population de la commune (§1.2) pour la note de qualité de vie ; toutes les communes de France pour le match.
- Rang parmi les valeurs présentes des pairs, ex æquo au rang moyen :
p = round((inférieures + (égales − 1) / 2) / (n − 1) × 100). - Inversion si l'indicateur est de sens inverse :
p ← 100 − p. - Moins de deux valeurs parmi les pairs ⇒ percentile absent. Jamais 50, qui se lirait « exactement médian » là où l'on veut dire « indéterminé ».
- Valeur absente ⇒ percentile absent, jamais 0.
- Bande saturée : quand les pairs ne se départagent pas sur un indicateur (tous au même niveau, ou une dispersion trop serrée pour être autre chose que du bruit), son percentile vaut 50 pour chacun. L'indicateur reste dans le calcul — le cadre est fixe pour toutes les communes — et la saturation est publiée sur la fiche.
Il n'y a plus de winsorisation (retirée le 2026-08-31) : un rang n'est pas sensible aux valeurs extrêmes, qui ne font que prendre la première ou la dernière place.
Taux à faibles effectifs. Les taux de délinquance sont d'abord lissés par Bayes empirique (modèle Gamma-Poisson) : un taux mesuré sur peu d'exposition est rétréci vers la moyenne de sa classe de taille. Sans ce lissage, les micro-communes où presque rien n'est enregistré occupent mécaniquement les premières places de « la plus sûre ».
2.1 Critères composés
Plusieurs critères réunissent plusieurs mesures à poids explicites (la sécurité : cambriolages, vols et dégradations, violences hors cadre familial, 30 / 30 / 40 % depuis le 11/10 ; la nature : surface à portée, part boisée, distance à l'eau, variété des milieux…). Le percentile du critère est la moyenne pondérée des percentiles de ses mesures présentes, renormalisée sur ce qui est mesuré. Un critère dont moins de la moitié du poids est mesurée n'a pas de valeur (PART_MESUREE_MIN = 0,5) : on ne note pas une nature sur la seule distance à l'eau.
Puis la moyenne est re-classée (v1.2). Une moyenne de percentiles se resserre vers le milieu — écart-type 21,7 en santé contre 28,9 pour un percentile simple, aucune commune au-dessus de 93 en commerces — et un critère resserré pèse moins que son poids dans une moyenne géométrique. La moyenne est donc relue sur une courbe de rang : les 51 quantiles de sa distribution sur la France entière, publiés par le pipeline (web/src/engine/rangComposites.json), avec une interpolation linéaire entre deux quantiles voisins (vecteurs dorés courbe). C'est la règle des indices composites (manuel OCDE/JRC, Niche) : on agrège, puis on re-classe. Le calme fait exception : ses mesures ont leur échelle propre (ci-dessous). La mesure de secours d'un critère, déjà un percentile simple, n'est pas re-classée.
Le calme : 100 hors carte, les communes exposées classées entre elles (v1.2). Les cartes de bruit de la directive 2002/49/CE couvrent toutes les grandes routes, voies ferrées et aéroports de métropole. Une commune métropolitaine qu'aucune zone ne touche compte donc 0 % de territoire exposé — sauf dans le Grand Paris, cartographié rue par rue, où une absence est un trou. Avec trois communes sur quatre à zéro, un percentile ordinaire mettrait la première commune exposée au 27ᵉ rang ; le score vaut donc 100 sans exposition, et les communes exposées se classent entre elles de 0 (la plus exposée) à 99.
3. Agrégation : la moyenne géométrique pondérée
C'est le cœur de la méthode.
match = exp( Σ wᵢ · ln(sᵢ) / Σ wᵢ )
où sᵢ est le score 0–100 du critère i et wᵢ son poids.
Trois règles de bord :
- Un critère que vous avez priorisé et qui n'est pas mesuré pour une commune l'écarte du classement (depuis le 2026-09-02), avec son motif affiché (« exclue : sécurité non mesurée ici »). Lui donner la médiane reviendrait à promettre un résultat sur un chiffre qu'on n'a pas ; le retirer du calcul serait pire, puisque son poids se redistribuerait sur ce qu'on connaît et que « on ne sait pas » deviendrait un avantage — c'est ainsi qu'un village sans données scolaires obtenait 96 % d'adéquation sur un profil « famille » avant juillet 2026.
- Exception unique : un critère qu'aucune commune de la recherche ne porte n'écarte personne. L'écarter viderait la liste. Il compte alors pour 50 (la médiane), à poids plein, et l'écran écrit « non couvert ici ». C'est le cas, par exemple, du calme sur une île d'outre-mer que les cartes de bruit ne couvrent pas.
sᵢ = 0⇒ ramené à 1.ln(0) = −∞annulerait tout. Un vrai zéro pénalise déjà très fortement sans annihiler le calcul.
Pourquoi géométrique
Parce qu'un point faible ne doit pas être rachetable. Sur le vecteur doré « NON-COMPENSATOIRE » — poids 0,6 / 0,3 / 0,1, scores 0 / 100 / 100 :
| Méthode | Résultat |
|---|---|
| Moyenne arithmétique pondérée | 40,0 — « moyen » |
| Moyenne géométrique pondérée | 6,31 — « rédhibitoire » |
Une commune catastrophique sur ce qui compte le plus au demandeur ne doit pas ressortir « moyenne ». C'est ce qui sépare Icioola d'un score additif, où tout se rachète.
Couverture
En même temps que le match, on calcule :
couverture = Σ wᵢ des critères AVEC donnée / Σ wᵢ demandés
Puisqu'une commune non mesurée sur un critère priorisé est écartée, la couverture d'une commune classée n'est inférieure à 1 que par les critères « non couverts ici » de l'exception ci-dessus. Elle est affichée, et le fait que la priorité n°1 soit dans ce cas est signalé séparément — c'est le cas où le résultat est le plus trompeur.
4. Les poids : d'un ordre à des nombres
L'utilisateur classe ses critères ; il ne saisit pas de pourcentages. Les poids en sont dérivés par la méthode SR (Sum-Reciprocal, Danielson & Ekenberg 2017), qui mêle la règle des inverses de rang et celle des rangs linéaires :
wᵢ ∝ 1/i + (n + 1 − i)/n (i compté à partir de 1, n = nombre de critères classés)
puis normalisés à somme 1.
| n | poids |
|---|---|
| 1 | 1 |
| 2 | 0,6667 · 0,3333 |
| 3 | 0,5217 · 0,3043 · 0,1739 |
| 5 | 0,3785 · 0,2461 · 0,1767 · 0,1230 · 0,0757 |
Pourquoi SR et plus ROC (v1.2). Jusqu'en v1.1 les poids venaient de la méthode ROC (Rank-Order Centroid, Barron & Barrett 1996) : 0,6111 · 0,2778 · 0,1111 à trois critères. Mesuré sur des profils types, la priorité n°1 portait alors 55 à 88 % de la variance du classement, et le cinquième critère d'une liste de cinq ne pesait que 4 % — classé, mais presque sans effet. Les comparaisons par simulation (Danielson & Ekenberg 2017, Roszkowska 2013) placent SR parmi les règles les plus robustes quand l'ordre est sûr mais l'écart entre les rangs inconnu, ce qui est exactement notre situation. Le passage déplace deux à trois communes du top 10 et laisse l'ordre d'ensemble presque intact (corrélation de rang 0,986 à 0,993).
La somme vaut 1 par construction.
Pourquoi pas des pourcentages éditables, alors que c'est la demande spontanée : parce qu'ils doivent sommer à 100 (bouger l'un déplace tous les autres), parce que 13 % contre 15 % ne veut rien dire perceptivement, et surtout parce qu'ils entrent en conflit avec le classement — si l'on édite un pourcentage puis qu'on reclasse un critère, l'un des deux gestes doit être ignoré. Le pourcentage reste affiché, toujours dérivé, jamais saisi.
Un multiplicateur à trois crans (×0,5, ×1, ×2) module un critère sans toucher à l'ordre. Les poids sont ensuite renormalisés à somme 1 : sans cette renormalisation, un même « ×2 » n'aurait pas le même effet selon le nombre de critères classés.
5. Budget et trajet : le budget filtre, le trajet filtre et se classe
Budget — un filtre pur, en toutes circonstances : une commune dont le prix estimé dépasse le budget est écartée, pas « mal notée ». Il n'entre jamais dans la moyenne. Un score de budget est calculé et publié dans les vecteurs dorés, pour l'affichage :
score = clamp01( (budget − prix) / (0,35 × budget) ) × 100
Trajet — un filtre d'abord : au-delà du temps maximum accepté, la commune est écartée. Et, dès qu'un lieu de travail est renseigné, un critère classé : il prend place dans l'ordre des priorités et reçoit son poids SR selon cette place. On le déplace comme les autres, mais on ne le retire pas — pour ne plus le compter, on passe en « Sans trajet ». Les jours de présence fixent seulement sa place de départ. Son score, plein jusqu'à un palier puis décroissant linéairement :
palier = min(30, 0,6 × max) (en minutes — v1.1, 2026-08-28)
score = 100 si minutes ≤ palier
= 0 si minutes ≥ max
= (max − minutes) / (max − palier) × 100 entre les deux
Le palier évite la falaise « 30 minutes parfait, 31 minutes nul » sans demander un second réglage ; son plafond de trente minutes empêche une tolérance large d'aplatir ce qui est proche (v1.1 : à 120 minutes de tolérance, l'ancienne règle mettait 93 des 435 communes retenues à égalité parfaite). Le trajet retenu est le temps porte-à-porte brut, jamais dilué par le télétravail : un seuil « ≤ 75 min » qui laisse passer des trajets réels de trois heures deux jours par semaine est un seuil qui ment.
Comment le temps est calculé. Porte-à-porte sur les horaires publiés (réseaux urbains, TER, cars régionaux) dans les 22 éditions locales, marche comprise à 4,8 km/h ; un itinéraire routier calculé commune par commune partout ailleurs en France métropolitaine. Jamais une distance à vol d'oiseau convertie en minutes.
Le temps ne se monétise jamais. Un trajet est exprimé en heures de vie, jamais converti en euros. Une heure de trajet ne vaut pas le même prix pour tout le monde, et prétendre le contraire transformerait un arbitrage personnel en calcul objectif qu'il n'est pas.
6. La note globale de qualité de vie
Fixe, identique pour tout le monde, publiée sur chaque fiche et dans les palmarès.
6.1 De la mesure à la note sur 100 : l'échelle en valeur (v1.3)
Chaque mesure est notée sur sa valeur réelle, France entière — plus sur un rang. Un rang grossit le milieu d'une distribution serrée et écrase ses queues : Annecy, 7,0 cambriolages pour 1 000 logements contre 6,4 pour la médiane (+10 %), tombait au rang 30 ; Lyon, Grenoble et Marseille, de 3 à 4 fois la médiane en délinquance de rue, étaient toutes à 0. Le barème est écrit une fois : pipeline/src/boussole_pipeline/echelle_valeur.py (BAREME), repères gelés.
| Mesure | Échelle | Repère |
|---|---|---|
| cambriolages, vols, violences | écart au Français médian, en log | 50 au Français médian (6,0 · 20,1 · 5,1), −20 par doublement |
| brevet du collège de secteur | linéaire | 0 à 8,5/20, 100 à 13,5/20 |
| accessibilité aux médecins | linéaire, seuil officiel | 0 sans médecin, 100 à 5 |
| temps vers les urgences | linéaire | 100 à 5 min, 0 à 55 min |
| indices d'accès, marche, desserte | déjà sur 100 | tels quels |
| bruit de jour et de nuit | part exposée | 100 sans exposition, 0 à 60 % (jour) et 45 % (nuit) |
| nature à portée, part boisée | racine | 100 à 2 500 ha et à 80 % |
| distance à l'eau, variété des milieux | linéaire | 100 au bord de l'eau, 0 à 3 km · 33 par milieu |
risque(x) = borne_0_100( 50 − 20 · log2(x / Français médian) )
Le 50 de chaque mesure est le Français médian (v1.4). La note brute du barème est ramenée à 50 pour la valeur sous laquelle vit la moitié de la population (médiane pondérée par les habitants, comme les moyennes nationales « pour 1 000 habitants »), par deux pentes : 0 et 100 ne bougent pas, l'ordre et les vrais chiffres sont gardés.
recentré(s) = 50 · s / m si s ≤ m
= 50 + 50 · (s − m) / (100 − m) sinon (m : note brute du Français médian)
Les Français médians sont mesurés une fois par an (scripts/mesurer_francais_median.py) et gelés dans echelle_valeur.FRANCAIS_MEDIAN. Exceptions écrites : les accès que la plupart des Français ont déjà en entier (pharmacie, commerces, panier de courses), le brevet du privé, le dénivelé (un filtre) et le prix (pas une qualité) gardent leur barème brut.
Exemple. Annecy, 7,0 cambriolages pour 1 000 logements : 50 − 20 · log2(7,0 / 6,0) = 46. Lyon, 73,2 vols et dégradations pour 1 000 habitants présents : 50 − 20 · log2(73,2 / 20,1) = 13. Annecy, 13,3 % d'habitants exposés au bruit de jour : note brute 77,8, Français médian 87 → 50 · 77,8 / 87 = 45.
6.2 Six familles, dix-neuf mesures, pondérées par les Français
La note porte sur six familles. Chaque famille est la moyenne pondérée des notes de ses mesures présentes, renormalisée sur ce qui est mesuré ; chaque famille pèse ensuite selon son poids propre, quel que soit son nombre de mesures. Les poids viennent du sondage OpinionWay 2026 qui sert au palmarès « Villes et villages où il fait bon vivre » : chaque famille pèse la part des répondants qui citent la catégorie correspondante, ramenée à une somme de six (une version par an, ponderation_sondage.py). Source unique : global_score.py (FAMILLES, POIDS_FAMILLES), miroir TS web/src/engine/familles.ts.
| Famille | Poids | Part | Mesures (poids dans la famille) |
|---|---|---|---|
| Sécurité | 1,33 | 22,2 % | cambriolages / 1 000 résidences principales secu_chez_soi (0,30) · vols et dégradations secu_vols (0,30) · violences hors cadre familial secu_violences (0,40), ces deux-là pour 1 000 habitants présents |
| Écoles | 0,65 | 10,8 % | brevet du collège de secteur school_dnb (1) |
| Santé | 0,9 | 15,0 % | accessibilité aux médecins health_apl (0,55) · temps vers les urgences er_min (0,30) · pharmacie à portée acces_pharma (0,15) |
| Accès au quotidien | 0,83 | 13,8 % | commerces : nombre à 20 min à pied acces_shops_n (0,125) · panier complet acces_panier (0,125) · culture acces_culture (0,25) · marche walk (0,25) · médecins généralistes acces_gp (0,25) |
| Environnement | 1,44 | 24,0 % | calme : bruit de jour noise_pct60 (0,30) · bruit de nuit noise_nuit_pct55 (0,20) — nature : surface à portée nature_ha (0,20) · part boisée foret_pct (0,15) · distance à l'eau hydro_km (0,10) · variété des milieux milieux_n (0,05) |
| Mobilité | 0,85 | 14,2 % | desserte en transports transit_quality (1) |
Les poids des familles somment à six : monter une famille sans en baisser d'autre adoucirait mécaniquement la pénalité d'un point faible, ce qui contredirait §3.
famille_f = Σ_{m mesurée} a_m · n_m / Σ_{m mesurée} a_m
note = min( 100, exp( Σ_f P_f · ln(max(1, famille_f)) / Σ_f P_f ) )
Exemple (vecteur doré « les six familles mesurées »). Sécurité 80, écoles 70, santé 60, accès 47,5 (les commerces, la culture et la marche à 50, acces_gp à 40), environnement 40, mobilité 30 :
note = exp( (1,33·ln 80 + 0,65·ln 70 + 0,9·ln 60 + 0,83·ln 47,5 + 1,44·ln 40 + 0,85·ln 30) / 6 ) = 51,78
Et une famille au plancher plombe la note malgré cinq maximums : sécurité 0 (ramenée à 1), tout le reste à 100 ⇒ 100^(1 − 1,33/6) = 36,03.
Là où le bruit n'est pas mesuré — deux tiers des communes classées : les cartes de bruit ne couvrent que les agglomérations —, l'environnement se renormalise sur la nature seule : on note ce qu'on sait, jamais ce qu'on ignore.
6.3 Le prix n'y entre pas
Un logement cher n'est pas un défaut de qualité de vie : c'est un coût, et ce coût dépend du budget de chacun. Mélanger les deux produit des classements absurdes dans les deux sens. Le prix est affiché à côté de la note, jamais fondu dedans.
6.4 Éligibilité explicite
Une commune est classée si — et seulement si :
- chacune des six familles a au moins une mesure présente ; et
- ses taux sont statistiquement exploitables (au moins 200 habitants).
Sinon elle garde sa fiche et n'apparaît dans aucun classement. Elle n'est pas dernière : elle est absente. Sans cette règle, le « n°1 de France » serait un hameau où aucun fait n'a jamais été enregistré. Le nombre de communes classées est publié sur le site, calculé à chaque build ; il n'est pas recopié ici, où il vieillirait.
6.5 Le rang national suit la note
Depuis la v1.3, la note est nationale : deux communes à 70 vivent la même qualité mesurée, où qu'elles soient. Le rang national se calcule donc sur la note ; le rang dans la classe de taille (village, ville moyenne, grande ville) sert les palmarès par taille. Jusqu'à la v1.2, la note était un rang de bande, et le rang national passait par le rang relatif dans la classe pour neutraliser l'effet de la taille des pelotons.
6.6 Ex æquo
Deux communes au même score partagent le même rang (« 1, 2, 2, 4 »). Les départager par l'ordre alphabétique ou par celui du fichier publierait un ordre indéfendable.
Dans le classement personnalisé, où les scores tiennent sur un octet et où les égalités sont massives, les ex æquo sont départagés d'abord par la couverture (à score égal, la commune mesurée sur le plus de critères passe devant — c'est une mesure de confiance, pas de qualité), puis par un mélange de bits du code INSEE. Ce dernier n'affirme rien : il évite seulement que l'ordre du fichier fasse sortir cinq communes consécutives du même département, ce qui, lui, affirmait quelque chose de faux.
7. Les lettres A–E
Note globale : A ≥ 57 · B ≥ 50 · C ≥ 40 · D ≥ 32 · E < 32
Chaque critère : A ≥ 63 · B ≥ 56 · C ≥ 45 · D ≥ 36 · E < 36
Depuis la v1.3, la lettre se lit sur la note, avec des seuils gelés : ils ont été calés une fois sur les communes classées de 2026 pour donner une cloche — 9 % de A, 20 % de B, 40 % de C, 21 % de D, 10 % de E —, puis figés, comme le Nutri-Score ou le DPE. Depuis la v1.4, la note globale et les critères ont chacun leur table : un critère met le Français médian à 50, au cœur de la bande C ; la note globale, moyenne géométrique de critères recentrés, est descendue avec eux et garde sa cloche sur des seuils regelés. Une commune change de lettre quand ses chiffres changent, jamais parce que les autres ont bougé ; si la France s'améliore, les lettres montent. Jusqu'à la v1.2, la lettre découpait le rang relatif dans la classe en cinquièmes : 20 % de E par construction, quoi qu'il arrive. Source unique : echelle_valeur.SEUILS_NOTE (note globale) et SEUILS_LETTRES (critères), miroirs TS web/src/domain/lettreNote.ts.
Versionnage : toute évolution du moteur qui change un vecteur doré est un changement de méthode. Elle exige un incrément de version et une note de changement — pas une correction discrète du fichier de vecteurs.
Versions
- v1.4 — 2026-10-09 (soir). Audit de 29 communes : une lettre ne voulait pas dire la même chose d'un critère à l'autre (80 % des Français en A sur le calme, 2 % sur la fiscalité, 44 % en E sur les écoles). Le 50 de chaque mesure devient le Français médian (§6.1). La sécurité passe à trois parts égales — cambriolages, vols, violences hors cadre familial (§2.1, §6.2) : additionnés, les vols noyaient les violences, et Saint-Denis (13,6 violences pour 1 000) sortait plus sûre que Paris 15ᵉ (7,3). La note globale a ses seuils gelés A ≥ 57 · B ≥ 50 · C ≥ 40 · D ≥ 32, les critères gardent les leurs (§7). Vecteurs
noteGlobale(piliers, familles) etgraderefaits. - v1.3 — 2026-10-09. La note publique passe des rangs aux valeurs (§6.1) : chaque mesure est notée sur sa valeur réelle, France entière. Les familles pèsent ce que les Français disent compter (sondage OpinionWay 2026, §6.2). La sécurité passe à 50/50 entre cambriolages et voie publique, et la voie publique perd les violences intrafamiliales (§2.1). Le rang national suit la note (§6.5). Les lettres se lisent sur la note avec des seuils gelés A ≥ 63 · B ≥ 56 · C ≥ 45 · D ≥ 36 (§7). Vecteurs
noteGlobale(clénotes) etgrade(clénote) refaits. - v1.2 — 2026-10-02. Les poids se déduisent de l'ordre par la méthode SR au lieu de ROC (§4) : 0,5217 · 0,3043 · 0,1739 à trois critères au lieu de 0,6111 · 0,2778 · 0,1111. Le vecteur doré
rocdevientrang. La moyenne d'un critère composé est re-classée sur une courbe de rang publiée (§2.1, vecteurscourbe). Le calme vaut 100 hors de toute zone de bruit en métropole, et les communes exposées se classent entre elles (§2.1). - v1.1 — 2026-08-28. Le palier de plein score du trajet vaut le plus petit de 30 minutes et de 60 % du plafond (§5).
- v1.0 — 2026-08-16. Première publication.
Errata
- 2026-09-18 — le texte est réaligné sur le code. Les vecteurs dorés étaient passés à la v1.1 et aux six familles (révisions 3 à 5 de
vecteurs.json) sans que ce document suive. Il décrivait encore trois strates dures comme population de référence (§1.2, §2, §6, §7) alors que son propre §9 les disait remplacées le 2026-08-19 ; quatre « piliers » au §6 et cinq au §9, au lieu des six familles et dix-sept mesures ; l'imputation à la médiane comme règle générale (§3), alors qu'un critère priorisé non mesuré écarte la commune depuis le 2026-09-02 ; un trajet « non calculé » au tier national, alors que l'itinéraire routier est calculé partout en France métropolitaine ; et des effectifs figés (nombre de communes, taille des classes), faux depuis l'éclatement de Paris en arrondissements. Les effectifs ne sont plus recopiés ici : ils vivent sur le site, calculés à chaque build. Aucune formule ni aucun vecteur ne change avec cet erratum. - 2026-08-19 — le §9 confondait la couverture du brevet et celle de l'IPS ; l'écart entre cette spec et la page
/donneesa été relevé par un audit externe, et c'est la spec qui avait tort.
Licence
Cette spécification est publiée sous Creative Commons Attribution 4.0 (CC BY 4.0) : vous pouvez la reprendre, l'adapter et l'implémenter, y compris commercialement, à condition de citer Icioola.
Les données relèvent d'une licence distincte : ODbL 1.0 (voir /donnees).