Qualité des données
Comment Normi nettoie, normalise et enrichit les données DVF brutes.
Pourquoi nettoyer les données DVF ?
Les données DVF brutes contiennent des artefacts qui faussent les analyses : mutations qui ne sont pas des ventes, lignes sans surface, ventes en lot (un immeuble entier vendu en une transaction), outliers de prix (€1 symbolique ou prix astronomique), ventes sur plan (VEFA) et types de biens mal typés. Sans traitement, les médianes et moyennes sont biaisées.
Détection des ventes en lot
Une vente en lot (is_bulk_sale = true) est détectée quand nombre_de_lots > 3, ou quand la somme des surfaces Carrez dépasse 1,8 fois la surface bâtie (agrégation de surfaces). Ces transactions incluent des immeubles entiers, des parkings groupés, ou des copropriétés vendues en bloc : le prix global est répété sur chaque ligne, ce qui rend le prix au m² par ligne inexploitable. Elles représentent 1 208 430 lignes, soit 6,7 % des lignes publiées.
Par défaut, exclude_bulk_sales=true sur les endpoints de recherche, de statistiques, de tendances et de comparables. Passez exclude_bulk_sales=false si vous analysez spécifiquement les marchés de l'investissement locatif en lot.
Détection des outliers de prix
Sur du bâti, une ligne dont le prix au m² est inférieur à 500 € ou supérieur à 100 000 € est un outlier. Les bornes sont fixes et nationales, volontairement larges : elles retirent les valeurs impossibles, pas les biens chers d'un quartier donné.
Ces lignes (681 082, soit 3,2 % des lignes DVF brutes) sont écartées à l'ingestion et ne sont pas chargées en base. Le champ is_price_outlier vaut donc toujours false sur les lignes publiées.
exclude_outliers ne peut rien changer au résultat, y compris avec exclude_outliers=false. Il a été retiré des schémas MCP et de la documentation. Il reste accepté pour ne pas casser les appels existants, mais il est ignoré. Sur l'API REST, la réponse contient alors un champ notice qui le signale. Vous pouvez le retirer de vos appels.Typage intelligent des biens
Le champ type_local brut DVF est parfois incorrect ou ambigu. Normi ajoute computed_type_local qui corrige les cas les plus fréquents :
| Cas | type_local brut | computed_type_local |
|---|---|---|
| Transaction avec plusieurs lots de types mixtes | Appartement + Dépendance | Appartement |
| Local sans surface bâtie | Local industriel | Terrain |
| Maison avec terrain | Maison | Maison |
| Parking ou box seul | Dépendance | Dépendance |
Par défaut, les filtres type_local=Appartement utilisent computed_type_local. Passez use_original_type=true pour utiliser le champ brut DVF.
Géocodage
Les coordonnées GPS (latitude, longitude) sont calculées par l' API Adresse (BAN / IGN) à partir de l'adresse complète de chaque transaction.
99,7 % des lignes publiées ont des coordonnées. Les 48 656 autres ont une adresse introuvable (erreurs de saisie, voies récentes non encore dans la base BAN) — ces transactions restent disponibles mais sans coordonnées GPS. Elles sont exclues des recherches par rayon GPS.
Flags de qualité
| Champ | Signification | Comportement par défaut |
|---|---|---|
| is_bulk_sale | Plus de 3 lots, ou surfaces agrégées | Exclue (exclude_bulk_sales=true) |
| is_price_outlier | Prix/m² hors bornes (500 – 100 000 €) | Écartée à l'ingestion (toujours false en base) |
| is_vefa | Vente en l'état futur d'achèvement (neuf sur plan) | Exclue (exclude_vefa=true) |