💥 Accédez en illimité à
tous nos livres & vidéos, sur l'IA, le dev, les réseaux... Cliquez ici
-100€ sur l'abonnement annuel à
la Bibliothèque Numérique ENI. Cliquez ici

Mener un projet de data science avec Python

Introduction

Ce chapitre offre l’occasion de mettre en pratique sur un projet réel une grande partie des concepts et techniques abordés dans cet ouvrage. Les notebooks de ce projet sont disponibles à l’adresse suivante :

https://github.com/eric2mangel/UsedCarPricePredictor

Afin de rendre la démonstration plus fluide, nous ne reprendrons que les parties les plus importantes. L’intégralité des expérimentations sera toutefois disponible dans les notebooks.

Le sujet : déterminer le prix des véhicules d’occasion

1. Les données

Les données du sujet sont issues du site Kaggle et disponibles à cette adresse :

https://www.kaggle.com/datasets/wspirat/germany-used-cars-dataset-2023

La licence est « CC0 : Domain Public », ce qui signifie que les données sont placées dans le domaine public et peuvent être librement utilisées. Attention à toujours bien vérifier et respecter les conditions d’utilisation d’un dataset.

Notre jeu de données est un recueil des offres de ventes de voitures d’occasion issues d’un des plus grands sites allemands en la matière : AutoScout24. Il offre un large éventail de modèles et de versions de véhicules. En tout, il y a 251 079 véhicules.

2. Les étapes du projet

Nous allons mettre en pratique une démarche classique de traitement et de modélisation des données en prenant soin de séparer la partie feature engineering de la partie modélisation. Cette approche est pertinente car elle nous permet de nous consacrer à chaque poste indépendamment. De plus, lors de la modélisation, nous pouvons repartir des données transformées et nous éviter de devoir recharger tout depuis le début.

a. Le notebook de l’EDA

Le notebook...

La modélisation en pratique

1. Notebook 1 : EDA

a. Acquisition et premiers contrôles des données

Avant de débuter, il est nécessaire de récupérer les données dont le lien a été fourni en début de chapitre et de les enregistrer dans un dossier de notre choix.

Procédons maintenant à l’acquisition :

import pandas as pd 
import numpy as np 
 
pd.set_option("display.max_columns", 999) 
raw = pd.read_csv(r"YOUR_PATH\data.csv",low_memory=False,sep=",") 
 
brut.head() 
images/09El02.png
images/09El03.png

Le fichier, présenté en deux parties pour des contraintes de lisibilité, comporte 15 variables et 251 079 observations.

La première variable est un index incrémentiel qui peut être immédiatement supprimé :

raw = raw.drop(["Unnamed: 0"],axis=1) 

Ensuite, nous renommerons la variable offer_description en version pour des raisons de commodités :

raw.rename(columns={'offer_description': 'version'}, 
           inplace=True) 

Nous pouvons désormais prendre connaissance des caractéristiques globales du dataset :

raw.info() 
images/09El04.png

La qualité de remplissage est globalement très bonne avec un taux de complétion global moyen de 99,22 %. La variable fuel_comsumption_l_100km a le taux de remplissage le plus bas avec 89,3 %.

En parcourant les données, certains prix sont remplacés par un nom de société. Dans la mesure où notre modélisation va porter sur la prédiction des prix, nous pouvons dès maintenant supprimer toutes les observations n’ayant pas de prix numérique. Nous allons récupérer dans une nouvelle variable price les valeurs numériques et quantifier le nombre d’observations non numériques :

raw['price'] = pd.to_numeric(raw["price_in_euro"], 
                             errors='coerce') 
non_num_price = raw[raw['price'].isna() & 
                    raw["price_in_euro"].notna()] ...

Conclusion

Globalement, comme dans la précédente simulation, ce sont les mêmes variables qui ressortent. Bien que les performances se soient améliorées, ces expérimentations montrent que chaque tentative d’optimisation nécessite de composer avec des contraintes, notamment de puissance de calcul. Ici, il serait impossible d’envisager une GridSearchCV, car nos machines ne sont tout simplement pas assez puissantes pour mener à bien ces recherches exhaustives dans des délais raisonnables. L’équilibre entre performance et faisabilité reste, la plupart du temps, le principal enjeu.