Méthodologie

Méthodologie : étude valeur verte DPE maisons 2020-2025

Note technique de l'étude VALORIS sur 1,49 M maisons : pipeline DVF×DPE, spécifications hédoniques M1-M3, coefficients bruts, diagnostics statistiques.

Par Valentin Bastien·20 mai 2026·17 min de lecture
Note methodologique etude DPE valeur verte VALORIS

Avant-propos

Cette note documente la méthodologie complète de l'étude sur l'impact du DPE sur le prix d'une maison publiée séparément. Elle est destinée aux lecteurs qui veulent vérifier la pertinence du protocole, reproduire l'analyse, ou citer les coefficients bruts dans un cadre professionnel. Le code Python complet vit dans le repository VALORIS sous scripts/studies/dpe_valeur_verte/ et le pipeline est entièrement reproductible à partir des sources publiques DVF et ADEME.

1. Données mobilisées

1.1. Source primaire DVF (DGFiP)

Demandes de Valeurs Foncières publiée trimestriellement par la Direction Générale des Finances Publiques. Couverture : ventes immobilières en France métropolitaine et DROM depuis 2014, hors Alsace, Moselle et Mayotte. Snapshot utilisé : ingestion VALORIS au 7 avril 2026.

Restriction au périmètre d'étude :

  • type_local = 'Maison'
  • nature_mutation = 'Vente' (exclut échanges, expropriations, VEFA)
  • date_mutation ∈ [2020-07-01 ; 2025-12-31] (la table cloud démarre au 1er juillet 2020)
  • valeur_fonciere > 0
  • surface_reelle_bati ∈ [20 ; 600]
  • COALESCE(nombre_lots, 1) ≤ 1 (exclut cessions multi-lots)

1.2. Source primaire DPE (ADEME)

Base DPE Logements existants depuis juillet 2021 ouverte par l'Agence de la transition écologique. Couverture : tous les diagnostics établis depuis la réforme du 1er juillet 2021, environ 13,8 millions de diagnostics au 23 février 2026.

Restriction :

  • LOWER(type_batiment) = 'maison'
  • etiquette_dpe ∈ {A, B, C, D, E, F, G}
  • Exclusion de la fenêtre [2021-07-01 ; 2021-11-01] (méthode de calcul DPE en transition, plusieurs diagnostics ont fait l'objet de corrections rétroactives)

1.3. Source de contrôle INSEE

Indicateurs communaux du Recensement de la population : revenu fiscal médian (med), densité (densite), part de propriétaires (p_rp_prop). Jointure par code commune (codgeo côté INSEE, code_commune côté DVF). 31 304 communes apparéees sur 34 988.

2. Pipeline d'appariement DVF ↔ DPE

2.1. Cascade simplifiée pour étude massive

Le pipeline production VALORIS (utilisé pour les rapports d'évaluation individuels) effectue une cascade à trois niveaux : (1) adresse exacte normalisée, (2) identifiant BAN, (3) proximité géographique avec rayon adaptatif. Pour le matching massif sur 3,6 millions de transactions, nous avons retenu la version PostGIS pure centrée sur la priorité 3, plus rapide et plus déterministe en SQL :

-- Pour chaque mutation DVF maison :
-- 1. trouver les DPE Maison dans un rayon de 50 m (ST_DWithin geography)
-- 2. filtrer ceux temporellement valides
-- 3. garder le DPE le plus proche puis le plus récent
WITH candidates AS (
  SELECT
    d.dvf_id, dpe.numero_dpe, dpe.etiquette_dpe, ...,
    ST_Distance(d.geom::geography, dpe.geom::geography) AS distance_m,
    ROW_NUMBER() OVER (
      PARTITION BY d.dvf_id
      ORDER BY ST_Distance(d.geom::geography, dpe.geom::geography) ASC,
               dpe.date_etablissement_dpe DESC
    ) AS rank_dpe
  FROM dvf_maisons d
  LEFT JOIN dpe_logements dpe
    ON LOWER(dpe.type_batiment) = 'maison'
   AND ST_DWithin(d.geom::geography, dpe.geom::geography, 50)
   AND dpe.etiquette_dpe IN ('A','B','C','D','E','F','G')
   AND dpe.date_etablissement_dpe <= d.date_mutation
   AND dpe.date_etablissement_dpe >= d.date_mutation - INTERVAL '10 years'
   AND (dpe.date_etablissement_dpe < '2021-07-01'
        OR dpe.date_etablissement_dpe > '2021-11-01')
)
SELECT ... FROM candidates WHERE rank_dpe = 1 OR rank_dpe IS NULL;

Cette approche est volontairement plus conservatrice que la cascade Python production : le rappel est légèrement inférieur sur les transactions où la cascade « adresse exacte » aurait matché alors que le DPE le plus proche dans un rayon de 50 m est différent. Sur un échantillon massif, l'effet sur les coefficients agrégés est négligeable, ce que confirme la stabilité des résultats sur les stratifications.

2.2. Validation temporelle stricte

Deux conditions cumulatives :

  1. date_dpe ≤ date_mutation : le DPE doit avoir été établi avant la transaction (sinon il ne pouvait pas influencer la décision d'achat).
  2. date_dpe ≥ date_mutation − 10 ans : durée légale de validité du DPE selon le décret n° 2020-1610.

2.3. Couverture du matching

Sur 3 542 688 maisons DVF extraites, 1 619 927 ont reçu un DPE matché, soit un rappel global de 45,7 %. Le détail par année de transaction révèle la contrainte structurelle :

Année transactionMaisons DVFMatchéesTaux
2020 (S2)156 22200,0 %
2021790 9674 2640,5 %
2022728 997348 59147,8 %
2023571 343408 04071,4 %
2024531 135422 78379,6 %
2025602 594498 40182,7 %

Les transactions 2020 et 2021 sont structurellement non appariables : la base DPE ouverte démarre au 1er juillet 2021, et la validité temporelle exclut tout DPE postérieur à la transaction. L'échantillon utile est donc concentré sur la période 2022-2025, où le taux de matching atteint 71-83 %.

3. Cascade de filtrage et échantillon final

Application séquentielle des filtres, avec n restant après chaque étape :

ÉtapeFiltren restant% initial
E0Extraction par dept3 586 464100,00 %
F8DPE matché1 619 92745,17 %
F11Étiquette DPE ∈ 1 619 92745,17 %
F7prix/m² ∈ [500 ; 15 000] €/m²1 562 42043,56 %
F13Jointure INSEE revenu médian1 553 79643,32 %
F14Outliers IQR par commune1 491 72441,59 %

Le filtre F14 applique la méthode IQR (Q1 − 1,5·IQR à Q3 + 1,5·IQR) sur le prix au m², au niveau de chaque commune. Pour les communes de moins de 30 observations (IQR communal instable), on retombe sur l'IQR départemental. Au total, 4 % des observations sont retirées comme outliers, ce qui est cohérent avec une distribution log-normale à queue droite épaisse.

Échantillon final pour la régression : 1 491 724 maisons sur 29 235 communes et 93 départements.

4. Spécification statistique

4.1. Modèle hédonique

Variable dépendante : log(prix/m²)prix/m² = valeur_foncière / surface_reelle_bati. Le passage au logarithme stabilise la variance et rend les coefficients directement interprétables en pourcentages via (exp(β) − 1) × 100.

Forme générale :

log(P_i / S_i) = α + Σ_k β_k · DPE_k,i + γ · X_i + δ · A_i + μ_c + λ_t + ε_i

avec :

SymboleVariableDétail
DPE_k6 dummiesA, B, C, E, F, G ; D omise comme catégorie de référence
XContrôles structurelslog(surface_bati), log(1 + surface_terrain), nombre_pieces_principales
AContrôles socio-écolog(revenu_median_commune), densite, p_rp_prop
μ_cFixed effect commune~29 235 communes
λ_tFixed effect année5 dummies pour 2021-2025, 2022 omise (modale)
εRésiduerreurs-types clusterisées par commune

Estimation : linearmodels.PanelOLS avec transformation within (démédiane par entité). Choix justifié par la haute cardinalité des FE commune (≈ 30 k) qui rendrait la matrice de design dense trop lourde en statsmodels.OLS. Erreurs-types clusterisées par entité (commune) pour absorber la corrélation intra-commune des résidus.

4.2. Référence DPE = D

La classe D est la plus représentée dans l'échantillon (30,7 %) et correspond au pivot de la grille Callon. Tous les coefficients reportés se lisent « par rapport à une maison D équivalente dans la même commune ». Le coefficient de D est calé à 0 % par construction (catégorie omise pour éviter la multicolinéarité parfaite avec l'intercept).

4.3. Quatre spécifications cumulatives

SpecRégresseurs additionnels
M1Dummies DPE + FE année + FE commune (modèle minimal)
M2M1 + log(surface_bati), log(1 + terrain), pièces
M3M2 + log(revenu_median), densite, p_rp_prop (spec principale)
M4M3 mais FE = code_iris (50 k IRIS) au lieu de commune

La spécification M4 n'a pas pu être estimée sur notre extraction : la colonne code_iris est présente au schéma dvf_mutations cloud mais non remplie sur les transactions extraites (cas connu de la version DVF déployée à la date d'étude). M3 reste la spec principale.

Observation importante sur M3. Les contrôles socio-économiques (log(med), densite, p_rp_prop) sont des variables au niveau de la commune, donc constantes à l'intérieur de chaque fixed effect commune. La transformation within les absorbe entièrement (linearmodels.AbsorbingEffectWarning), et les coefficients DPE de M3 sont strictement identiques à ceux de M2. Cela ne pose pas problème dans le sens où ces contrôles ne biaisent pas l'estimation des coefficients DPE, c'est une caractéristique du design, pas un défaut. Une éventuelle spécification ultérieure devrait introduire des contrôles socio-éco au niveau de l'IRIS ou du quartier pour qu'ils apportent un signal additionnel.

5. Coefficients estimés (table complète)

5.1. M1 : modèle minimal

Classecoef (β)SEt-statp-valueIC95 % basIC95 % hautEffet %n obs
A+0,17150,002567,5< 0,001+0,1665+0,1764+18,70 %1 491 724
B+0,11430,002057,5< 0,001+0,1104+0,1182+12,11 %1 491 724
C+0,05750,001345,6< 0,001+0,0550+0,0600+5,92 %1 491 724
D0 % (référence)457 305
E−0,06610,0025−26,8< 0,001−0,0709−0,0612−6,39 %1 491 724
F−0,13370,0019−69,8< 0,001−0,1375−0,1300−12,52 %1 491 724
G−0,17860,0023−76,3< 0,001−0,1832−0,1741−16,36 %1 491 724

R² within = 0,0554. R² overall = 0,0552. Nombre de clusters (communes) = 29 235.

5.2. M2 : M1 + contrôles structurels (surface, terrain, pièces)

Classecoef (β)SEt-statp-valueIC95 % basIC95 % hautEffet %n obs
A+0,20200,002775,0< 0,001+0,1968+0,2073+22,39 %1 491 724
B+0,14440,002265,9< 0,001+0,1401+0,1487+15,54 %1 491 724
C+0,07830,001454,0< 0,001+0,0755+0,0812+8,15 %1 491 724
D0 % (référence)457 305
E−0,08410,0020−41,1< 0,001−0,0881−0,0801−8,07 %1 491 724
F−0,16450,0017−99,4< 0,001−0,1677−0,1612−15,16 %1 491 724
G−0,23430,0021−113,0< 0,001−0,2384−0,2303−20,89 %1 491 724

R² within = 0,1482. Gain de R² de M1 à M2 = +9,3 pp, confirmant le rôle des contrôles structurels.

5.3. M3 : spécification principale (M2 + contrôles socio-éco commune)

Coefficients DPE identiques à M2 par construction (les contrôles socio-éco commune sont absorbés par les FE commune). N = 1 491 547 (légère perte sur les communes sans revenu médian INSEE). R² within = 0,1482.

5.4. Comparaison synthétique

ClasseM1 (sans contrôles)M2 (avec structurels)M3 (principale)
A+18,70 %+22,39 %+22,39 %
B+12,11 %+15,54 %+15,54 %
C+5,92 %+8,15 %+8,15 %
E−6,39 %−8,07 %−8,07 %
F−12,52 %−15,16 %−15,16 %
G−16,36 %−20,89 %−20,89 %

L'écart M1 → M2 montre l'importance de contrôler pour la taille du bien et la surface de terrain : sans ces contrôles, les coefficients DPE sont sous-estimés d'environ 4 pp pour les classes extrêmes (A et G).

6. Diagnostics statistiques

6.1. Multicolinéarité : VIF

Calculé sur les régresseurs continus de M3 (sans dummies) :

VariableVIFAlerte si > 10
log(surface_bati)2,12OK
log(1 + terrain)1,11OK
nombre_pieces_principales2,03OK
log(revenu_median)1,04OK
densite1,40OK
pct_proprietaires1,39OK

Tous les VIF restent inférieurs à 2,2. Aucune multicolinéarité problématique.

6.2. Hétéroscédasticité : Breusch-Pagan

Test sur les résidus OLS pré-FE :

  • LM = 20 261, p < 0,001
  • F = 1 712, p < 0,001
  • Rejet de H0 (homoscédasticité)

Conclusion : les résidus sont hétéroscédastiques. Cela justifie l'usage d'erreurs-types robustes (clusterisées par commune dans notre cas).

6.3. Normalité des résidus : Shapiro-Wilk

Test sur un échantillon aléatoire de 5 000 résidus (le test Shapiro-Wilk plafonne à ~5 000 observations) :

  • W = 0,989, p < 0,001
  • Rejet de H0 (normalité)

Sur N = 1,49 M, le test rejette systématiquement la normalité à cause de queues légèrement épaisses. L'estimateur OLS reste BLUE par le théorème de Gauss-Markov ; la non-normalité affecte la validité des intervalles de confiance en petits échantillons, ce qui n'est pas notre cas. Pour les très petits sous-échantillons (stratification IDF par exemple, N < 100 k), les IC sont plus fragiles et à interpréter avec précaution.

7. Stratifications

Les 4 stratifications publiées dans l'article principal réutilisent la spécification M3 sur le sous-échantillon défini :

StrateDéfinitionN (G)
Nord vs Suddépts Callon nord (38) vs resteVariable
IDF vs Provincedépts 75, 77-78, 91-95 vs reste5 884 (IDF)
Urbain vs RuralINSEE densite > 1 500 hab/km²8 463 (urbain)
Pré vs Post 2022-07break temporel16 423 (pré)

L'année 2022 reste la modale dans la plupart des sous-échantillons, et sert de référence pour les dummies année. Sur les sous-échantillons (notamment IDF), la précision des coefficients chute, ce qui se voit dans la largeur des IC. Les comparaisons inter-strates dans l'article principal restent qualitatives : nous reportons les coefficients ponctuels sans test formel d'égalité (test de Chow ou modèle interagi), faute d'une infrastructure de test multi-spécifications mature à ce stade.

8. Limites et précautions d'interprétation

8.1. Effet « associé », pas « effet causal »

Les coefficients reportés capturent l'effet de marché associé à la classe DPE conditionnellement à la commune et à l'année. Ils ne distinguent pas :

  • L'effet propre de la performance énergétique (factures, confort thermique, conformité réglementaire)
  • L'effet de variables latentes corrélées avec la classe DPE : âge du bâti, état d'entretien, qualité de construction, exposition, présence ou absence de travaux récents, matériaux de finition

Le coefficient mesuré est donc à lire comme une borne supérieure de l'effet causal pur du DPE. La littérature économétrique sur la « valeur verte » converge sur cette interprétation prudente.

8.2. Pourquoi pas de contrôle d'âge

dpe_logements.annee_construction est NULL à 100 % dans le snapshot ADEME utilisé. BDNB porte un annee_construction à 64 % de remplissage mais la jointure DVF→BDNB par adresse textuelle est trop coûteuse pour 96 départements (pas de géométrie BDNB). Au-delà du problème pratique, l'introduction de l'âge dans la régression aurait posé un bad-control bias : âge et classe DPE étant fortement corrélés, contrôler explicitement par l'âge aurait absorbé une partie du signal DPE qu'on cherche à mesurer. Les FE commune captent indirectement la composante spatiale de l'âge moyen du bâti, ce qui est le meilleur compromis possible avec les données disponibles.

8.3. Biais de sélection sur le matching

45 % de la population DVF a un DPE matché. Les non-matchés ne sont pas distribués aléatoirement : ils sont concentrés sur 2020-2021 (avant ou peu après la réforme DPE) et sur les zones rurales où la couverture des diagnostics est plus tardive. Si les transactions 2020-2021 avaient une dynamique de prix DPE-dépendante différente de 2022-2025, notre estimation post-2022 ne s'extrapole pas mécaniquement vers cette période antérieure.

8.4. Prix au m² maison

Le prix au m² d'une maison mélange la valeur du bâti et celle du terrain. Notre contrôle par log(1 + surface_terrain) capture l'effet de la taille du terrain mais pas sa valeur unitaire, qui varie fortement entre une parcelle en zone tendue (1 000 €/m² de terrain) et une parcelle en zone rurale (5 €/m² de terrain). Sur les très grandes parcelles rurales, le coefficient DPE peut être légèrement surestimé.

8.5. Échantillon post-2022 dominant

L'échantillon final est dominé par les transactions 2022-2025 (95 % des observations). Les coefficients estimés caractérisent donc avant tout l'état du marché français post-réforme DPE et post-loi Climat. L'étude n'a pas vocation à mesurer la valeur verte sur la décennie 2010-2020.

9. Reproductibilité

Le code Python complet de l'étude (extraction SQL, cleaning, régression, robustesse, export article) est disponible dans le repository VALORIS sous le chemin scripts/studies/dpe_valeur_verte/. La commande de reproduction est :

python -m venv .venv-study
.venv-study/Scripts/activate
pip install -r scripts/studies/dpe_valeur_verte/requirements.txt
python scripts/studies/dpe_valeur_verte/00_preflight.py
python scripts/studies/dpe_valeur_verte/01_extract.py
python scripts/studies/dpe_valeur_verte/02_clean.py
python scripts/studies/dpe_valeur_verte/03_descriptive.py
python scripts/studies/dpe_valeur_verte/04_hedonic.py
python scripts/studies/dpe_valeur_verte/05_robustness.py
python scripts/studies/dpe_valeur_verte/06_export_for_article.py

Pré-requis : Python 3.11+, accès lecture à la base PostgreSQL/PostGIS VALORIS contenant les tables dvf_mutations, dpe_logements, insee_communes (les snapshots publics DVF et ADEME peuvent être réimportés via les scripts scripts/dvf/setup_dvf.py et scripts/dpe/download_dpe_bulk.py). Date d'extraction : 20 mai 2026.

10. Citation

Pour citer ce travail dans un document professionnel ou journalistique :

VALORIS (2026). « Valeur verte du DPE 2026 : étude propriétaire sur 1,49 million de maisons vendues en France 2020-2025 », note méthodologique disponible sur valoris-immo.fr.

Pour toute question méthodologique précise ou demande d'accès à une coupe spécifique des données : [email protected].

Sources


Besoin d'une estimation immobilière ?

Obtenez une estimation documentée, basée sur les transactions réelles du marché (DVF), en quelques minutes.