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.

Pour la vue d'ensemble chiffrée, avec l'effet de chaque filtre sur la médiane de six grandes communes : DVF brut vs DVF nettoyé.
6,7 %
Ventes en lot
des lignes publiées, exclues par défaut
3,2 %
Outliers
des lignes DVF brutes, écartées à l'ingestion
99,7 %
Géocodage
des lignes publiées ont des coordonné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 est obsolète
Comme aucune ligne publiée n'est un outlier, le paramètre 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.
Les outliers incluent les €1 symboliques (cession familiale), les garages vendus au prix d'un appartement (erreur de saisie), et les biens d'exception (châteaux, hôtels particuliers). La moyenne sans ces outliers est significativement plus représentative.

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 :

Castype_local brutcomputed_type_local
Transaction avec plusieurs lots de types mixtesAppartement + DépendanceAppartement
Local sans surface bâtieLocal industrielTerrain
Maison avec terrainMaisonMaison
Parking ou box seulDépendanceDé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é

ChampSignificationComportement par défaut
is_bulk_salePlus de 3 lots, ou surfaces agrégéesExclue (exclude_bulk_sales=true)
is_price_outlierPrix/m² hors bornes (500 – 100 000 €)Écartée à l'ingestion (toujours false en base)
is_vefaVente en l'état futur d'achèvement (neuf sur plan)Exclue (exclude_vefa=true)