Méthodologie scientifique
Cette page documente la transformation des données brutes en indicateurs et pages publiées. Pour la provenance (quelle source, quelle licence, quel checksum, quand téléchargé), voir la page Sources & citations.
Dernière mise à jour : 2026-05-03. Les volumes indiqués correspondent à cet instantané. Les formules et seuils restent stables tant que l'ICO v2.1 et le filtrage GBIF ne sont pas révisés scientifiquement.
1. Volumes de données
Trois couches successives : sources externes ingérées telles quelles, tables intermédiaires dérivées par jointure ou agrégation, et précomputés de présentation (matviews, caches) dont les URLs publiées dépendent.
1.1 Couche source (brute)
| Table | Rows | Source primaire | Rôle |
|---|---|---|---|
| observations | 183 544 707 | GBIF (occurrence download 2026-04-09) | Occurrences géolocalisées + date, France métropole + DOM. Re-import 2026-04-29 avec 6 nouveaux champs Darwin Core conservés (basisOfRecord, individualCount, recordedBy, etc.) et URL canonique GBIF par occurrence. |
| species | 114 065 | TAXREF v18 (INPN/MNHN) | Référentiel taxonomique, noms, rangs, statuts |
| species_synonyms | 246 558 | TAXREF v18 (INPN/MNHN) | Synonymes taxonomiques. Utilisés pour matcher les noms GBIF non standards (ex Aedes albopictus → Stegomyia albopicta) lors de l'import des observations — sinon les obs étaient silencieusement perdues. |
| relationships | 1 334 067 | GloBI (validated=true) | Relations écologiques interspécifiques (prédation, parasitisme, pollinisation, herbivorie, mutualisme, etc.) — directes uniquement, niveau espèce. |
| relationships_expanded_global | 61 756 937 | Matview cascade taxonomique (GloBI v2) | Cascade documentée → inférée niveau supérieur. Si une relation existe au niveau du genre Carabus, elle est cascadée à toutes les espèces Carabus avec un facteur certainty dégradé (direct=1.0, genus=0.7, family=0.5, order=0.3). Cf. § sur la cascade. |
| communes | 34 879 | IGN Admin Express + INSEE | Géométries communes + population |
| habitat_ref | 22 707 | HABREF v7 (INPN) | 91 typologies habitats (EUNIS, CORINE, …) |
| species_habitats | 63 162 | HABREF liens espèce × habitat | Habitats préférentiels par espèce |
| znieff_zones | 20 095 | PatriNat 2025-11-28 | ZNIEFF I (17 718) + II (2 377) continentales + marines |
| natura2000_sites | 1 762 | PatriNat 2024-12 | ZSC (1 355) + ZPS (407) — Directives Habitats & Oiseaux |
| natura2000_species | 24 892 | FSD (Formulaires Standard Données) | Espèces d'intérêt communautaire par site |
| protected_areas | 11 425 | PatriNat 2026-01 Espaces Protégés | 57 désignations INPN exploitées (RNN, RNR, APB, PN, PNR, Ramsar, CEN, CDL, …) — comptées sur COUNT(DISTINCT designation_abbr). |
| protected_area_species | 6 936 | Liens espèces EP | Espèces motivation / présentes dans chaque EP |
| species.is_eee_ue_regulated | 56 | DwC-A INBO / GBIF CC0 | Flag booléen + date d'entrée en vigueur, Règlement UE 1143/2014 « EEE préoccupantes pour l'Union » |
| species_traits + species_traits_best (matview) | > 500 k valeurs | Agrégation multi-sources | 40+ traits : morpho (masse/longueur/hauteur/envergure), cycle de vie (longévité), reproduction (gestation/couvée/maturité), écologie (régime/activité/habitat/locomotion/migratoire), divers (chromosomes/vitesse/métabolisme). Sources priorisées AnAge > FishBase (poissons, via EOL) > TRY (plantes, via EOL) > BirdLife (oiseaux, via EOL) > EOL Trait Bank (agrégateur 50+ bases) > Wikidata. Traçabilité par valeur : source_url direct,confidence, registry_id. |
1.2 Couche intermédiaire (dérivée)
| Table / Matview | Rows | Dérivée de | Logique d'agrégation |
|---|---|---|---|
| commune_species | 19 123 920 | observations × communes | Agrégat matriciel nb obs par paire (commune, espèce). Jointure spatiale ST_Intersects puis COUNT(*) GROUP BY commune_insee, species_id. |
| species_phenology | 330 947 | observations.date | Agrégat (espèce, mois). Filtrage des dates par défaut GBIF (01/01 + 31/12). Ajout de detection_rate = n_obs_espèce_mois / total_obs_mois pour neutraliser l'effort saisonnier. Cf. §4. |
| commune_indicators | 34 879 | 6 axes dérivés de commune_species | ICO v1 + v2.1 composites. Richesse Shannon, patrimoniale, raréfaction, typicité, connectivité, stabilité — chacun en percentile rank. Cf. §3. |
| commune_protected_areas | 34 879 | Overlap communes.geom × 8 catégories zones protégées | ST_Intersection(ST_Union(zones_categorie), commune.geom) / ST_Area(commune). ST_Subdivide(256) pour accélérer ×20 les polygones massifs. Cf. §5. |
| ico_category_mapping | 57 | Table lookup éditable | 57 désignations INPN → 4 catégories ICO EP (foncier, parcs_adhesion, ramsar_biosphere, reserves_strictes). Modifiable sans migration ; --recompose-only rejoue la composition en 30 s. |
| species_dist_heatmap | 12 317 626 | Précalcul densité observations | Cache heatmap par (species, lat_bin, lng_bin). Évite 100 ms × 100k species au rendu. |
| commune_heatmap_cache | 3 577 291 | Cache choropleth multi-échelles | Pré-bins par niveau de zoom. Clustering au-dessus de 34 879 communes affichées simultanément. |
1.3 Volume de pages publiées
L'agrégation finale produit ~205 000 URLs indexables dans le sitemap : 114 k fiches espèces, 34 k fiches communes, 20 k pages ZNIEFF, 1.8 k pages Natura 2000, 11.4 k pages Espaces Protégés, plus les pages taxonomiques (famille / ordre / classe ≥ 5 espèces), les pages habitat, les régions et départements. Chaque page est factuelle et dérivée des données — aucune génération de contenu par LLM sur du texte naturel, uniquement des templates déterministes quand la description verbatim de la source est absente.
2. Pipeline d'agrégation
Schéma des dépendances. Flèche = « alimente ». Toute modification d'une table amont requiert de rejouer les compute scripts avals (cf. annexe OPERATIONS.md du dépôt).
┌─────────────────┐ ┌──────────────────┐ ┌────────────────────┐
│ TAXREF v18 │ │ GBIF France │ │ PatriNat INPN │
│ 114 k species │ │ 183,5 M occurr. │ │ 33 k zones prot. │
└────────┬────────┘ └─────────┬────────┘ └────────┬───────────┘
│ │ │
▼ ▼ ▼
┌────────┐ ┌─────────────┐ ┌─────────────┐
│species │◀────────▶│observations │ │znieff_zones │
│ │ cd_nom │ 183,5 M │ │natura2000_..│
└────┬───┘ └──────┬──────┘ │protected_.. │
│ │ └──────┬──────┘
│ ST_Intersects(geom) │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ commune_species │ │
│ │ 19 123 920 │ │
│ └──────────┬───────────┘ │
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌────────────────┐ ┌──────────────────────┐
│species_phen. │ │ commune_indic. │ │commune_protected_a. │
│ 330 947 │ │ 34 879 (v1) │ │ 34 879 × 8 cat. │
│ filtré GBIF │ └────────┬───────┘ └──────────┬───────────┘
│ + detec_rate │ │ │
└──────────────┘ │ 0.5 + 0.5 │
└───────────┬───────────┘
▼
ICO v2.1 (patrim_score_v2)
PERCENT_RANK pré-compositionChaque script de calcul est idempotent et loggé : volume traité, throughput, ETA, phases numérotées. Les imports passent tous par fetch-with-mirrorsavec checksum SHA-256 enregistré dans data_sources_registry(traçabilité complète, cf. page Sources).
3. ICO v2.1 — Indice Commune Ontologia
⚠ Choix de design assumés
L'ICO est un score composite Ontologia au sens du Handbook on Constructing Composite Indicators (Nardo, Saisana et al. 2008[36]), dont la formule combine 5 dimensions avec des pondérations choisies par l'équipe Ontologia. Aucune calibration publiée (AHP, Delphi, optimisation sur données ref) n'a fixé ces poids — ils reflètent une priorité éditoriale.
Plusieurs paramètres sont des choix de design (Type C) et non des valeurs dérivées de la littérature :
- Poids des 5 dimensions [0.20, 0.25, 0.20, 0.20, 0.15] : choix Ontologia, non issu d'une optimisation publiée. Sensibilité non testée par bootstrap.
- Facteur d'amortissement
√completeness: aucune publication ne valide la racine carrée du ratio Chao1 comme estimateur de confiance. Choix Ontologia, une transformation linéaire ou logarithmique aurait été défendable de façon équivalente. - Sous-pondérations internes : pression = [0.30 popDensity / 0.30 fracIntro / 0.40 biome anthr] et intégrité réseau = [0.5 connectance / 0.5 nb types interactions] — pondérations choisies par Ontologia, non sourcées.
- Plage de validité SAR z ∈ [0.15, 0.35] : Drakare et al. 2006[40] et Rosenzweig 1995[41] cités fournissent l'exposant SAR moyen (~0.25), mais l'intervalle de validité ±0.10 et le filtrage
n_evaluated ≥ 30, area ∈ [1, 2000] km²sont des choix Ontologia. - Bonus statuts patrimoniaux français +1 cumulables (PN, DH, DO, PNA) : aucune source publiée n'établit cette énumération franco-française cumulable. Choix Type C Ontologia.
- Coefficient prairies = 0.5 × w_E (50% naturalité / 50% anthropisation) : aucune source écologique citée pour cette répartition. Choix Ontologia.
Conséquence assumée : l'ICO ne doit pas être présenté comme une métrique scientifique objective. Il est un indicateur composite Ontologia dont la valeur dépend des choix ci-dessus. Les composantes individuelles (richness, patrimonial, naturalité…) sont elles documentées avec leur propre typologie Type A/B (cf sections 3.2-3.4 ci-dessous et registre exhaustif PARAMETER_AUDIT.md).
3.1 Contexte
L'ICO v1 agrégeait 6 dimensions de biodiversité par percentile rankcommunal — méthode classique de classification non paramétrique adaptée aux distributions asymétriques (Jenks & Caspall 1971[7] sur la classification choroplèthe). L'axe patrimonial v1 (fraction d'espèces déterminantes ZNIEFF × UICN sévérité) saturait car il reflétait l'effort d'inventaire plus que la valeur biologique intrinsèque : les communes sur-prospectées cumulaient des cochages d'espèces rares, les communes sous-prospectées restaient invisibles (Isaac & Pocock 2015[8]). Résultat : stddev < 8, discrimination effondrée.
L'ICO v2 ajoute un bonus spatial structurel indépendant de l'effort : l'overlap géométrique entre la commune et 8 catégories de zones protégées, pondéré par l'intensité biologique/réglementaire de chaque catégorie (Dudley 2008[1], Watson 2014[2]).
3.2 Les 6 dimensions de l'ICO v1
| Dimension | Métrique | Référence |
|---|---|---|
| Richesse | Indice de Shannon H' sur commune_species.observation_count | Shannon 1948[37] |
| Patrimoniale | Fraction espèces déterminantes ZNIEFF × sévérité UICN (score 0=LC → 5=EX, Red List Index — Butchart et al. 2007[14]) | Horellou 2013[3], Touroult 2022[4] |
| Raréfaction | Courbe aire-espèces (SAR) déviance vs attendu local | Fisher-Corbet-Williams 1943[38] |
| Typicité | Cohérence du cortège vs communes voisines (Jaccard) | Jaccard 1912[39] |
| Connectivité | Densité du graphe GloBI restreint aux espèces locales | Dunne 2002[17] |
| Stabilité | Tendance temporelle observations/an (pente sur 10 ans) | Boakes 2010[9] (caveat biais) |
3.3 Bonus spatial v2 — formule verbatim
Pondérations Type C choisies par Ontologia, inspirées de Watson et al. 2014[2] (méta-analyse du gain biologique des aires protégées par catégorie IUCN, primauté des classes I-IV), Horellou et al. 2013[3](ZNIEFF de type I comme seul référentiel français avec critères biologiques d'espèces déterminantes explicites), et Leroux et al. 2010[15](variabilité du lien entre catégorie IUCN et conditions effectives — appelle à ne pas surinterpréter la catégorie nominale). Aucune calibration publiée n'a fixé la valeur précise des coefficients ; ils reflètent une hiérarchisation éditoriale alignée sur la littérature.
patrim_bonus =
0.25 × overlap_znieff_t1_continental -- signal biologique fort (Horellou 2013)
+ 0.05 × overlap_znieff_marine -- sémantique marine distincte
+ 0.25 × overlap_natura2000 -- ZSC ∪ ZPS par UNION géométrique (Directives UE)
+ 0.20 × overlap_reserves_strictes -- RNN + APB + PN cœur (IUCN I-IV, Watson 2014)
+ 0.10 × overlap_ramsar_biosphere -- Ramsar + MAB UNESCO + OSPAR + Barcelone
+ 0.05 × overlap_znieff_t2 -- grands ensembles, signal diffus
+ 0.07 × overlap_parcs_adhesion -- PNR + PN aires adhésion + GSF (IUCN V)
+ 0.03 × overlap_foncier -- CEN + Conservatoire du LittoralChaque overlap_* ∈ [0, 1] = fraction de la surface communale recouverte par l'ST_Union des zones de cette catégorie. Les 8 catégories sont géométriquement disjointes dans l'esprit mais peuvent se chevaucher en pratique (une ZNIEFF peut aussi être Natura 2000). On n'anti-double-compte pas : chaque catégorie est un axe indépendant du signal réglementaire-biologique.
3.4 Composition finale — Option C (percentile rank pré-composition)
Le bonus brut patrim_bonus a une distribution à queue longue (communes Polynésie / Guyane à 99 % de couverture, vs majorité métropole entre 10-30 %). Une combinaison linéaire directe (0,5 × v1 + 0,5 × bonus × 100) donne trop de poids aux extrêmes et une corrélation anormalement forte (corr = 0,95 vs v1, donc v2 apporte peu). Approche retenue par Ontologia : percentile rank pré-composition, transformation classique en construction de composite indicators pour ramener une distribution asymétrique à un rang relatif (Jenks & Caspall 1971[7] sur la classification choroplèthe) :
-- Option C validée
patrim_bonus_pct = PERCENT_RANK(patrim_bonus) OVER () × 100
patrimonial_score_v2 = 0.5 × patrimonial_percentile_v1
+ 0.5 × patrim_bonus_pct3.5 Tests de validation (tous passés)
| Test | Cible | Mesuré | Référence |
|---|---|---|---|
| stddev(v2) | > 18 (vs v1 < 8) | 24.51 | Discrimination effective |
| corr(v1, v2) | ∈ [0.65, 0.85] | 0.808 | v2 ajoute du signal sans trahir v1 |
| Hotspots réf. | ≥ 8 / 14 dans top 100 | 8 / 14 | Camargue, Fontainebleau, Saorge, … |
| Couverture moyenne du bonus spatial | — (référence indicative) | 24,8 % | Cohérent avec l'étendue cumulée des aires protégées européennes rapportée par Maiorano et al. 2015[5] (> 1/3 de l'UE). |
Top 10 post-ICO v2.1 (échantillon) : Mantet, Saintes-Maries-de-la-Mer, Gruissan, Gavarnie-Gèdre, Saorge, Fontainebleau, Le Grau-du-Roi, Aigues-Mortes, Arles — cohérent avec les hotspots de biodiversité établis de la littérature.
3.6 Corrections techniques documentées
- Mapping PN (Parc National) : INPN utilise le même
designation_abbr='pn'pour la zone cœur (IUCN II, protection stricte →reserves_strictes) et l'aire d'adhésion (IUCN V, gestion concertée →parcs_adhesion). Le script distingue viadesignation_label ILIKE '%adhésion%'pour router correctement les 11 aires AOA. - Antiméridien (Polynésie) : les géométries polynésiennes traversent la ligne de changement de date.
ST_Area::geographyéchoue aveclwgeom_area_spher returned area < 0.0. Filtre appliqué avantST_Union:(ST_XMax(geom) - ST_XMin(geom)) < 350. - Optimisation spatiale :
ST_Subdivide(256)sur les polygones > 256 vertices accélère ×20 lesST_Intersectionsur les ZNIEFF II continentales (> 10 000 km²), cf. PostGIS docs. - Invariance des invalides :
ST_MakeValidappliqué en amont sur toutes les géométries source (zones protégées issues de shapefiles parfois auto-intersectants).
4. Phénologie — filtrage des biais GBIF
4.1 Source et granularité
La matview species_phenology agrège les 183,5 M observations GBIF par (species_id, month). 331 620 lignes résultent de la combinaison ~110 k espèces × 1-12 mois présents (les espèces avec 0 observation datée sont omises). Alimente le calendrier 12 mois sur chaque fiche espèce.
4.2 Biais détectés — analyse data-driven
Requête ratio vs fenêtre glissante ±5 jours (Robertson 2010[10], Zizka 2019[11] / CoordinateCleaner) pour distinguer les pics pathologiques (conventions d'encodage) des pics légitimes (effort saisonnier naturel). Seuil de filtrage adopté : ratio ≥ 5×.
| Date | Obs | Voisins ±5j moy. | Ratio | Verdict |
|---|---|---|---|---|
| 1er janvier | 20 504 708 | 158 000 | 130× | Pathologique — filtré |
| 31 décembre | 695 302 | 126 805 | 5.48× | Pathologique — filtré |
| 1er avril | 944 972 | 399 053 | 2.37× | Borderline — conservé |
| 1er juin, 1er juillet | 1.1-1.2 M | ~750 000 | 1.49-1.52× | Légitime — effort printanier |
| 15 juin | 792 338 | ~900 000 | < 1× | Légitime |
Les deux dates filtrées correspondent à deux conventions GBIF d'encodage de dates imprécises (année seule connue, collections historiques, atlas rétrospectifs) : YYYY-01-01 dominante et YYYY-12-31 minoritaire (Maldonado 2015[12]). Volume retiré par le filtrage des deux dates pathologiques : environ 12 % du corpus daté. Impact attendu sur le signal biologique : limité — ces dates correspondent à des conventions d'encodage non datées, leur retrait retire principalement du bruit structurel. Pas de validation empirique quantitative côté Ontologia (test sur subset à scoper).
4.3 Normalisation par effort saisonnier
L'observation citoyenne GBIF/iNaturalist/Vigie-Nature est sur-représentée au printemps/été (×10-20 vs hiver). Un calendrier en nombre d'observations brut confond activité de l'espèce et disponibilité des observateurs. La matview ajoute donc une colonne detection_rate (Isaac & Pocock 2015[8]) :
detection_rate = n_obs_espèce_ce_mois / total_obs_ce_mois -- Exemple Hirundo rustica (hirondelle rustique, migrateur trans-saharien) : -- Avril 2023 : 113 593 obs / 16 199 048 total = 0.701 % -- Mai 2023 : 118 374 obs / 22 031 247 total = 0.537 % -- En raw: mai = pic (effort max). En detection_rate: avril = pic (vraie -- phénologie, arrivée massive post-migration).
Les barres UI et le pic narratif (« pic en avril ») sont calés sur detection_rate. Le compte brut reste accessible en tooltip pour transparence.
4.4 Requête SQL complète de la matview
CREATE MATERIALIZED VIEW species_phenology AS
WITH filtered AS (
SELECT species_id, commune_insee,
EXTRACT(MONTH FROM date)::INT AS month
FROM observations
WHERE date IS NOT NULL
AND NOT (
(EXTRACT(MONTH FROM date) = 1 AND EXTRACT(DAY FROM date) = 1)
OR (EXTRACT(MONTH FROM date) = 12 AND EXTRACT(DAY FROM date) = 31)
)
),
monthly_effort AS (
SELECT month, COUNT(*)::BIGINT AS total_obs_month
FROM filtered GROUP BY month
)
SELECT f.species_id, f.month,
COUNT(*)::INT AS n_observations,
COUNT(DISTINCT f.commune_insee)::INT AS n_communes,
me.total_obs_month,
(COUNT(*)::DOUBLE PRECISION / NULLIF(me.total_obs_month, 0))
AS detection_rate
FROM filtered f
JOIN monthly_effort me ON me.month = f.month
GROUP BY f.species_id, f.month, me.total_obs_month;5. Overlaps spatiaux — les 8 catégories
Pour chaque commune, on calcule 8 fractions de surface couverte par une UNION géométrique des zones de chaque catégorie. L'union évite le sur-comptage quand 2 zones de même catégorie se chevauchent.
| Catégorie ICO | Poids | IUCN | Designations INPN incluses |
|---|---|---|---|
| znieff_t1_continental | 0.25 | — | ZNIEFF type I continentales (17 538). Inventaire biologique, critères espèces déterminantes (Horellou 2013). |
| znieff_marine | 0.05 | — | ZNIEFF marines toutes catégories (306 = 180 type I + 126 type II). Catégorie séparée — sémantique marine distincte. |
| natura2000 | 0.25 | — | ZSC (1 355, Habitats) ∪ ZPS (407, Oiseaux). UNION géométrique (un site peut être les deux). Couverture des espèces menacées documentée par Trochet & Schmeller 2013[6] ; gap analysis sur les zones humides EU par Jantke et al. 2011[13]. |
| reserves_strictes | 0.20 | I-IV | 28 designations EP. RNN, RNR, RBI, APB, APHN, MN, PN zone cœur, RNCFS, … |
| ramsar_biosphere | 0.10 | — | 6 designations EP. Ramsar, réserves de biosphère MAB UNESCO, OSPAR, Barcelone. |
| znieff_t2 | 0.05 | — | ZNIEFF type II continentales (2 251). Grands ensembles fonctionnels, signal diffus. |
| parcs_adhesion | 0.07 | V | 20 designations EP. PNR (58), PN aire d'adhésion (11), GSF, sites classés 1930, zones adhésion géoparcs. |
| foncier | 0.03 | — | 3 designations EP. CEN (Conservatoires d'Espaces Naturels), CDL (Conservatoire du Littoral). |
Le mapping des 57 désignations INPN Espaces Protégés → 4 catégories ICO (reserves_strictes, parcs_adhesion, ramsar_biosphere, foncier) est stocké dans la table lookup ico_category_mapping. Modifiable sans migration : un UPDATE suivi de npm run compute:commune-protected-areas -- --recompose-onlyrejoue la composition en 30 s (vs 18 min pour le spatial complet).
6. Traits biologiques — agrégation multi-sources
6.1 Architecture
Table species_traits stocke une ligne par(species × trait × source). Matview species_traits_best agrège avec priorisation scientifique pour donner une valeur canonique par trait. La fiche espèce consomme la matview ; chaque valeur UI porte un badge source cliquable (URL directe de la valeur pour audit).
-- Matview species_traits_best v6 : 1 valeur par (species, trait), priorisée
-- 25 sources actives au 2026-05-03, ~378 000 valeurs canoniques sur ~41 000 espèces.
CREATE MATERIALIZED VIEW species_traits_best AS
SELECT DISTINCT ON (species_id, trait_key)
species_id, trait_key, value_numeric, value_text, unit,
source, source_url, confidence
FROM species_traits
ORDER BY species_id, trait_key,
CASE source
-- Tier 1 : sources académiques peer-reviewed spécialisées par groupe
-- ── Vertébrés ─────────────────────────────────────────
WHEN 'anage' THEN 1 -- longévité vertébrés
WHEN 'pantheria' THEN 1 -- mammifères
WHEN 'avonet' THEN 1 -- oiseaux morphologie + écologie
WHEN 'amphibio' THEN 1 -- amphibiens
WHEN 'squambase' THEN 1 -- lézards + serpents
WHEN 'fishbase' THEN 1 -- poissons
WHEN 'elton' THEN 1 -- régimes oiseaux + mammifères
WHEN 'animal_traits' THEN 1 -- masse/BMR/cerveau multi-taxon
-- ── Plantes ───────────────────────────────────────────
WHEN 'eive' THEN 1 -- Ellenberg-type harmonisé Europe
WHEN 'csr_pierce' THEN 1 -- stratégie CSR Grime
WHEN 'brot' THEN 1 -- plantes méditerranéennes
WHEN 'leda_seed_mass' THEN 1 -- LEDA Europe NW
WHEN 'leda_canopy_height' THEN 1
WHEN 'leda_sla' THEN 1
WHEN 'leda_age_first_flowering' THEN 1
WHEN 'try_categorical' THEN 1 -- TRY catégorique 66k plantes
-- ── Arthropodes ───────────────────────────────────────
WHEN 'logghe_arthropod' THEN 1 -- arthropodes Europe NW
WHEN 'wst' THEN 1 -- araignées mondiales
WHEN 'hagge_morpho' THEN 1 -- coléoptères saproxyliques EU (morpho)
WHEN 'saprox' THEN 1 -- coléoptères saproxyliques FR (essence/habitat/régime/IP)
WHEN 'leptraits_mw2020' THEN 1 -- papillons Europe + Maghreb
-- ── Champignons ───────────────────────────────────────
WHEN 'fungaltraits' THEN 1 -- traits fongiques par genre
WHEN 'fungalroot' THEN 1 -- mycorhization plantes
-- ── Multi-taxon thermique ─────────────────────────────
WHEN 'globtherm' THEN 1 -- limites thermiques expérimentales
-- Tier 2-3 : agrégateurs (futur)
WHEN 'eol' THEN 3
-- Tier 4 : fallback large couverture
WHEN 'wikidata' THEN 4
ELSE 5
END, confidence DESC, fetched_at DESC;6.2 Sources
| Source | Scope | Species | Licence | Citation |
|---|---|---|---|---|
| AnAge (HAGR) | Vertébrés, longévité + reproduction + masse + métabolisme. Gold standard académique. | 4 645 | Academic (CC-BY-NC) | Tacutu et al. 2018, Nucleic Acids Res. 46(D1):D1083-D1090 |
| PanTHERIA | Mammifères du monde, 45+ traits (life history, écologie, distribution, climat, métabolisme). | 5 400+ | Liberal academic | Jones et al. 2009, Ecology 90:2648 |
| AVONET | Tous oiseaux, morpho (bec/ailes/tarse/queue) + écologie (habitat, régime, migration) + range. | 11 009 | CC-BY 4.0 | Tobias et al. 2022, Ecology Letters 25:581-597 |
| AmphiBIO | Amphibiens globaux, 17 traits (habitat, régime, reproduction, activité, élévation). | 6 500+ | CC-BY 4.0 | Oliveira et al. 2017, Scientific Data 4:170123 |
| SquamBase | Squamates (lézards + serpents), morpho + life history + distribution. 18 ans de travail manuel. | 11 744 | CC-BY 4.0 | Meiri et al. 2024, Global Ecology and Biogeography |
| FishBase | Tous poissons, taxonomie + morphologie + longévité + habitat + régime + vulnérabilité. | 35 000+ | CC-BY-NC 4.0 | Froese & Pauly (eds). FishBase.org, snapshot HuggingFace v24.07 |
| EltonTraits 1.0 | Oiseaux + mammifères mondiaux, régimes alimentaires (10 catégories en %) + stratégies de nourrissage + activité temporelle. | 15 393 | Liberal academic (ESA) | Wilman et al. 2014, Ecology 95(7):2027 |
| AnimalTraits | Multi-taxon (vertébrés + invertébrés), masse corporelle + BMR + taille cerveau, curé depuis 400+ sources. | ~2 900 | CC-BY 4.0 | Herberstein et al. 2022, Scientific Data 9:265 |
| Logghe arthropodes NW Europe | 4 000+ arthropodes d'Europe du Nord-Ouest (insectes + araignées), 10 traits : taille, fécondité, développement, voltinisme, dispersion, longévité, enveloppe thermique. Darwin Core Archive GBIF. | 4 000+ | CC-BY-NC 4.0 | Logghe et al. 2025, GBIF Checklist, doi:10.15468/75g5z9 |
| BROT 2.0 | Plantes du bassin méditerranéen, 44 traits fonctionnels (croissance, dispersion, feu, germination, phénologie). Pertinent flore française Sud. | 2 457 | CC-BY 4.0 | Tavşanoğlu & Pausas 2018, Scientific Data 5:180135 |
| LEDA Traitbase | Flore Europe NW (~8 000 plantes), 4 traits : masse semence, hauteur couvert, SLA, âge première floraison. Compilation herbiers + terrain 15+ pays. | ~8 000 | Academic (citation) | Kleyer et al. 2008, J. Ecology 96:1266-1274 |
| TRY Plant Trait Database | Sous-ensemble Categorical (66 043 plantes mondiales) : 13 traits catégoriques (PlantGrowthForm, LeafType, LeafPhenology, PhotosyntheticPathway C3/C4/CAM, Woodiness, Succulent, Climber, Aquatic, Epiphyte…). Flow 3-POST + Basic Auth. | 66 043 | TRY ToS (CC-BY-SA) | Kattge et al. 2020, Global Change Biology 26:119-188 |
| World Spider Trait (WST) | Base mondiale Araneae (~13 000 espèces, 513 571 records) : morphométrie, colorations, écologie (moisture, stratum, ballooning), prédation (hunting guild, web building, paralysis latency), physio (thermal, venom), repro (eggsacs, egg size), silk biomechanics. API REST publique. | ~13 000 | CC-BY 4.0 | Pekár et al. 2021, Database (Oxford) 2021:baab064 |
| FungalTraits | Champignons et stramenopiles fongoïdes, structuré par genre : 16 traits (lifestyle primaire/secondaire, capacité endophyte/pathogène, type décomposition, substrat, fructification, hyménium, ectomycorhize lineage + exploration, photobionte). Match par genre extrait de scientific_name. | 10 772 genres | CC-BY 4.0 | Põlme et al. 2020, Fungal Diversity 105:1-16 |
| FungalRoot v.2.0 | Mycorhization plante-champignon globale : type AM/EcM/ErM/OrM/non-mycorrhizal pour 14 870 espèces de plantes vasculaires. Agrégation par espèce de plante par mode (type majoritaire), confidence proportionnelle au support. | 14 870 | CC-BY 4.0 | Soudzilovskaia et al. 2020, New Phytologist 227:955-966 |
| SAPROX/FRISBEE (Bouget+Brustel) | Coléoptères saproxyliques de France métropole. 2 647 espèces TAXREF v15 avec IP-Bouget 1-4 et statut Obligatoire/Facultatif (Bouget 2018) + 300 bioindicateurs avec essence végétale, habitat larvaire (carpophores, gros bois, cavités…), régime trophique (xylophile/mycétophage/saproxylophage/prédateur), indices If/Ips/Ipn (Brustel 2001). | 2 647 | Etalab 2.0 Open | Bouget et al. 2010, Revue d'Écologie Suppl. 10 ; Brustel 2004, ONF Dossier Forestier 13 |
| Hagge 2021 morpho saproxyliques | Coléoptères saproxyliques européens : 37 traits morphologiques (masse, dimensions corps/tête/pronotum/élytres/ailes/mandibule/yeux/pattes en mm, indices wing aspect/load/roundness, clarté coloration, statut UICN Allemagne). | 1 157 | CC0 1.0 | Hagge et al. 2021, Journal of Animal Ecology 90:1934-1947 |
| LepTraits MW2020 | Papillons d'Europe et du Maghreb (Papilionoidea) : 25 traits codés en abréviations courtes — voltinisme, hibernation (stade+lieu), pupation, association myrmécophile, plante-hôte (type/croissance/partie/spécialisation), oviposition, mois de vol, basking. Codes raw conservés (cf PDF de définitions Dryad). | 542 | CC0 1.0 | Middleton-Welling et al. 2020, Scientific Data 7:351 |
| Wikidata SPARQL | Traits variés + cross-refs (EOL/GBIF/NCBI/ITIS/IUCN) + noms vernaculaires multi-langues + interactions prey/feeds-on. | 99 938 (QID) | CC0 1.0 | Vrandečić & Krötzsch 2014, Commun. ACM 57(10):78-85 |
6.3 Couverture par groupe TAXREF
| Kingdom / Classe | Species TAXREF FR | Species couvertes | Sources actives |
|---|---|---|---|
| Mammifères | ~100 | ~95 (~95%) | AnAge, PanTHERIA, EltonTraits, AnimalTraits, Wikidata |
| Oiseaux | ~500 | 407 (~81%) | AVONET, AnAge, EltonTraits, Wikidata |
| Amphibiens | ~30 | 38 (100%) | AmphiBIO, AnAge, Wikidata |
| Reptiles (squamates) | ~50 | 35 (~70%) | SquamBase, AnAge, Wikidata |
| Poissons | ~600 | 831 (inclut marins mondiaux) | FishBase, Wikidata |
| Plantes vasculaires | ~6 000 | ~5 000 (~83%) | TRY (catégorique), BROT (méd), LEDA (Europe NW), Wikidata |
| Insectes (tous) | ~35 000 | ~4 580 (14%, cible Europe NW) | Logghe (NW Europe), AnimalTraits, Wikidata |
| ↳ Coléoptères saproxyliques | ~2 647 | ~2 635 (~99%) | SAPROX/FRISBEE (essence/habitat/régime/If/Ip), Hagge 2021 (37 traits morpho) |
| ↳ Lépidoptères (papillons EU) | ~5 200 | ~1 075 (~21%, cible UE+Maghreb) | LepTraits MW2020 (voltinisme, hibernation, plante-hôte), Logghe, Wikidata |
| Araignées (Araneae) | ~1 700 | ~1 223 (~72%) | WST (mondial), Logghe, Wikidata |
| Fungi | ~26 000 | ~24 982 (~95%, héritage genre) | FungalTraits (16 traits par genre), Wikidata |
| ↳ Plantes vasculaires (mycorhization) | ~6 000 | ~2 700 (~45%) | FungalRoot (type AM/EcM/ErM/OrM) |
| Autres invertébrés (marins, sol…) | ~15 000 | partiel (AnimalTraits) | AnimalTraits, Wikidata |
Total matview species_traits_best au 2026-05-03 : 377 941 valeurs canoniques sur 40 956 espèces (environ 36 % des espèces TAXREF référencées en France, mais 70–99 % sur les groupes visibles grand public — vertébrés, plantes vasculaires, champignons, arthropodes principaux de l'Europe NW). L'écart sur le total s'explique par les micro-invertébrés marins, plancton et taxons rares pour lesquels les référentiels ouverts couvrent imparfaitement la France métropolitaine et les DOM-TOM.
6.4 Roadmap — sources restantes
Les groupes suivants sont aujourd'hui peu couverts par les sources ouvertes disponibles. À intégrer si un référentiel CC-BY / CC0 devient accessible :
- Fungi — niveau espèce détaillé : FungalTraits Põlme 2020 (intégré 2026-05-02) couvre 95 % des champignons de France au niveau du genre (mode de vie, fructification, mycorhize EM, etc.). Pour descendre au niveau espèce (morphologie de sporophore, comestibilité, distribution sub-spécifique), il faudra agréger MycoPortal, MycoBank, FungalTraits par observations individuelles, ou attendre une publication de référence type FishBase pour les champignons.
- Invertébrés marins : WoRMS + OBIS pour taxonomie et distributions. Beukhof 2019 (poissons démersaux européens) et coral-traits.org prévus pour un prochain sprint.
- TRY quantitatif : le sous-ensemble catégorique est déjà intégré. Pour les traits quantitatifs (SLA, azote foliaire, hauteur précise, masse feuille), TRY exige une data request formelle non automatisable. BROT et LEDA compensent partiellement pour la flore FR.
- Insectes hors Europe NW : Logghe 2025 couvre ~4 000 arthropodes d'Europe du Nord-Ouest. Bases spécialisées (GlobalAnts pour fourmis, BETSI sol EU, InsectBase Lepidoptera) à intégrer individuellement pour couvrir le Sud de la France et les DOM-TOM.
6.5 Traits collectés (40+ clés)
Morphologie : mass_kg, mass_birth_g, mass_weaning_g, length_cm, height_cm, wingspan_cm, width_cm, thickness_cm. Cycle de vie : lifespan_years_max, lifespan_years_avg, generation_time_days. Reproduction : gestation_days, incubation_days, weaning_days, age_first_reproduction_days, clutch_size_avg/max, interbirth_interval_days. Écologie : diet, activity_cycle (diurnal/nocturnal/crepuscular), trophic_level, habitat_type, locomotion, migratory, reproductive_mode, endemic_to, extinction_status, conservation_status_iucn_worldwide. Divers : chromosome_count, speed_kmh_max, metabolic_rate_w, body_temperature_c, color_main.
6.6 Contrôle qualité
- Conversion d'unités stricte : chaque source fournit valeur + unité explicite (via
wikibase:quantityUnitpour Wikidata,normal_unitspour EOL). Si l'unité n'est pas reconnue, la valeur est écartée — jamais devinée. - Sanity checks par trait : plafonds biologiques (ex. longévité < 500 ans, masse < 200 t). Valeurs hors range = skip + log.
- Multi-valeurs préservées : si 2 sources divergent (ex. Wikidata = 4,5 kg, AnAge = 5,2 kg), les 2 lignes coexistent dans
species_traits. La matview remonte AnAge (priorité 1). Le conflit reste auditable. - Resilience : checkpoint persistant par batch dans
trait_import_checkpoints. En cas de crash, resume automatique depuislast_key_processed. Idempotent viaON CONFLICT UPDATE. - Traçabilité à la valeur :
source_url+source_ref+confidence+ FKregistry_id. Chaque badge source UI est cliquable et pointe directement sur la page source de la valeur.
7. Recherche fuzzy — colonnes générées + GIN trigramme
L'autocomplete espèce et commune doit accepter les fautes de diacritique (« coccinelle a 7 points » → « Coccinelle à 7 points »), les variantes de tirets/espaces, et l'article initial (« grau » → « Le Grau-du-Roi »). Le moteur s'appuie sur :
- pg_trgm (extension Postgres) : matching par trigrammes (séquences de 3 caractères), routable sur un index GIN. Supporte
ILIKE '%foo%'et l'opérateur%%(similarité). - immutable_unaccent : wrapper IMMUTABLE autour de
unaccent(STABLE par défaut, non indexable). Pattern communauté Erwin Brandstetter — sûr tant que le dictionnairepublic.unaccentn'est pas modifié. - Colonnes générées (
GENERATED ALWAYS AS … STORED) : Postgres matérialise la forme normalisée à chaque INSERT/UPDATE, zéro maintenance, index direct simple. Approche retenue après constat que l'index sur expression complexe n'était pas capté par le planner (qui préférait un seq scan même avecenable_seqscan=off).
-- species.search_normalized (GENERATED ALWAYS AS … STORED) regexp_replace( immutable_unaccent(lower(COALESCE(common_name_fr, '') || ' ' || scientific_name)), '[-\s]+', ' ', 'g' ) -- communes.name_normalized (idem + strip article initial) regexp_replace( regexp_replace(immutable_unaccent(lower(name)), '[-\s]+', ' ', 'g'), '^(le |la |les |l''|aux |au )', '' ) -- Index CREATE INDEX species_search_normalized_trgm_idx ON species USING gin (search_normalized gin_trgm_ops); CREATE INDEX communes_name_normalized_trgm_idx ON communes USING gin (name_normalized gin_trgm_ops);
Gains mesurés (EXPLAIN ANALYZE) sur requêtes réelles post-refactor : species autocomplete 182 ms → 0.79 ms (×230), commune autocomplete 118 ms → 1.44 ms (×82). Bitmap Index Scan exact sur le trigramme, sans seq scan résiduel.
7.1 Stratégie multi-tiers (intent matching)
Au-dessus du moteur trigramme, un score étagé classe les résultats par proximité d'intention plutôt que par similarité brute. Ce pattern, inspiré des moteurs propriétaires (Algolia, Meilisearch), évite qu'un préfixe partiel verbatim ne batte un résultat dont la requête est intégralement reconnue. Cinq paliers évalués dans l'ordre :
- Préfixe absolu — la colonne commence par la requête (score 100).
- Préfixe de mot interne — la requête démarre un mot à l'intérieur de la colonne (80).
- Substring contigu — la requête apparaît telle quelle quelque part (60).
- Tokens AND — chaque mot de la requête (≥ 2 caractères) est présent séparément dans la colonne. Résout le cas « punaise de lit » → « Punaise des lits » là où la séquence stricte échoue (40).
- Tolérance fautes —
word_similarity> 0.4, activée à partir de 4 caractères (0). Catch « coccinele » → « Coccinelle ».
Tie-break final par bonus word_similarity × 30puis tris métier (alphabétique espèce, population commune). Aucune popularité ne passe avant la proximité sémantique.
8. Graphe ego-network par espèce
Sur la fiche de chaque espèce focale S, un sous-graphe interactif présente S au centre, ses partenaires écologiques directs (hop 1), les partenaires de ses partenaires (hop 2), et optionnellement hop 3. La sélection des espèces affichées et leur encodage visuel suivent une méthodologie scientifique documentée[16][17] dans un fichier METHODOLOGIE_GRAPHE.mdmaintenu en interne.
8.1 Score composite par voisin
Pour chaque voisin candidat n au hop courant, on calcule un score composite à 5 termes :
score(n) = LN(1 + Σ occurrence_count(n ↔ frontière)) [contribution force]
+ 2.0 × n_types_distincts(n ↔ frontière) [diversité fonctionnelle]
+ 1.5 × is_patrimoniale(n) [valeur conservation]
+ 1.0 × (1 / LN(2 + n_communes_national(n))) [irrémplaçabilité]
− GREATEST(0, LOG₁₀(n_global_relations(n) / 1000)) [malus hub doux]Coefficients Type C Ontologia. Les poids 2.0 / 1.5 / 1.0 / 1.0 et le seuil 1000 du malus hub sont des choix éditoriaux calibrés empiriquement sur 8 espèces-test (cohérence visuelle, équilibre patrim/connectivité/rareté), pas dérivés d'une optimisation publiée. La sensibilité à ces poids n'a pas été quantifiée par bootstrap.
- is_patrimoniale ∈ {0, 1} = vrai si une condition de conservation est remplie : Liste Rouge UICN CR/EN/VU (nationale, européenne ou mondiale), protection nationale, Directive Habitats/Oiseaux, PNA actif, déterminante ZNIEFF, ou statut endémique. Pré-calculé dans la table
species_patrimonial_flag. - n_communes_national(n) = nombre de communes françaises où l'espèce n est observée (depuis
commune_species). Pré-calculé dansspecies_n_communes. Donne un bonus aux espèces géographiquement rares (irremplaçables). - malus hub : pénalité douce (logarithmique) sur les espèces hyper-étudiées de la littérature (Bubulcus ibis 7 089 relations, Apis mellifera 1 133, Quercus robur 2 304). Évite qu'elles raflent tout l'affichage sans justification écologique locale. Pré-calculé dans
species_connectivity_rank.
8.2 BFS k-hop avec quota par parent
Au hop 1, on prend les top 30 voisins du focal par score. Au hop ≥ 2, on impose un quota K = 3 par parent : chaque voisin du hop précédent contribue au plus 3 voisins de hop suivant, sélectionnés selon le score composite restreint aux liens parent → enfant. Puis dédup global (si plusieurs parents proposent le même voisin, on garde le meilleur score) et plafond 35 voisins au hop 2 / 20 au hop 3.
Effet. Un voisin niveau 1 peu connecté (Ixodes ricinus, 86 voisins) contribue aux mêmes 3 voisins de hop 2 qu'un voisin niveau 1 hub (Apis mellifera, 1 133 voisins). On préserve la diversité topologique du graphe — sans ce quota, les hubs raflaient tout l'affichage et on perdait l'information écologique des voisins moins étudiés.
8.3 Sélection des arêtes
Deux règles s'appliquent après la sélection des nœuds :
- Centre ↔ voisin direct : toutes les arêtes conservées sans filtre. C'est la promesse de la fiche : voici toutes les interactions documentées du focal parmi les nœuds sélectionnés.
- Inter-voisins (voisin A ↔ voisin B) : filtre par médiane locale des
occurrence_count. Avec ~645 000 arêtes singletons (occ=1) sur ~1,33 M relations totales en base, l'inclusion naïve crée du bruit. La médiane locale est un seuil adaptatif : sur un sous-graphe dense en données (réseau de la mésange charbonnière), la médiane est plus haute → on filtre plus dur ; sur un sous-graphe pauvre (mycorhizien rare), elle est basse → on garde plus. - Multigraph → simple graph : si la même paire (A, B) apparaît plusieurs fois (sources de données distinctes ou types d'interaction multiples), on agrège en une seule arête avec le type dominant (= type avec le plus haut
occurrence_count),total_occ= somme des occ,n_data_sources= nombre de lignes agrégées. Direction préservée selon le type dominant.
8.4 Encodage visuel
- Forme + couleur des nœuds par règne (8 règnes avec forme distincte pour lecture indépendante de la couleur, condition daltonisme).
- Taille des nœuds proportionnelle au degré localdans le sous-graphe affiché (pas au degré global). Évite queApis mellifera apparaisse énorme partout, même quand elle est en périphérie d'un graphe focal — la taille reflète l'importance contextuelle.
- Halo doré autour du nœud focal pour l'identifier en un coup d'œil même sur graphes denses.
- Bordure colorée des espèces patrimoniales : rouge (CR/EN), orange (VU), jaune (protégée par PN/PNA/Directives), violet (endémique sans LR menacée). Permet de repérer instantanément les espèces à enjeu de conservation.
- Couleur + style des arêtes par type d'interaction (prédation rouge solide, parasitisme orange dotted, symbiose dorée dashed, pollinisation rose dash-dot, etc.). Épaisseur proportionnelle à
log(occurrence_count)clampée [1, 6] — une arête à 8 000 obs ne devient pas 8 000× plus épaisse que celle à 1 obs.
8.5 Mode contextuel commune
Quand une fiche species est ouverte avec le paramètre?communeInsee=<insee>(typiquement depuis la page de la commune), le graphe est restreint au sous-ensemble des espèces effectivement observées dans cette commune (filtre amont, pas post-filter). Le centre Sest conservé même s'il n'est pas observé localement (sinon graphe vide pour les espèces rares).
Un bandeau visuel indique le mode actif et le bloc « Indicateurs » affiche alors le taux de couverture local (n_partners_local / n_partners_global) et le nombre de types d'interactions documentés sur place. Si la couverture descend sous 10 %, une alerte invite à regarder le graphe global pour plus de contexte.
Limite assumée. Une interaction documentée mondialement par GloBI peut ne pas se réaliser dans une commune précise. Le filtre commune garantit la co-occurrence spatiale des espèces, pas la réalisation effective de l'interaction.
8.6 Volume cible et plafond UI
Refonte 2026-04-29 : le graphe affiche au plus 31 nœuds par fiche (1 centre + 15 bulles depth=1 + 15 partenaires depth=2). Pas de slider densité — le serveur sélectionne intelligemment via doctrine 4 cas + algo partenaire (§8.10). Toggle profondeur 1↔2 client-side (cache le depth=2 sans refetch).
8.7 Tables sources
| Table | Volume | Rôle |
|---|---|---|
| relationships | ~1 M | Source brute des arêtes (GloBI + Wikidata + community), validated=true |
| species_connectivity_rank | 108 568 | Degré global + percentile rank par espèce — malus hub + phrase narrative |
| species_n_communes | 59 100 | Présence territoriale par espèce — bonus irrémplaçabilité |
| species_patrimonial_flag | 108 568 | Flag patrimonial + classe (critical/vulnerable/protected/endemic) — score + bordure |
| species_graph_default_cache | ~40 k | Cache pré-calculé du graphe depth=3 par espèce, refresh manuel post-import GloBI |
8.8 Références scientifiques
Méthodologie élaborée à partir des fondations théoriques de Bascompte & Jordano 2007[16], Dunne et al. 2002[17], des métriques de Bersier et al. 2002[18] et Almeida-Neto et al. 2008[19], et des recommandations sur les biais des données d'interactions de Poisot et al. 2021[20]. Cf. bibliographie §19 pour les références complètes.
8.9 Mode expert — modularité & nestedness
Sous le panneau d'indicateurs principal, un toggle « Indicateurs avancés » révèle 3 métriques calculées côté client (~50 ms) sur le sous-graphe affiché :
- Modularité Q (Newman 2006[21]) via partition Louvain (Blondel et al. 2008[22]) — mesure la qualité d'un découpage en communautés. Q < 0.4 = peu structuré, 0.4-0.7 = modulaire clair, > 0.7 = très compartimenté. Pondération des arêtes par
log(1+occ). - Communautés détectées = nombre de partitions Louvain. Indicateur de complexité du sous-graphe.
- Nestedness NODF (Almeida-Neto et al. 2008[19]) — sur 0-100. NODF > 60 = réseau emboîté (les voisins des espèces peu connectées sont un sous-ensemble des voisins des espèces très connectées) → résilience à perte aléatoire d'espèces documentée empiriquement.
Limite assumée. Ces métriques sont calculées sur le sous-graphe AFFICHÉ (cap UI = 31 nœuds depuis la refonte 2026-04-29, cf §8.6), pas sur le réseau écologique réel. Q et NODF dépendent de la taille du réseau — ne pas comparer directement entre espèces avec voisinages très différents.
8.10 Doctrine V2 — Bulles famille (refonte 2026-04-29)
La représentation du graphe ego-network a été simplifiée pour exposer uniquement les relations directes documentées, agrégées en bulles famille quand pertinent. Les inférences cascade (Pearman et al. 2008[32], Eklöf et al. 2016[33]) sont absorbées dans ces bulles, plus jamais affichées comme espèces individuelles.
Sélection côté serveur :
- Centre + max 15 bulles depth=1 sélectionnées par poids
- Pour chaque bulle, 1 partenaire depth=2 via algo intelligent
- Total max 31 nodes ; toggle profondeur 1↔2 client-side
- Pas d'espèces cascadées affichées individuellement (jamais)
- Pas de doublon — direct absorbé dans bulle famille n'apparaît pas en parallèle
8.10.1 Création des bulles famille — 4 cas
| Cas | Conditions famille X | Affichage |
|---|---|---|
| 1 | Cascade fact famille (matview) + N≥0 directs | Bulle famille (absorbe directs + cascade) |
| 2 | Toutes espèces famille en directes | Bulle famille (mention « tout doc ») |
| 3 | ≥3 directes même famille (no cascade fact) | Bulle famille (highlight les directs) |
| 4 | 1-2 directes (pas de fact famille) | Espèces individuelles (pas de bulle) |
La bulle famille absorbe TOUTES les espèces de la famille en relation avec le centre (directs + cascade-only). Au survol de la bulle, le tooltip liste les noms des espèces documentées (max 8). Click sur la bulle → mini-graphe d'exploration avec directs en tête (bordure dorée) + cascade en bas (opacité réduite).
8.10.2 Niveaux d'inférence et certainty pondéré
| Niveau | Origine du fact | Certainty |
|---|---|---|
| direct | Espèce ↔ espèce documentée individuellement (table relationships). | 1.0 |
| genus_expansion | Fact niveau genre cascadé sur les espèces du genre (TAXREF v18). | 0.7 |
| family_expansion | Fact niveau famille cascadé sur les espèces de la famille. | 0.5 |
| order_expansion | Fact niveau ordre cascadé (signal très bruité, exclu de l'affichage par défaut). | 0.3 |
La pondération certainty est multipliée à occurrence_count dans tous les calculs aval (S1 cascade, displayScore visibilité bulle, métriques réseau commune). Un fact famille cascadé compte deux fois moins qu'un fact direct à occurrence égale.
8.10.3 Algorithme partenaire depth=2
Pour chaque bulle (espèce ou famille) à depth=1, le serveur sélectionne au plus 1 partenaire depth=2 via une priorité à 3 niveaux :
- P1 — Commun ≥2 docs : candidat partenaire de ≥2 espèces documentées de la famille (= partenaire transversal). Pondéré par
common_countpuistotal_w. - P2 — Reliant : candidat partenaire de 1 doc + lien à au moins une autre bulle depth=1 (= reliant entre familles).
- P3 — Top sum_obs : meilleur partenaire d'un member quelconque par poids d'evidence brut. Garantit qu'une bulle famille avec ≥1 doc trouve presque toujours un partenaire à afficher.
Le partenaire trouvé est résolu à 3 cibles possibles :
- S'il est une espèce déjà top-15 → edge bulle↔species existante
- S'il est member d'une autre bulle famille top-15 → edge bulle↔autre_bulle (révèle la structure de food web)
- Sinon → nouveau node depth=2 + edge classique
Tooltip edge depth=2 famille : « X interagit avec N espèces de la famille Y » quand commonCount ≥ 2. Direction de la flèche calculée d'après le poids agrégé centre-as-source vs centre-as-target dans les rows underlying (acteur → cible).
8.10.4 Score de visibilité — Barrat strength sur evidence pondérée
Le ranking des nodes pour le cap de densité utilise une variante de la strength weighted définie par Barrat et al. (2004, PNAS[34]) : strength(i) = Σⱼ wᵢⱼ où le poids encode l'evidence réelle. Pour gérer l'hétérogénéité species/bulle sans favoriser arbitrairement, on définit un evidenceWeight commun :
evidenceWeight(node) = direct_weight + supra_weight × certainty
direct_weight = Σ obs des facts GloBI directs centre↔node (ou centre↔members
pour une bulle), niveau espèce
supra_weight = obs originale du fact niveau supra (famille/genre)
déduplique le JOIN matview cascade (sumOcc / memberCount)
certainty = 0.7 (genus_expansion) | 0.5 (family_expansion) | 1.0 (direct)- Cas A (cascade pure) :
direct_weight=0, score = supra × 0.5 (famille). Reflète honnêtement le signal — 1-2 facts famille = score réellement faible. La bulle reste affichée via le quota stratifié. - Cas B (visual direct) :
supra_weight=0, score = somme directe. La bulle hérite du poids cumulé des espèces documentées qu'elle agrège. - Cas C (mix) : addition des deux. Une bulle famille avec 4 espèces documentées + cascade hérite de l'evidence des 4 documentées + le supra ajusté.
Le cap de densité front applique des quotas stratifiés par type de node (75 % species + 25 % bulles) — pattern documenté par Elmqvist & Fekete (2010, IEEE TVCG[35]) pour éviter qu'une catégorie écrase l'autre quand les scores diffèrent en magnitude. LecenterId est toujours conservé. Les chaînes BFS (parent→enfant) sont préservées en passe finale pour ne jamais afficher d'orphelin.
Limite assumée. Une bulle Cas A avec 2940 espèces cascadées depuis 2 facts famille (ex. Cucullia verbasci → Ichneumonidae) aura un score très bas (~1) — même si elle représente potentiellement beaucoup d'espèces, l'evidence GloBI sous-jacente reste mince. La bulle peut être absente du graphe à densité faible. C'est cohérent avec la posture « ne pas surreprésenter le faible signal » ; le tooltip ⚠ informe l'utilisateur de la nature inférentielle pure quand la bulle est visible.
9. Graphe sous-réseau induit par commune
Sur la fiche de chaque commune, un sous-graphe interactif présente le tissu écologique local : les espèces présentes sur le territoire et leurs interactions documentées entre elles. Méthodologiquement distinct du graphe ego-network par espèce (§8) : pas de centre focal, c'est un sous-réseau induit. La question scientifique adressée n'est plus « avec qui interagit cette espèce ? » mais « à quoi ressemble le tissu écologique de cette commune, quelle est sa structure, sa richesse fonctionnelle, sa résilience apparente ? »
9.1 Score composite local pour la sélection
Sur les communes denses (Paris 7 429 espèces, max ~8 600 à Strasbourg ; chiffres prod 2026-05-03), il faut sélectionner les espèces les plus pertinentes à afficher dans le plafond UI (cap = 31 nœuds depuis la refonte 2026-04-29 : 1 centre + 15 bulles depth=1 + 15 partenaires depth=2 ; cf §8.6 et §8.10). Le tri parweighted_degree seul favorise les ubiquistes hyper-observées (mésange, merle, pipistrelle) au détriment des espèces fonctionnellement importantes ou patrimoniales. On utilise un score composite à 4 termes :
score_local(s, commune) =
1.0 × ln(1 + weighted_degree_local(s)) [connectivité réseau locale]
+ 1.5 × is_patrimoniale(s) [valeur conservation]
+ 1.0 × ln(1 + n_types_local(s)) [diversité fonctionnelle locale]
+ 0.8 × is_endemic_or_subendemic(s) [endémisme]Coefficients Type C Ontologia. Les poids 1.0 / 1.5 / 1.0 / 0.8 et le plancher MIN_PER_KINGDOM = 3sont des choix de design (cohérence narrative, garantie de représentation des règnes minoritaires), pas dérivés d'une optimisation publiée. La sélection top-100 par règne en pré-rank est un compromis perf/exhaustivité ; tout le reste (calcul exact, tri final, backbone, layout) opère sur les vraies stats matview.
Quotas proportionnels par règne avec plancherMIN_PER_KINGDOM = 3: un règne minoritaire (Bacteria, Protozoa, Chromista) reste représenté même quand Animalia domine 70 % de la commune. Cleanup orphan en passe finale (les nœuds sans arête visible dans le sous-graphe ne sont pas affichés).
Refonte V2 (2026-04-29) : la doctrine d'agrégation famille du graphe ego-network species (§8.10) est étendue au graphe commune. Concrètement : si ≥3 espèces de la commune partagent une même famille (ou si une cascade matview existe pour cette famille), elles sont absorbées dans une bulle famille unique « Famille (N esp.) ». Les espèces individuelles ne sont plus affichées en doublon. Au survol de la bulle, le tooltip liste les noms ; le mini-graphe modal permet l'exploration. Cohérence avec le graphe species (mêmes principes, contexte de tissu écologique commune).
9.2 Pré-rank EXACT via matview commune_species_local_stats
Le bottleneck du slow path live (filtres taxon/biome actifs, pas de cache) était le scan de toutes les arêtes locales — sur Paris ~200 000 arêtes scannées via r.source_id IN (scoped) AND r.target_id IN (scoped). Latence observée 920 ms-6 s.
Trois itérations approximatives ont échoué (audit empirique sur 8 communes-test) :
- Pré-rank par
n_partnersglobal national → 51-73 % de fidélité - +
observation_countlocal → 67-98 % (1/8 OK) - + stratification par règne → 36-98 % (1/8 OK)
Cause root. Aucun proxy ne capture le vraiweighted_degree_local. Bourdon des champs (wd=19 684 à Marseille) systématiquement exclu du pré-rank parce que ni son n_partners global (étouffé par Apis mellifera) ni sonobservation_count (étouffé par les oiseaux ubiquistes) ne le placent dans le top.
Approche retenue : pré-calcul de la VRAIE valeur. La table commune_species_local_stats stocke pour chaque paire (commune, species) : weighted_degree_local, degree_local, n_types_local. Le slow path fait alors un top-100 par règne via lookup indexé (~5 ms) → 800 candidats max → edges entre eux (~5-15k au lieu de 200k) → tri par les vraies stats matview.
Garantie 100 % fidélité validée en SQL pur sur 8 communes-test (Paris, Marseille, Hyères, Florac, Briançon, Lacaze, Camargue, Saint-Martin-Vésubie) : 60/60 espèces du top identiques à la query legacy sur chaque commune. Speedup ×1.2 à ×6.7 selon densité.
9.3 Squelette structurel — disparity filter (Serrano 2009)
Sur les communes riches (Paris ~250 arêtes dans le top-60, Camargue ~670), afficher toutes les arêtes documentées produit un hairball illisible : les recouvrements perceptuels sont déterminés par le ratio croisements/arêtes, invariant sous zoom. Aucun calibrage de layout ne le résout — la cause est la densité d'information elle-même.
Méthode retenue : extraction du backbone par disparity filter de Serrano, Boguñá & Vespignani (2009)[24], méthode standard d'analyse des réseaux pondérés. Pour chaque arête (i, j) de poids wij dans le sous-graphe top-N :
p_ij^i = w_ij / Σ_k w_ik [poids relatif de l'arête sur i]
α_ij^i = (1 - p_ij^i)^(k_i - 1) [significativité vue de i, k_i = degree]
même calcul pour α_ij^j vu de j
→ on conserve l'arête si min(α_ij^i, α_ij^j) < α_threshold
(convention OR — Bascompte & Jordano 2003 [46] : retient les arêtes
structurellement signifiantes pour AU MOINS un endpoint)Lecture : on conserve l'arête « si elle porte plus de poids qu'attendu sous l'hypothèse nulle d'une répartition uniforme des interactions sur les partenaires de chaque espèce ». Les arêtes redondantes des hubs (« le merle mange un peu de tout ») sont élaguées ; les liens forts spécifiques (« la chouette mange surtout des micromammifères ») sont préservés ; les arêtes uniques des espèces feuilles (k=1) sont gardées par convention (pas de redondance possible avec un seul partenaire).
Choix du seuil α = 0.2. Calibré par audit visuel sur 3 régimes contrastés : Paris (dense urbain), Lacaze (sparse rural), Saintes-Maries-de-la-Mer (Camargue, patrim-riche). Trois valeurs testées (0.1 / 0.2 / 0.3) :
- α=0.1 trop strict — fragmente Paris en 5-6 sous-graphes isolés, perd la narration globale
- α=0.2 retenu — sur Paris : −75 % d'arêtes, structure macroscopique préservée, sous-clusters identifiables (granivores, pollinisateurs, prédateurs)
- α=0.3 trop permissif — le voile rouge des inter-prédations corvidés/grives réapparaît
Validation patrimoniales : sur Saintes-Maries, 38/53 patrimoniales conservées (65 % du graphe), 5/6 pollinisateurs structurants maintenus.
Décision méthodologique forte. Pas de toggle « voir toutes les arêtes documentées » ni de paramètre URL pour désactiver le filtre. Le graphe affiché EST le tissu écologique au sens du squelette signifiant : exposer la version brute aux côtés créerait deux vérités contradictoires. Les chercheurs ayant besoin de l'intégralité des arêtes (~250-700 par commune dense) peuvent requêter directement la table relationships.
Application post top-N : le filtre s'applique sur le sous-graphe affiché (pas sur le réseau commune entier qui sert aux métriques systémiques §9.5). L'unité d'analyse reste la sélection top-N par score composite.
9.4 Layout fcose et aération visuelle
Cytoscape utilise par défaut un layoutconcentric calibré sur la profondeur BFS — adapté au graphe ego-network species (§8) où le centre et les anneaux sont clairement définis. Pour le graphe commune, tous les nœuds sont à profondeur 0 → empilement central inutilisable.
Layout retenu : fcose (force-directed, Yifan Hu modifié) avec paramètres calibrés post-recalib 2026-04-27 :
idealEdgeLength : 140-240 px (dynamique selon occurrence_count log) nodeRepulsion : 18 000 (vs 4 500 par défaut) edgeElasticity : 0.45 gravity : 0.15 (faible, pour éviter empilement central) gravityRangeCompound : 1.5 randomize : true (évite spectral pre-layout dégénéré) tile : true (sépare les composantes faiblement connectées) animate : false (instant placement)
Calibrage post backbone (§9.3) : avec ~25-35 % des arêtes conservées, le layout peut respirer là où l'ancien jeu (randomize:false,tile:false,idealEdgeLength plancher 60) produisait des empilements en diagonale et des satellites flottants. Tailles de nœuds en échelle log [22-70 px] sur le degré local. Edge dedup par paire : si la même paire (A, B) a plusieurs types d'interactions documentés, on affiche une seule arête avec le type dominant (occurrence_count max), tooltip révèle les autres types.
9.5 Métriques systémiques + comparaison nationale
Une matview dédiéecommune_network_stats pré-calcule pour chaque commune les métriques systémiques sur le réseau LOCAL COMPLET (toutes espèces, toutes interactions documentées entre elles), pas sur le sous-graphe top-N affiché. Décision méthodologique forte :
- Sous-graphe affiché = sélection volontairement réduite (cap 31 nœuds depuis 2026-04-29) → biais énorme entre Paris (31/7 429 ≈ 0,4 %) et Lacaze (31/557 ≈ 6 %) → métriques non comparables nationalement sur le sous-graphe affiché.
- Réseau local complet = photographie de la réalité écologique connue → comparabilité nationale légitime.
Métriques calculées et exposées :
- S = nombre d'espèces locales, L = nombre d'interactions documentées entre elles
- Connectance C = L / (S × (S-1)) — densité d'interactions normalisée [0, 1][17]
- n_types = nombre de types d'interactions distincts présents (sur 13 possibles)
- biome dominant = mode des affiliations EUNIS niveau 1 des espèces locales (A marin → J urbain)
- percentile rank national et stratifié par biome sur la connectance, la diversité fonctionnelle et le patrimoine
9.6 Phrase narrative générée
Sous le panneau d'indicateurs, une phrase pré-générée serveur synthétise la fiche écologique de la commune. Le percentile de comparaison utilise n_patrim_total (cohérent : Camargue 99.8 %, Paris 100 %, Lacaze 60.6 %) — pas la connectance brute qui décroît mécaniquement avec la taille du réseau (Dunne et al. 2002[17] ont rejeté la constant connectance hypothesis, donc comparer C entre réseaux de tailles différentes est invalide sans normalisation).
Exemple Camargue (Saintes-Maries-de-la-Mer) :
« À Saintes-Maries-de-la-Mer, 53 espèces sont reliées par 670 interactions documentées, dont 42 patrimoniales sur les 1 567 recensées localement — un patrimoine plus riche que 100 % des communes françaises. Le tissu écologique local couvre 12/13 types d'interactions. »
9.7 Mode expert — modularité & nestedness
Mêmes métriques avancées que le graphe species (§8.9), calculées côté client (~50 ms) sur le sous-graphe affiché : modularité Q (Newman 2006[21] via partition Louvain[22]), nombre de communautés détectées, nestedness NODF (Almeida-Neto et al. 2008[19]). Optionnellement, un mode « Grouper par communautés » réorganise le layout pour que les nœuds d'une même partition soient spatialement proches — fait émerger les guildes écologiques (cluster plantes + pollinisateurs, cluster prédateurs + proies).
9.8 Tables sources
| Table | Volume | Rôle |
|---|---|---|
| commune_species | ~19 M | Présence (commune × species), source du scoping |
| relationships | ~1 M | Source brute des arêtes, validated=true |
| species_patrimonial_flag | 108 568 | Flag patrimonial + classe — bordure visuelle |
| commune_species_local_stats | ~12-15 M | Pré-rank EXACT du slow path : weighted_degree_local par (commune, species) |
| commune_network_stats | 34 740 | Métriques systémiques par commune + percentile rank national/biome |
| commune_graph_default_cache | 34 740 | Cache pré-calculé du graphe par défaut, refresh post-import |
| species_habitats | 63 162 | EUNIS / CORINE — détermine le biome dominant de la commune |
9.9 Limites spécifiques au graphe commune
- Biais de co-occurrence. Une interaction est affichée si les deux espèces sont dans
commune_species. Or cette table est dérivée d'observations agrégées : une espèce vue 1 fois en 1980 compte comme « présente » autant qu'une espèce vue 10 000 fois en 2025. - Biais d'inventaire géographique. Paris a 6 609 espèces recensées parce qu'il est massivement inventorié. Une commune rurale peut avoir 500 espèces officielles mais 1 500 réellement présentes. La connectance affichée est une photographie de la connaissance, pas de la réalité écologique.
- Sélection cap 31 nœuds. Sur Paris on perd plus de 99 % de la richesse affichable (31/6 609). Le score composite privilégie la pertinence écologique mais la sélection reste arbitraire : le sous-graphe affiché est un échantillon, pas le réseau réel.
- Métriques calculées sur le réseau LOCAL COMPLET (S, L, C, percentiles), pas sur le sous-graphe affiché. Ne pas confondre les deux ordres de grandeur dans la lecture.
- Connectance instable pour S petit. Pour S < 30, C est statistiquement bruitée. Affichage avec avertissement si
s_total < 30. - Backbone partiel = perte d'information. Le filtre Serrano (§9.3) avec α=0.2 retire ~65-75 % des arêtes du sous-graphe top-N. Les arêtes retirées existent dans les données brutes (table
relationships) — le graphe affiché est volontairement le squelette structurel, pas l'exhaustif. Compromis assumé pour la lisibilité (Tufte 1983[47] sur le data-ink ratio ; Purchase 2002[48] sur les croisements d'arêtes comme premier obstacle à la lecture des graphes).
9.10 Références scientifiques
Méthodologie élaborée à partir des fondations théoriques de Bascompte & Jordano 2007[16], Dunne et al. 2002[17] (rejet de la constant connectance hypothesis), des métriques de Bersier et al. 2002[18] et Almeida-Neto et al. 2008[19], de la modularité de Newman 2006[21] via Louvain (Blondel et al. 2008[22]), de la robustesse des réseaux écologiques de Pocock et al. 2012[23], et de l'extraction de backbone par disparity filter de Serrano et al. 2009[24]. Cf. bibliographie §19 pour les références complètes.
10. Limites & biais assumés
Aucun dispositif de correction totale n'existe. Les biais résiduels ci-dessous sont documentés pour que l'utilisateur scientifique puisse interpréter les indicateurs avec prudence.
- Effort d'observation inégal spatialement (Boakes 2010[9], Isaac & Pocock 2015[8]) : sur-représentation péri-urbaine, côtière, Sud-Est. Les communes rurales peu visitées apparaissent artificiellement pauvres. Le bonus spatial ICO v2.1 atténue mais n'élimine pas.
- Biais horaire : espèces diurnes sur-observées vs nocturnes (rapaces nocturnes, micromammifères, amphibiens crépusculaires). Le
detection_ratene corrige que l'axe temporel mensuel, pas l'axe horaire. - Biais taxonomique : vertébrés charismatiques (oiseaux, mammifères, rhopalocères) sur-observés vs hyménoptères, diptères, mousses, champignons, algues. Un indicateur de diversité fondé sur GBIF en France reflète en premier lieu la diversité des groupes documentés.
- Observations opportunistes ≠ protocole standardisé : GBIF agrège des Atlas, des Vigie-Nature, des iNaturalist, des SINP, sans effort standardisé. Les tendances temporelles (dimension « Stabilité » de l'ICO) sont indicatives — pas des vraies courbes d'abondance.
- ZNIEFF > valeur biologique locale : un ZNIEFF de type I n'est pas un statut réglementaire. Son inclusion dans l'ICO v2.1 bonus (poids 0.25) reflète son intensité biologique présumée (critères d'espèces déterminantes, Touroult 2022[4]), pas une protection effective. Les gestionnaires régionaux actualisent les périmètres tous les 10-20 ans avec un lag d'observation.
- Antériorité des observations : le corpus de 183,5 M observations inclut les cochages historiques des collections muséales. La date affichée sur la fiche espèce (calendrier phénologique) reflète l'ensemble du corpus, pas uniquement la période récente.
- Colonne
commune_inseeNULL sur observations : bug d'import historique. La liaison observation ↔ commune passe par le précomputécommune_species(spatial join déjà fait) ; conséquence :species_phenology.n_communes = 0(feature dégradée, à corriger dans un futur import re-propagantcommune_inseeviaST_Intersects).
10.1 Biais de la littérature des interactions (GloBI)
GloBI agrège la littérature scientifique mondiale sur les interactions inter-espèces. Cette littérature est massivement polarisée par les enjeux économiques et sanitaires des décennies passées (Poisot et al. 2021[20]) :
- Sur-représentation parasitism / pathogen sur les mammifères (recherche pharmaceutique sur les zoonoses, vecteurs, réservoirs). Concrètement : un renard roux affichera une dominance d'arêtes « parasitism / pathogen » tirée de centaines d'études vétérinaires et épidémiologiques, alors que ses interactions trophiques mutualistes ou ses commensalismes sont peu cités.
- Sur-représentation herbivory / phytophagy sur les insectes (entomologie agronomique, lutte biologique). Les Lépidoptères, certains Coléoptères et Hémiptères ont des centaines d'études de plantes hôtes liées à des cultures, sans contrepartie sur les interactions non-agricoles.
- Sous-représentation mutualisms / commensalisms / interactions micro-faune (réseaux trophiques sols, microbiote intestinal, symbioses fongiques non-mycorhiziennes). Pas par absence biologique mais par sous-publication.
Manifestation visuelle. Sur le graphe espèce d'un mammifère ou le graphe commune en zone agricole, les arêtes parasitism (orange en pointillés) et herbivory (vert) dominent visuellement — c'est un artefact du corpus, pas une description de la réalité écologique locale.
Pourquoi on ne corrige pas mathématiquement. Pondérer les arêtes par occurrence_count brute (notre approche actuelle) reproduit le biais. Une pondération qualitative « 1 étude = 1 occurrence » supprimerait l'information quantitative légitime des analyses de régime alimentaire ou de réseaux trophiques quantifiés. Une transformation log-uniforme casserait l'interprétation statistique du disparity filter de Serrano (§9.3) qui suppose un null model uniforme sur les poids bruts. La correction propre nécessiterait des metadata study-level que le payload GloBI public n'expose pas dans la version qu'on ingère. Faute de levier méthodologique défendable, on documente honnêtement le biais plutôt que de prétendre le corriger par une heuristique fragile.
Conseil de lecture. Sur les hubs mammifères et les insectes phytophages d'agrosystèmes, lire les arêtes parasitism / herbivory relativement à ce contexte de littérature, pas comme une mesure d'intensité écologique brute. Les arêtes mutualistes (pollinisation, symbiose) sont en revanche probablement sous-comptées par rapport à leur réalité biologique.
11. Laboratoire écologique (/labo)
Sept outils exploratoires construits sur des méthodes citées et un schéma DB documenté. Aucun n'est une prédiction : ce sont des thought experiments structurels à visée pédagogique, naturaliste et décisionnelle. Chaque résultat est présenté en trois temps (récap humain, tuiles-clés interprétées, mode expert dépliable avec données brutes + sources + exports). Chaque outil expose en outre son propre bloc méthodologie visible par défaut avec la formule, les justifications de coefficients/seuils, et un compteur de citations + limites. Détails des limites et refus assumés sur la page /labo/limites.
11.1 Cascade de dépendance (S1)
BFS pondéré sur le sous-graphe communal complet (pas de backbone : on ne veut pas exclure les espèces aux interactions faibles). À chaque round, calcul de la fraction de poids d'interactions perdue par chaque voisin de l'ensemble déjà retiré. Si fraction ≥ seuil → l'espèce est marquée perdue au round suivant. Seuil tiré aléatoirement ~ U(0.65, 0.85) par run Monte-Carlo (1000 itérations par défaut). Plage choisie par Ontologia (Type C) pour encadrer la zone d'effondrement secondaire rapportée dans la littérature des réseaux trophiques (Memmott et al. 2004[25]— chute de robustesse au-delà de la perte de la plupart des espèces les plus connectées ; Curtsdotter et al. 2011[31] — sensibilité fortement dépendante de la stratégie de retrait et des traits). Pour chaque espèce, probabilité d'effondrement et IC Wilson 95 %.
Sortie : directImpact(n partenaires + distribution sensibilité 4 catégories ≥80/50-80/20-50/<20 %) + cascadeChain.rounds (proba effondrement par espèce et par vague) + highestRiskPartner(espèce nommée la plus à risque, avec sa proba R1, exposée en tuile dédiée). Citations : Serrano et al. 2009[24], Curtsdotter et al. 2011[31], Memmott et al. 2004[25].
11.2 Comparer A vs B — espèces ou territoires (S2 + S3)
Page unique /labo/comparer avec wizard à 4 branches : Plantes, Animaux, Champignons, Territoires. La comparaison cross-règne est volontairement bloquée — les métriques d'un arbre (~234 partenaires GloBI, hub par construction) et d'un papillon (~45, spécialiste par position trophique) ne se comparent pas, même quand correctement calculées.
Branche Territoires (anciennement S2) : lecture decommune_network_stats + agrégation par règne. Indices de similarité : Jaccard sur les sets d'espèces (Jaccard 1912), Bray-Curtis sur les abondances observées (Bray & Curtis 1957[26]). Composition par règne en barres empilées côte à côte pour 2 ou 3 communes.
Branches Plantes / Animaux / Champignons (anciennement S3) : profils d'interactions par type (predation, pollination, parasitism, etc.) + set de partenaires uniques à A / uniques à B / partagés. Indice de similarité de niche = Jaccard sur les sets de partenaires (J = |A ∩ B| / |A ∪ B|), exposé explicitement avec ratios partiels |A∩B|/|A| et |A∩B|/|B|. Optionnellement scopé à une commune.
Verdict directionnel de plantation (cas spécial : 2 plantes + commune) : score = ln(1 + wd_local) + 0.5·ln(1 + n_types_local) + 1.5·patrim − 2·EEE_UE. Coefficients Type C Ontologia documentés (cf. §11.7). Cas EEE asymétrique → la non-EEE gagne (poids quasi-veto, règlement UE 1143/2014). Cas 2 EEE → tie « ne planter aucune ». Sinon : tie si |scoreA − scoreB| < 0.5 ET ratio brut wdA/wdB ∈ [0.7, 1.3] ; au-delà → la plante au score le plus élevé est privilégiée. Le seuil 0.5 et les bornes [0.7, 1.3] sont des choix Type C Ontologia (zone de match nul). Disclaimer obligatoire : le verdict n'inclut pas l'ombrage, racines invasives, allergie pollens, climat/sol/exposition, disponibilité pépinière.
11.3 Espèces parapluie (S4)
Maximum Coverage Problem (Nemhauser et al. 1978[27], algorithme greedy avec garantie d'approximation 1−1/e ≈ 63%). À chaque tour, sélection de l'espèce qui couvre le plus d'arêtes restantes du sous-graphe backbone. Boost ×1.5 sur les espèces patrimoniales (choix Type C Ontologia) pour aligner le classement sur la pondération sévérité UICN du Red List Index (Butchart et al. 2007[14]).
Baseline aléatoire Monte-Carlo (100 runs Fisher-Yates) calculée en parallèle pour quantifier l'avantage de l'algorithme greedy : médiane + IQR du nombre d'espèces nécessaires au tirage aléatoire pour atteindre la même couverture, ratio greedyVsRandom exposé en tuile (« 4× plus efficace ») et courbe moyenne aléatoire superposée à la courbe greedy. Roberge & Angelstam 2004[28], Caro 2010[45].
11.4 Robustesse R-curve (S5)
Méthode Memmott / Pocock sur le sous-graphe communal (top-200 par weighted_degree_local après backbone). À chaque pas k, retrait d'une espèce selon une stratégie ; comptage des espèces secondairement perdues (= toutes leurs voisins backbone retirés). 4 stratégies : aléatoire (1000 MC, IC 95 % par point en enveloppe), ciblée degré, ciblée patrim, ciblée combinée (degré × patrim). Indice R = 1 − aire normalisée sous la courbe (Burgos et al. 2007[52]). Ratio fragilité aux hubs = R_aléatoire / R_ciblé_degré, exposé en tuile (>1.5× = tissu dépend de hubs structurants ; ~1.0 = tissu homogène). Pocock et al. 2012[23], Memmott et al. 2004[25].
11.5 Partenaires absents — gap analysis (S6)
Pour chaque espèce phare de la commune (top par weighted_degree_local), extraction de ses top-K partenaires nationaux les plus documentés (SUM(occurrence_count)), puis flag présence locale dérivé de commune_species. Classification heuristique d'absence Type C Ontologia en 4 niveaux selon sumOccurrenceNational : > 50k obs = absence probable réelle ; 10-50k = à vérifier ; 1-10k = sous-prospection possible ; < 1k = documentation faible. Les bornes 50k / 10k / 1k sont des coupures éditoriales calibrées sur la distribution des occurrences GBIF FR, pas dérivées d'un papier. Sortie descriptive — on documente le décalage national-local sans préjuger de la cause biologique. Cf. biais des bases d'interactions Poisot et al. 2021[20].
11.6 Profil pollinisateur d'un milieu (S7)
Filtre des espèces locales par habitat EUNIS niveau 1 (préfixe viaspecies_habitats ×habitat_ref) → plantes du biome cible. Croisement avec relationships type IN (pollination, visits) → top pollinisateurs (Hymenoptera/Lepidoptera/ Diptera/Coleoptera) et plantes-hôtes parSUM(occurrence_count).
Matrice bipartite occurrence(pollinisateur × plante) sur les top 15 × 15 (cap UI Type C Ontologia, lisibilité humaine), exposée en heatmap normalisée log(1+occ)/max_log dans le mode expert. Outil canonique en écologie des réseaux mutualistes (Bascompte & Jordano 2007[16]) — permet de visualiser nestedness, modularité, et d'identifier les hubs vs les spécialistes.
Biais critique surfacé : le tri par occurrence_count favorise systématiquement les pollinisateurs commerciaux (Apis mellifera, Bombus terrestris) et plantes mellifères agricoles. Vázquez & Aizen 2003[29] documentent ce biais d'échantillonnage taxonomique. Un bandeau ⚠️ visible directement dans le résultat (pas dans le mode expert) prévient l'utilisateur avant qu'il regarde le top 10. Bartomeus et al. 2018[30] ajoutent sur les limites de prédiction des traits pollinisateurs.
11.7 Recommandation plantation (S8)
Plantes locales (commune_species ∩ kingdom=Plantae) du biome cible (filtre EUNIS niveau 1 surspecies_habitats) scorées par valeur biodiversité : score = ln(1 + wd_local) + 0.5·ln(1 + n_types_local) + 1.5·patrimonial − 2·EEE_UE. Exclusion automatique des espèces envahissantes règlementées par le Règlement UE 1143/2014.
Justification des coefficients (heuristiques, pas dérivés d'un papier) : ln() atténue la domination des hubs hyper-documentés (loi de puissance typique des réseaux écologiques, Bascompte & Jordano 2007) ; poids 0.5 sur n_types = demi-poids car corrélé à wd_local (anti double-comptage) ; poids 1.5 patrim = bonus Type C Ontologia aligné sur la pondération sévérité UICN du Red List Index (Butchart 2007[14]) ; poids -2 EEE = quasi-veto.
Analyse de sensibilité aux coefficients exposée directement dans le résultat : pour 4 perturbations indépendantes (±50 % sur n_types et patrim), recalcul du ranking et intersection top-5. Sortie « X/5 plantes restent dans le top sous toutes les perturbations » — quantifie la robustesse du classement au choix des poids. Pratique standard en biologie de la conservation multi-critères.
11.8 Architecture de présentation (commune à tous les outils)
Chaque résultat retourne 5 blocs structurés : narrative (récap auto-généré sans LLM, headline + insights), keyTiles (4-6 cartes interprétées avec tone good/neutral/warn/bad), featuredSpecies (photos Wikimedia + rôle), result (données brutes complètes), methodology (méthode + justifications spécifiques + sources DB + citations + limites).
Frontend : MethodSummary visible par défaut au-dessus du mode expert (méthode + rationales en encarts colorés + lien ancre vers les détails techniques). BiasWarning en bandeau ⚠️ amber pour les biais critiques (S7 occurrence_count). ExpertMode repliable contient données brutes, exports JSON, sources techniques (matviews), citations complètes, liste des limites.
11.9 Cache et performance
Tous les endpoints exposent Cache-Control: public, max-age=3600, stale-while-revalidate=86400. Scénarios à coût élevé (S1 cascade, S5 robustness, S4 parapluie avec baseline MC) bénéficient d'un LRU process-level (1000 entrées, TTL 1h) qui absorbe les rafales bots/users sur la même URL. Scénarios légers (S2/S3 comparer, S6, S7, S8) sont calculés à la volée (≤ 500 ms par requête).
11.10 Refus assumés (rappel)
Pas de SDM (Species Distribution Modeling) sans bioclimat ingéré, pas de dynamique de population (PVA), pas d'adaptation climatique, pas de toxicologie, pas de corridors écologiques. Détails et justifications :/labo/limites.
12. Profil environnemental commune (13 sources couplées au polygone communal)
Treize sources scientifiques externes ont été couplées aux 34 879 polygones communaux de France métropolitaine pour produire un profil environnemental complet par commune, exposé en 4 cartes thématiques sur la fiche /commune/[slug] (Climat / Sol & géologie / Paysage / Pression).
Aucun de ces signaux n'est intégré au score composite ICO v2.1 (cf §17) — chaque dimension est exposée brute pour préserver la rigueur de l'ICO. Les sources et licences exactes sont sur la page /sources.
12.1 Méthodes de couplage
- Zonal statistics raster (rasterio.mask) sur le polygone communal : Köppen-Geiger (mode), CHELSA bio1-19 (mean), SAFRAN indicateurs (mean), DRIAS GWL20 (mean), Hansen GFC (mean), VIIRS Black Marble (mean/min/max), Copernicus DEM 30 m (mean/min/max/std), CORINE Land Cover (categorical zonal), SoilGrids 2.0 (mean après reproject 4326 → Goode-Homolosine).
- Spatial join PostGIS (ST_Intersection + ST_Length / ST_Area) : BRGM lithologie 1M (vector polygon clipping), OSM France Geofabrik (osmium tags-filter puis chunked par dépt), zones protégées INPN.
- Crosswalk hexasmal LaPoste : BNV-D pesticides — achats par CP agrégés à la commune via mapping CP↔INSEE avec roll-down arrondissement (Paris 75101→75056, Marseille 13201→13055, Lyon 69381→69123).
- Spatial proximity : Naïades qualité eau — stations contenues dans le polygone communal ou à proximité immédiate ; agrégation par médiane des 5 dernières années (2020-2025).
12.2 Qualifiers textuels (Type C documentés)
Aucun texte n'est généré par LLM. Les qualifiers utilisés dans l'UI sont des templates fixes adossés à la littérature :
- Étages altitudinaux : seuils Ozenda 1985[43] (haute montagne ≥1500 m, moyenne ≥800, piémont ≥400, plaine ≥100, plaine littorale <100).
- pH du sol : très acide < 5,0 / acide 5,0-6,0 / légèrement acide 6,0-7,0 / neutre 7,0-7,5 / basique 7,5-8,5 / très basique ≥ 8,5 (USDA Soil Survey Manual[53]).
- Texture USDA : argileux ≥ 40 % argile ; limono-argileux ≥ 27 % argile + sable < 45 % ; sableux ≥ 70 % sable ; limono-sableux ≥ 50 % sable ; sinon limoneux. Version simplifiée du diagramme USDA[53] standard.
- SEQ-Eau : 5 classes officielles DCE 2000/60/CE (1 très bonne → 5 mauvaise) ; règle « maillon faible » (qualité = paramètre le plus dégradé) sur les 4 paramètres SANDRE clés (NO₃ 1340, PO₄ 1433, NH₄ 1335, O₂ 1311).
- Pollution lumineuse : seuils Type C choisis par Ontologia sur la radiance VIIRS Day/Night Band, inspirés de la cartographie globale de la pollution lumineuse (Falchi et al. 2016[42]) — rural sombre < 5 nW/cm²/sr, périurbain 5-25, urbain 25-80, hyperurbain ≥ 80. Falchi 2016 utilise lui-même des unités astronomiques (mcd/m²) ; les coupures sur l'échelle VIIRS DNB en nW/cm²/sr sont des choix Ontologia.
12.3 Limites assumées
- BNV-D pesticides : agrégés au CP du distributeur, pas du lieu d'usage. Documenté par les producteurs (OFB, Eaufrance). Paris affiche 4 515 kg/an de CMR alors que la commune est urbaine pure — c'est un signal de DISTRIBUTION, pas d'USAGE. À interpréter avec précaution.
- Naïades : ~14 % des communes seulement ont une station, biais de couverture systémique.
- VIIRS Black Marble : sature au-dessus de ~80 nW/cm²/sr (Elvidge 2021) — les hyper-centres urbains possiblement sous-estimés.
- SoilGrids 2.0 : profondeur 0-5 cm uniquement — pas de profil pédologique complet pour les racines profondes.
- BRGM lithologie 1M : résolution faible (1/1 000 000) — masque les hétérogénéités locales.
- CORINE LC : 100 m de résolution — sous-estime les patches naturels < 1 ha (haies, mares, lisières).
13. Agrégats territoriaux (département / région)
Les pages /departements/[slug] et /regions/[slug]exposent une vue d'ensemble du profil environnemental basée sur des agrégations matérialisées (matviews PostgreSQL) des 35 k communes.
13.1 Méthodes d'agrégation par type de variable
- Variables continues (T, précip, pH, % land cover, SOC, etc.) : moyenne pondérée par superficie communale(poids =
area_km2). Permet de représenter un département où une grande commune rurale pèse plus qu'une petite commune urbaine. - Variables catégoriques (classe Köppen, lithologie dominante) : modalité couvrant la plus grande superficie cumulée (mode pondéré par area).
- Cumuls absolus (pesticides kg/an, OSM totaux km routes/haies/cours d'eau, lieux-dits) : somme brute.
- Densités (km de routes / km² territoire) : ratio total_km / total_area_km2 (pondération naturelle).
- Qualité eau Naïades : moyenne pondérée par
n_analyses(qualité de la mesure, pas de la superficie) — préférable car couverture spatiale variable. - Flags géologiques (calcicole, silicicole) : % de superficie couverte par chaque type — proxy de la diversité géologique du territoire.
13.2 Limites Type C documentées
Une moyenne climatique départementale n'est pas la « vraie » moyenne spatiale du département (qui se calculerait sur le polygone du dépt directement) ; c'est une moyenne pondérée des communes. La différence est marginale en pratique car les communes couvrent ~100 % du territoire départemental — vérifié par échantillonnage sur 10 départements ref.
14. Records de France (top/bottom 10 par indicateur)
La page /records propose 12+ classements top-10 communes par indicateur environnemental. Type A pur : aucune pondération éditoriale, chaque classement est la lecture brute (ORDER BY DESC/ASC) de la table d'enrichissement correspondante.
Filtre de fiabilité appliqué uniquement pour la qualité d'eau Naïades : on ne classe que les communes avec ≥ 50 analyses physico-chimiques (n_analyses ≥ 50) pour éviter les classements fondés sur 1-2 mesures isolées qui pourraient être atypiques.
15. Filtres écologiques (chips presets)
Sur les pages /communes et /especes, des chips presets permettent de filtrer rapidement par profil écologique. Combinables en intersection AND. Tous les seuils sont Type C (choix design transparent) adossés à des doctrines scientifiques publiées.
15.1 Seuils chips communes
Tous les seuils ci-dessous sont Type C (choix design Ontologia). Quand une référence est citée, elle inspire le principe ou fournit une échelle proche, mais la coupure numérique elle-même est éditoriale. Les chips sont conçues pour des explorations qualitatives, pas pour servir de classification réglementaire.
- Climat : classification Köppen-Trewartha (Trewartha & Horn 1980[51]) — Cfb océanique, Cfa subtropical humide, Csa/Csb méditerranéen, D… continental, E… alpin.
- Calcicole / silicicole : flag dérivé de la lithologie BRGM dominante (calcaires, marnes, craie → calcicole ; granites, gneiss, schistes → silicicole).
- Haute montagne : altitude moyenne DEM ≥ 1 500 m (étage subalpin Ozenda 1985[43]).
- Plaine : altitude moyenne < 200 m (Type C — Ozenda 1985 définit la plaine ≥ 100 m sans plafond explicite ; le 200 m est une coupure éditoriale Ontologia pour discriminer plaine vs collinéen).
- Très naturel : Corine LC forêt + naturel ≥ 70 % (seuil Type C Ontologia).
- Très urbain : Corine LC urbain ≥ 50 % (seuil Type C Ontologia).
- Forêt dense : Hansen forest_pct_2000 ≥ 50 % (seuil Type C Ontologia, pas de canon publié sur la coupure « dense » pour cette couche).
- Bocage dense : densité OSM haies ≥ 0,5 km/km² — seuil Type C Ontologia, échelle inspirée des études sur le bocage breton (Burel 1992, Landscape Ecology) qui comparent des sites de densités contrastées sans publier de seuil normatif.
- Ciel sombre : VIIRS radiance < 5 nW/cm²/sr — seuil Type C Ontologia (cf §12.2), aligné avec les zones rurales préservées sur les cartes globales de pollution lumineuse (Falchi et al. 2016[42]).
- Eau classe ≤ 2 / ≥ 4 : SEQ-Eau officielle DCE 2000/60/CE (5 classes réglementaires européennes).
- Pesticides CMR élevés : ≥ 1 000 kg/an de CMR achetés via le CP (seuil Type C Ontologia ; à interpréter avec précaution, biais distributeur §12.3).
- Canicule 2050 : DRIAS days_tx_ge35 ≥ 15 j/an (seuil Type C Ontologia ; ordre de grandeur ~3× la moyenne nationale 1991-2020 d'après la climatologie SAFRAN, à valider en base).
- Réchauffement fort : Δ T 2050 (DRIAS GWL20 − SAFRAN 1991-2020) ≥ 3 °C — seuil Type C Ontologia, supérieur au réchauffement médian France projeté par DRIAS-2020 TRACC à GWL20.
15.2 Seuils chips espèces
- EIVE (plantes, échelle 0-10) — seuils Type C Ontologia (≥ 7 pour strict ; ≤ 3 pour strict opposé), inspirés de l'usage classique des indicateurs Ellenberg en bioindication (Diekmann 2003[44]) sur le système harmonisé EIVE 1.0 (Dengler et al. 2023). Les coupures précises 7/3 sont des choix éditoriaux Ontologia.
- CSR Pierce 2017 : stratégie dominante prise depuis
csr_strategy(C, S, R, ou CSR généraliste). - GlobTherm Bennett 2018 : Tmax ≥ 40 °C (espèces thermophiles strictes) ; Tmin ≤ −10 °C (espèces gélives) — seuils Type C Ontologia, calibrés sur les distributions GlobTherm européennes pour discriminer les extrêmes des modérés. Ne sont pas des seuils physiologiques publiés.
- Statut origine :
invasion_statusCSR Pierce — native vs naturalised/alien/invasive. - Audio disponible : ≥ 1 captation Xeno-canto qualité A ou B sur la fiche.
16. Enrichissements fiche espèce (audio + altitude + viz écologiques)
16.1 Bloc « Écoutez son chant » (Xeno-canto)
Captations audio hot-linkées depuis le CDN Xeno-canto (aucune donnée audio stockée localement). Filtre à l'import : qualité A ou B uniquement (échelle XC : A excellente, B bonne, C moyenne, D dégradée, E inaudible). Top 12 par espèce ordonnés par diversité de type d'abord (1 chant + 1 cri + 1 écholocation + 1 alarme + …) puis par qualité décroissante au sein de chaque type. Attribution Creative Commons individuelle par captation visible dans l'UI (auteur, licence CC-BY-NC-SA / CC-BY / etc., date, lieu, lien retour XC).
16.2 Bloc « Enveloppe altitudinale »
Matview species_altitude_envelope : pour chaque espèce, jointure commune_species × commune_landscape_relief→ percentile rank des altitudes communales pondéré par observations. Renvoie min, max, typique (médiane), p10, p90, n_communes, n_observations. Filtre minimum 3 communes contributrices (sinon valeurs non robustes).
Type B+C — l'altitude moyenne par commune (Copernicus DEM 30 m) n'est pas l'altitude exacte de chaque observation. Approximation acceptable au niveau enveloppe écologique mais pas une mesure précise de la station d'observation. Reflète la niche réalisée OBSERVÉE (biais d'effort GBIF), pas la niche potentielle théorique.
16.3 Bloc « Niche thermique » (GlobTherm + Logghe)
Refondu le 2026-05-02 après audit. Le bloc affiche deux types de mesures complémentaires :
- GlobTherm (Bennett et al. 2018, Scientific Data 5:180022) — limites thermiques expérimentales (CTmin / CTmax / LT50 / preferred range selon publication originale). Filtré par classe taxonomique : Bennett 2018 §Methods documente que les données mammifères et oiseaux sont des TNZ (zone de neutralité thermique = confort métabolique en T° ambiante, l'animal régule sa T° interne) et non des limites létales. Comparer la TNZ d'un endotherme à la T air ambiante française n'a pas de sens. De même pour les espèces aquatiques (T eau ≠ T air). Le bloc affiche donc GlobTherm uniquement pour les ectothermes terrestres et les plantes — où la mesure est comparable à la T air.
- Logghe et al. 2025 (Biodiversity Data Journal, doi:10.15468/75g5z9) — niche thermique réalisée calculée par superposition des occurrences GBIF avec WorldClim sur l'aire européenne. Couvre 4 000+ arthropodes (Insecta + Arachnida) — tous ectothermes terrestres, donc directement comparable à la T air.
Repères France conservés à titre purement informatif sur le graphique : T moyenne 1981-2010 (CHELSA bio1 ≈ 11 °C) et projection 2050 (DRIAS GWL20 ≈ 13,7 °C). Pas de verdict 2050 calculé — comparer une moyenne annuelle ambiante à une limite physiologique mesurée en laboratoire est trop naïf : les enjeux du réchauffement sont les extrêmes saisonniers, pas la T moyenne. Le bloc reste descriptif et n'émet aucun diagnostic.
16.4 Bloc « Indicateurs Ellenberg-type » (radar EIVE)
Radar 5 axes M / N / R / L / T (Moisture, Nitrogen, Reaction-pH, Light, Temperature) sur l'échelle harmonisée 0-10 (Dengler 2023, Vegetation Classification & Survey 4:7-29). La zone estompée représente la niche width (écart-type d'estimation = fiabilité de la valeur). Qualifiers textuels générés par template fixe (Diekmann 2003) : strict / intermédiaire / strict opposé selon la valeur sur chaque axe.
16.5 Bloc « Stratégie écologique CSR » (triangle Grime)
Triangle équilatéral de Grime avec position barycentrique calculée depuis les % C / S / R (Pierce 2017, Functional Ecology 31:444). 7 stratégies possibles : C, S, R, CR, CS, SR, CSR. Chacune a une interprétation textuelle factuelle figée (template, no LLM) décrivant le type de milieu correspondant. Statut native / naturalisée / EEE affiché en badge si invasion_statusrenseigné.
17. ICO v3 — décision : conservation de l'ICO v2.1
En mai 2026, après l'import des 13 nouvelles tables d'enrichissement environnemental, la question s'est posée d'intégrer ces signaux (pesticides, pollution lumineuse, qualité eau, naturalité Corine) au score composite ICO. Après audit bibliographique et tests empiriques sur 8 communes ref, la décision a été prise de conserver l'ICO v2.1 sans ajout.
17.1 Pourquoi pas d'ICO v3 enrichi
- VIIRS pollution lumineuse : multicollinéarité forte avec la dimension pression anthropique v2.1 (popDensity_percentile) — la radiance nocturne VIIRS et la densité de population sont fortement corrélées dans les zones urbaines, propriété documentée par la littérature des données NTL (nighttime lights) qui exploite cette relation pour cartographier population, PIB et émissions à partir de la luminance. Ajouter VIIRS comme modulateur additionnel de l'ICO introduirait donc du double-comptage — principe général déconseillé par le Handbook on Constructing Composite Indicators (Nardo, Saisana et al. 2008[36]).
- Pesticides BNV-D CMR : biais distributeur documenté par les producteurs (OFB, Eaufrance) — les achats sont déclarés au CP du distributeur, pas du lieu d'usage. Test empirique : Paris affiche 4 515 kg/an de CMR alors que la commune est urbaine pure à 0 % d'agriculture. Aucune normalisation simple (kg/km², kg/SAU) ne corrige sans données géolocalisées intra-CP indisponibles.
- Naïades qualité eau : ~14 % seulement des communes ont une station de mesure. Toute pondération introduit un biais systémique (exclusion des non-monitorées ou neutralisation arbitraire).
- CORINE LC naturalité hemeroby (concept hemeroby Steinhardt et al. 1999[49] ; application agro-environnementale UE Paracchini et al. 2008[50]) : seul modulateur scientifiquement valide, mais redondance partielle avec la dimension naturalité v2.1 (basée biomes des espèces). Son intégration propre demanderait une refonte ciblée de cette dimension via combinaison pondérée biotique + Corine, pas un simple modulateur additionnel — chantier dédié à scoper.
17.2 Implications pratiques
Les 13 nouvelles dimensions environnementales restent intégralement exposées sur la fiche commune (cf §12), les fiches département / région (cf §13), la page /records, et les filtres écologiques (cf §15). Le visiteur a accès à TOUTE la donnée environnementale, sans qu'on ait dénaturé le score composite ICO v2.1 avec des modulateurs biaisés. C'est un choix méthodologique assumé, pas une lacune.
18. Traçabilité & reproductibilité
Chaque jeu de données utilisé par Ontologia provient de sources publiques identifiées (référentiels institutionnels, bases de traits scientifiques peer-reviewed, observations citoyennes), avec citation, licence et lien vers l'original consultables sur la page Sources.
Toutes les transformations (ingestion, normalisations, calculs d'indicateurs, agrégations spatiales) sont déterministes et tracées : chaque import enregistre l'URL d'origine effectivement servie, un checksum SHA-256 et une date de récupération dans un registre de provenance. Les évolutions du schéma de données passent par des migrations strictement linéaires et horodatées.
Conséquence pratique : un calcul d'ICO v2.1, un classement de communes ou une fiche espèce sont reproductibles par toute équipe disposant des sources primaires citées et appliquant la méthodologie décrite plus haut.
19. Bibliographie
- [1]Dudley N. (ed.) 2008. Guidelines for Applying Protected Area Management Categories. IUCN, Gland, Switzerland. — Référence des catégories IUCN I-VI des aires protégées, fondement de la pondération
reserves_strictesvsparcs_adhesion. - [2]Watson J.E.M., Dudley N., Segan D.B., Hockings M. 2014. The performance and potential of protected areas. Nature, 515:67-73. — Méta-analyse du gain biologique des aires protégées par catégorie IUCN.
- [3]Horellou A., Dore A., Herard K., Siblet J-P. 2013. Guide méthodologique pour l'inventaire continu des Zones Naturelles d'Intérêt Écologique, Faunistique et Floristique — ZNIEFF. MNHN/MEDDE. — Critères d'espèces déterminantes ZNIEFF.
- [4]Touroult J., Witté I., Pouvreau M., Siblet J-P. 2022. Évaluation de la pertinence du dispositif d'inventaire ZNIEFF pour la biodiversité française. Bulletin de la Société française d'Écologie et Évolution.
- [5]Maiorano L., Amori G., Montemaggiori A., Rondinini C., Santini L., Saura S., Boitani L. 2015. On how much biodiversity is covered in Europe by national protected areas and by the Natura 2000 network: insights from terrestrial vertebrates. Conservation Biology, 29(4):986-995. doi:10.1111/cobi.12535. — Étude de référence sur l'étendue de la couverture des vertébrés terrestres européens par les aires protégées nationales et Natura 2000 ; rapporte que ces réseaux couvrent ensemble plus d'un tiers du territoire de l'Union européenne.
- [6]Trochet A., Schmeller D.S. 2013. Effectiveness of the Natura 2000 network to cover threatened species. Nature Conservation, 4:35-53.
- [7]Jenks G.F., Caspall F.C. 1971. Error on choropleth maps: definition, measurement, reduction. Annals of the Association of American Geographers, 61:217-244. — Référence sur la classification choroplèthe et les rangs relatifs comme transformation pour distributions asymétriques.
- [8]Isaac N.J.B., Pocock M.J.O. 2015. Bias and information in biological records. Biological Journal of the Linnean Society, 115:522-531. — Normalisation par effort d'observation, fondement de
detection_rate. - [9]Boakes E.H. et al. 2010. Distorted views of biodiversity: spatial and temporal bias in species occurrence data. PLoS Biology, 8(6):e1000385. — Détection du « 1st January effect » GBIF.
- [10]Robertson M.P., Cumming G.S., Erasmus B.F.N. 2010. Getting the most out of atlas data. Diversity and Distributions, 16:363-375. — Méthode de détection des pics anormaux par fenêtre glissante.
- [11]Zizka A. et al. 2019. CoordinateCleaner: Standardized cleaning of occurrence records from biological collection databases. Methods in Ecology and Evolution, 10:744-751. — Package R, méthodes standards de nettoyage GBIF, seuils de filtrage ≥ 5×.
- [12]Maldonado C. et al. 2015. Estimating species diversity and distribution through the use of taxonomic and geo-referenced data. Global Ecology and Biogeography, 24:973-984. — Documente les conventions d'encodage
YYYY-01-01etYYYY-12-31. - [13]Jantke K., Schleupner C., Schneider U.A. 2011. Gap analysis of European wetland species: priority regions for expanding the Natura 2000 network. Biodiversity and Conservation, 20:581-605.
- [14]Butchart S.H.M., Akçakaya H.R., Chanson J., Baillie J.E.M., Collen B., Quader S., Turner W.R., Amin R., Stuart S.N., Hilton-Taylor C. 2007. Improvements to the Red List Index. PLoS ONE, 2(1):e140. doi:10.1371/journal.pone.0000140 — pondération des classes UICN par scores ordinaux (0=LC à 5=EX) servant d'échelle de sévérité dans les indicateurs composites.
- [15]Leroux S.J. et al. 2010. Global protected areas and IUCN designations: do the categories match the conditions? Biological Conservation, 143:609-616.
- [16]Bascompte J. & Jordano P. 2007. Plant-animal mutualistic networks: the architecture of biodiversity. Annual Review of Ecology, Evolution, and Systematics, 38:567-593. — Fondement théorique des réseaux d'interactions inter-espèces.
- [17]Dunne J.A., Williams R.J., Martinez N.D. 2002. Network structure and biodiversity loss in food webs: robustness increases with connectance. Ecology Letters, 5:558-567. — Métrique de connectance et robustesse des réseaux écologiques.
- [18]Bersier L.-F., Banašek-Richter C., Cattin M.-F. 2002. Quantitative descriptors of food-web matrices. Ecology, 83:2394-2407. — Métriques quantitatives pour caractériser un réseau trophique.
- [19]Almeida-Neto M. et al. 2008. A consistent metric for nestedness analysis in ecological systems. Oikos, 117:1227-1239. — Indice NODF de nestedness, mesure de la résilience d'un réseau bipartite à la perte aléatoire.
- [20]Poisot T. et al. 2021. Global knowledge gaps in species interaction networks data. Ecography, 44:1119-1130. — Documente les biais des bases d'interactions (sur-représentation des espèces étudiées, lacunes géographiques, sous-couverture des taxons non charismatiques).
- [21]Newman M.E.J. 2006. Modularity and community structure in networks. PNAS, 103:8577-8582. — Définition formelle de la modularité Q comme mesure de la qualité d'un partitionnement en communautés.
- [22]Blondel V.D., Guillaume J.-L., Lambiotte R., Lefebvre E. 2008. Fast unfolding of communities in large networks. Journal of Statistical Mechanics, P10008. — Algorithme Louvain : détection de communautés par maximisation locale de la modularité (complexité quasi-linéaire, pratique sur graphes de très grande taille).
- [23]Pocock M.J.O., Evans D.M., Memmott J. 2012. The robustness and restoration of a network of ecological networks. Science, 335:973-977. — Méthodologie d'évaluation de la robustesse des réseaux d'interactions écologiques par retrait simulé d'espèces, applicable à la connectance et la modularité du graphe sous-réseau induit par commune.
- [24]Serrano M.Á., Boguñá M., Vespignani A. 2009. Extracting the multiscale backbone of complex weighted networks. PNAS, 106(16):6483-6488. — Filtre de disparité (test de significativité contre un null model uniforme) pour extraire le squelette structurel d'un réseau pondéré tout en préservant la hiérarchie multi-échelle. Standard de la littérature des réseaux écologiques (Bascompte & Jordano sur les réseaux mutualistes pollinisation, Pocock sur les réseaux trophiques). Utilisé par Ontologia (§9.3) avec α=0.2 pour rendre lisible le tissu écologique des communes denses.
- [25]Memmott J., Waser N.M., Price M.V. 2004. Tolerance of pollination networks to species extinctions. Proceedings of the Royal Society B, 271:2605-2611. — Méthode des courbes de robustesse par retrait simulé d'espèces sur un réseau bipartite. Utilisée pour S1 (cascade) et S5 (R-curve).
- [26]Bray J.R., Curtis J.T. 1957. An ordination of the upland forest communities of southern Wisconsin. Ecological Monographs, 27:325-349. — Indice de similarité quantitatif entre communautés écologiques basé sur les abondances. Utilisé pour S2 (comparaison territoires).
- [27]Nemhauser G.L., Wolsey L.A., Fisher M.L. 1978. An analysis of approximations for maximizing submodular set functions. Mathematical Programming, 14:265-294. — Garantie d'approximation 1−1/e ≈ 63% de l'algorithme greedy sur les fonctions submodulaires. Fonde le scénario S4 (espèces parapluie).
- [28]Roberge J.-M., Angelstam P. 2004. Usefulness of the umbrella species concept as a conservation tool. Conservation Biology, 18:76-85. — Concept d'espèce parapluie pour la conservation : protéger une espèce dont la niche recouvre celle de nombreuses autres. Fonde l'application écologique du set cover (S4).
- [29]Vázquez D.P., Aizen M.A. 2003. Null model analyses of specialization in plant-pollinator interactions. Ecology, 84:2493-2501. — Documente le biais d'échantillonnage taxonomique sur les réseaux plante-pollinisateur : les espèces commercialement importantes (Apis, Bombus) sont disproportionnellement étudiées. Cité en bandeau biais critique sur S7 pollinisateurs.
- [30]Bartomeus I. et al. 2018. On the inconsistency of pollinator species traits for predicting either response to land-use change or functional contribution. Conservation Letters, 11:e12603. — Limite des prédictions basées sur les traits dans les réseaux pollinisateurs. Renforce le caveat S7 sur l'interprétation prudente des classements.
- [31]Curtsdotter A., Binzer A., Brose U., de Castro F., Ebenman B., Eklöf A., Riede J.O., Thierry A., Rall B.C. 2011. Robustness to secondary extinctions: Comparing trait-based sequential deletions in static and dynamic food webs. Basic and Applied Ecology, 12(7):571-580. — Démontre que la robustesse à l'extinction secondaire dépend fortement de la stratégie de retrait (séquences trait-based : connectivité, généralité, vulnérabilité, masse corporelle) et que les approches topologiques surestiment la robustesse par rapport aux modèles dynamiques. Cité en §11.1 (cascade S1) pour calibrer la plage [0,65 ; 0,85] aux côtés de Memmott 2004.
- [32]Pearman P.B., Guisan A., Broennimann O., Randin C.F. 2008. Niche dynamics in space and time. Trends in Ecology & Evolution, 23:149-158. — Conservation phylogénétique des niches écologiques : les espèces proches taxonomiquement partagent souvent des partenaires écologiques. Justifie la cascade taxonomique sur les facts GloBI niveau famille/genre (§8.10).
- [33]Eklöf A., Helmus M.R., Moore M., Allesina S. 2016. Relevance of evolutionary history for food web structure. Proceedings of the Royal Society B, 279:1588-1596. — Démontre que la structure phylogénétique prédit fortement la structure des réseaux trophiques. Renforce empiriquement la cascade taxonomique au niveau famille comme proxy raisonnable pour étendre les facts GloBI sur les espèces non documentées individuellement.
- [34]Barrat A., Barthélemy M., Pastor-Satorras R., Vespignani A. 2004. The architecture of complex weighted networks. PNAS, 101(11):3747-3752. — Définit la strength (degré pondéré)
sᵢ = Σⱼ wᵢⱼcomme métrique de centralité dans les réseaux pondérés. Fondement du score de visibilitéevidenceWeightbulle (§8.10.4) — appliqué à l'evidence GloBI réelle (direct + supra × certainty Pearman et al. 2008[32]) plutôt qu'à un sumOcc artificiellement inflaté par la duplication matview cascade. - [35]Elmqvist N., Fekete J-D. 2010. Hierarchical aggregation for information visualization: overview, techniques, and design guidelines. IEEE Transactions on Visualization and Computer Graphics, 16(3):439-454. — §4.2 recommande des quotas stratifiés par niveau d'agrégation pour éviter qu'un niveau écrase les autres en visualisation hiérarchique. Fondement du cap de densité 75 % species / 25 % bulles (§8.10.4) — garantit la représentation des inférences taxonomiques même quand leur signal evidence est faible (ex. bulle Cas A).
- [36]Nardo M., Saisana M., Saltelli A., Tarantola S., Hoffman A., Giovannini E. 2008. Handbook on Constructing Composite Indicators: Methodology and User Guide. OECD / European Commission Joint Research Centre. ISBN 978-92-64-04345-9. — Référence méthodologique de la construction d'indicateurs composites (sélection des variables, normalisation, pondération, agrégation, analyse de sensibilité, double-comptage). Fondement du statut Type C de l'ICO (§3 encart « Choix de design assumés ») et justification du refus d'ajouter des modulateurs corrélés (§17.1).
- [37]Shannon C.E. 1948. A mathematical theory of communication. Bell System Technical Journal, 27:379-423, 623-656. — Définition de l'entropie H' utilisée comme indice de richesse écologique pondérée par les abondances (§3.2 dim Richesse).
- [38]Fisher R.A., Corbet A.S., Williams C.B. 1943. The relation between the number of species and the number of individuals in a random sample of an animal population. Journal of Animal Ecology, 12:42-58. — Modèle log-series sur la distribution espèces/abondance, ancêtre des courbes aire-espèces (SAR).
- [39]Jaccard P. 1912. The distribution of the flora in the alpine zone. New Phytologist, 11:37-50. — Coefficient de similarité J = |A ∩ B| / |A ∪ B| utilisé en §3.2 (Typicité) et §11.2 (S2 comparer).
- [40]Drakare S., Lennon J.J., Hillebrand H. 2006. The imprint of the geographical, evolutionary and ecological context on species-area relationships. Ecology Letters, 9(2):215-227. doi:10.1111/j.1461-0248.2005.00848.x — Méta-analyse de 794 SAR ; exposant z moyen ~0.25 sur l'échelle continentale, base de la plage de validité [0.15, 0.35] adoptée par Ontologia (§3 encart Choix de design).
- [41]Rosenzweig M.L. 1995. Species Diversity in Space and Time. Cambridge University Press, Cambridge UK. — Synthèse théorique des relations aire-espèces, des gradients latitudinaux et des modèles de richesse.
- [42]Falchi F., Cinzano P., Duriscoe D., Kyba C.C.M., Elvidge C.D., Baugh K., Portnov B.A., Rybnikova N.A., Furgoni R. 2016. The new world atlas of artificial night sky brightness. Science Advances, 2(6):e1600377. doi:10.1126/sciadv.1600377 — Cartographie mondiale de la pollution lumineuse, base d'inspiration pour le seuil VIIRS « ciel sombre » choisi par Ontologia (§12.2, §15.1) ; les coupures elles-mêmes sont des choix Type C Ontologia.
- [43]Ozenda P. 1985. La végétation de la chaîne alpine dans l'espace montagnard européen. Masson, Paris. — Fondement des étages altitudinaux (subalpin, montagnard, collinéen, plaine) repris en §12.2 et §15.1.
- [44]Diekmann M. 2003. Species indicator values as an important tool in applied plant ecology — a review. Basic and Applied Ecology, 4(6):493-506. doi:10.1078/1439-1791-00185 — Revue méthodologique des valeurs indicatrices Ellenberg et de leur usage en bioindication ; base des qualifiers EIVE (§15.2 et §16.4).
- [45]Caro T. 2010. Conservation by Proxy: Indicator, Umbrella, Keystone, Flagship, and Other Surrogate Species. Island Press, Washington DC. ISBN 978-1-59726-191-6. — Synthèse sur les espèces-surrogate ; fondement écologique du concept d'espèce parapluie utilisé en S4 (§11.3).
- [46]Bascompte J., Jordano P., Melián C.J., Olesen J.M. 2003. The nested assembly of plant-animal mutualistic networks. PNAS, 100(16):9383-9387. — Convention OR pour le filtre de disparité (un lien est conservé s'il est significatif vu d'au moins un endpoint), reprise en §9.3.
- [47]Tufte E.R. 1983. The Visual Display of Quantitative Information. Graphics Press, Cheshire CT. ISBN 978-0-9613921-4-7. — Principe du data-ink ratio : maximiser l'encre porteuse d'information par rapport à l'encre décorative. Justification de l'épuration du graphe commune par backbone (§9.9).
- [48]Purchase H.C. 2002. Metrics for graph drawing aesthetics. Journal of Visual Languages & Computing, 13(5):501-516. — Identifie les croisements d'arêtes comme premier obstacle à la lecture des graphes ; soutient la décision d'extraction du backbone sur les communes denses (§9.9).
- [49]Steinhardt U., Herzog F., Lausch A., Müller E., Lehmann S. 1999. Hemeroby index for landscape monitoring and evaluation. In : Pykh Y.A., Hyatt D.E., Lenz R.J. (eds), Environmental indices, system analysis approach. EOLSS Publishers, Oxford. — Définition formelle de l'indice de hemeroby (degré d'anthropisation des paysages).
- [50]Paracchini M.L., Petersen J.-E., Hoogeveen Y., Bamps C., Burfield I., van Swaay C. 2008. High Nature Value Farmland in Europe — An estimate of the distribution patterns on the basis of land cover and biodiversity data. JRC Scientific and Technical Reports, EUR 23480. — Cartographie HNV à l'échelle européenne ; cadre repris par Paracchini & Capitani 2011 pour l'application de la hemeroby scale dans les indicateurs agro-environnementaux.
- [51]Trewartha G.T., Horn L.H. 1980. An Introduction to Climate (5th ed.). McGraw-Hill, New York. 416 p. — Référence de la classification climatique Köppen-Trewartha utilisée pour les chips climat (§15.1).
- [52]Burgos E., Ceva H., Perazzo R.P.J., Devoto M., Medan D., Zimmermann M., María Delbue A. 2007. Why nestedness in mutualistic networks? Journal of Theoretical Biology, 249(2):307-313. — Indice R = 1 − aire normalisée sous la courbe d'extinction secondaire ; base du score de robustesse R-curve (§11.4).
- [53]Soil Survey Staff 2017. Soil Survey Manual (Handbook 18). USDA Natural Resources Conservation Service, Washington DC. — Classes de pH et de texture standard utilisées comme qualifiers (§12.2).
Contenu exclusivement factuel et dérivé. Aucun texte généré par LLM sur des descriptions de méthodologie — chaque phrase est vérifiable par la formule ou la référence bibliographique correspondante.