Anticiper les besoins en consommation de bâtiments

Introduction

Ce projet est basé sur le dataset 2016 Building Energy Benchmarking. Il s'agit de relevés minutieux d'émissions de CO2 et de consommation d'énergie effectués par les agents de la ville de Seattle sur des bâtiments en 2016.
Ce relevés sont coûteux à réaliser, nous allons donc voir s'il est possible de faire des prédictions de ces variables en fonction des données structurelles des bâtiments. Nous baserons ici nos expériences sur les bâtiments non destinés à l'habitation.
Il sera également évalué la pertinence de la variable ENERGY STAR Score pour nos prédictions.

Les étapes suivantes seront réalisées :

  • Préparation des données.
  • Analyse exploratoire.
  • Tests de différents modèles pour nos prédictions.
  • Déterminer les importances globales et locales des features.

Retrouvez tout le code de ce projet sur mon GitHub

Préparation des données

  • Dataset de base :
  • —  3376 instances et 46 variables.
    —  13% de données manquantes.
    —  65% de variables numériques.
    —  35% de variables catégorielles.

  • Premier nettoyage :
  • —  OSEBuildingID (identifiant unique) : pas de valeur manquante ni de doublon.
    —  Sélection des bâtiments non résidentiels uniquement.
    —  Suppression des bâtiments qui n'ont pas satisfait les exigences de mesure.

  • Sélection des variables structurelles et géographiques :
  • —  BuildingType
    —  PrimaryPropertyType
    —  NumberofBuildings
    —  NumberofFloors
    —  PropertyGFAParking
    —  PropertyGFABuilding(s)
    —  Neighborhood
    —  Latitude
    —  Longitude
    —  ZipCode
    —  YearBuilt

  • Sélection des variables cibles :
  • —  SiteEnergyUseWN(kBtu)
    —  TotalGHGEmissions

  • Sélection d'autres variables :
  • —  NaturalGas(kBtu)
    —  Electricity(kBtu)
    —  SteamUse(kBtu)
    —  ENERGYSTARScore

  • Traitement des valeurs aberrantes et nulles, uniformisations des noms.
  • Création d'une variable âge des bâtiments à partir de YearBuilt.
  • Création de 3 variables de proportion du type d'énergie utilisé à partir de NaturalGas(kBtu), Electricity(kBtu) et SteamUse(kBtu) (supprimées ensuite).
  • Variable ENERGYSTARScore : beaucoup de données manquantes pour cette variable.
  • —  Création d'un dataset sans ENERGYSTARScore avec 1515 instances.
    —  Création d'un dataset avec ENERGYSTARScore avec 981 instances.

    Exploration des données

    Matrice de corrélation

    Distribution des variables numériques

    Influence du type d'utilisation sur la consommation d'énergie et les émissions :

    Consommation d'énergie

    Émissions de CO2

    Influence du quartier sur la consommation d'énergie et les émissions :

    Consommation d'énergie

    Émissions de CO2

    Relations entre les variables catégorielles et les variables cibles (ANOVA avec variables cibles passées au log) :

    Consommation d'énergie

    Émissions de CO2

    Choix du modèle

    Processus de test des modèles :
    —  Nous testerons nos modèles avec et sans la variable ENERGY STAR Score.
    —  Sélection des autres features structurelles en fonction des modèles testés.
    —  Séparation des features et des variables cibles.
    —  Scaling des valeurs numériques et encodage des valeurs catégorielles.
    —  Séparation des données en train/test.
    —  Premier test des modèles avec les hyperparamètres par défaut.
    —  Tuning des hyperparamètres à l'aide d'un GridSearchCV avec 5 folds. Ceci nous donnera un score moyen sur grid.
    —  Prédictions des modèles avec les meilleurs hyperparamètres. Ceci nous donnera le score optimisé.

    Schéma du processus :

    Sélection des meilleurs modèles :

    Scores R² moyens (GridSearchCV) sans ENERGY STAR Score

    Les meilleurs résultats sont obtenus avec les modèles suivants :
    —  Random Forest Regressor
    —  Gradien Boosting Regressor
    —  XGB Regressor
    —  Keras (TensorFlow)

    Scores R² moyens (GridSearchCV) avec ENERGY STAR Score

    Les meilleurs résultats sont également obtenus avec les modèles suivants :
    —  Random Forest Regressor
    —  Gradien Boosting Regressor
    —  XGB Regressor
    —  Keras (TensorFlow)

    Récapitulatifs des meilleurs modèles


    Les scores R² indiqués sont les scores moyens lors de la recherche sur grille, pour les deux variables cibles.

    Malgré des temps de calculs plus longs (qui pourraient être accélérés avec une carte graphique), le modèle TensorFlow fournit les meilleurs résultats en termes de scores R² et de polyvalence. C'est donc ce modèle que nous retiendrons pour nos prédictions finales.

    Scores R² pour les prédictions sur test avec Keras


    Utiliser la variable ENERGYSTARScore réduit le score pour la consommation et augmenter celui pour les émissions.

    RMSE/MAE pour les prédictions sur test avec Keras


    Utiliser la variable ENERGYSTARScore augmente la RMSE pour la consommation, réduit la RMSE et la MAE pour les émissions.

    Importances des features

    Importances globales des features représentées avec KernelExplainer() de la bibliothèque SHAP


    On retrouve souvent certaines variables dans les plus importantes : PropertyGFABuilding(s), gas_prop, elec_prop et ENERGYSTARScore (si utilisée).

    Importances locales des features représentées avec la bibliothèque LIME


    Exemple avec deux instances pour les émissions de CO2 avec ENERGYSTARScore

    —  Les importances locales varient en fonction des instances.
    —  Les importances locales varient par rapport aux importances globales.

    Conclusion

  • Nous avons pu prédire les émissions de CO2 et la consommation d'énergie des bâtiments non destinés à l'habitation, à l'aide de TensorFlow.
  • Nous nous sommes basés sur des données structurelles et géographiques.
  • La variable ENERGY STAR Score n'a pas un impact très important sur les prédictions, qui restent satisfaisantes sans utiliser cette dernière.
  • Bien que fournissant de bonnes prédictions, TensorFlow présente des défauts :
  • —  Il est coûteux en ressources, ce qui peut rendre les GridSearchCV très longs et ainsi compliquer les tests de nombreux hyperparamètres. Les calculs peuvent cependant être accélérés avec un/des GPU.
    —  L'explication globale pour ce modèle avec SHAP est coûteuse en ressources.

    Perspectives

  • Tester d'autres modèles de machine learning.
  • Les modélisations portaient sur les données de 2016, il pourrait être intéressant de faire des modélisations sur plusieurs ou d'autres années.
  • Aller plus loin dans le paramétrage de TensorFlow :
  • —  Tester différents nombres de couches.
    —  Tester différentes combinaisons de fonctions d'activation.
    —  Tester plus de combinaisons d'hyperparamètres.
  • Tester d'autres bibliothèques pour les explications globales et locales.
  • Retrouvez tout le code de ce projet sur mon GitHub