Sommaire
- Pourquoi l’EDA est cruciale en Machine Learning
- 1. Comprendre le problème métier
- 2. Chargement des données
- 3. Vérification de la qualité des données
- 4. Analyse univariée
- 5. Analyse bivariée
- 6. Ingénierie des caractéristiques
- 7. Détection des valeurs aberrantes
- 8. Gestion des valeurs manquantes
- 9. Vérification du dataset final
- 10. Insights et prochaines étapes
- Récapitulatif des 10 étapes
- Outils recommandés pour l’EDA
- FAQ
- Conclusion
- Articles connexes
Pourquoi l’EDA est cruciale en Machine Learning
L’analyse exploratoire de données (EDA) est une étape cruciale dans tout projet de machine learning. Elle permet de comprendre en profondeur les données, d’identifier les problèmes potentiels et de préparer le terrain pour la modélisation. Une EDA bien structurée peut faire la différence entre un modèle performant et un échec.
Définition
L’EDA (Exploratory Data Analysis) est une approche d’analyse des données qui utilise des méthodes statistiques et des visualisations pour résumer leurs caractéristiques principales, souvent avec des moyens graphiques.
60-80%
du temps d’un projet ML consacré à l’EDA et au nettoyage
Kaggle State of Data Science, 2025
3x
meilleurs résultats avec EDA rigoureuse
Étude internaute, 2026

diagramme de flux des 10 étapes de l’EDA structurée
1. Comprendre le problème métier
Exemple concret :
Projet de prédiction de la satisfaction client dans un hôtel. L’objectif métier est de comprendre quels facteurs influencent la satisfaction des clients afin d’améliorer leur expérience. Variables clés : score de satisfaction, durée du séjour, type de chambre, commentaires. Contraintes : disponibilité des données, confidentialité.
Bonnes pratiques :
- Organisez une réunion avec les parties prenantes pour clarifier objectifs et attentes
- Documentez les questions métier et les hypothèses à tester
- Définissez la métrique de succès (ex: précision, rappel, RMSE)
- Identifiez les contraintes (budget, temps, réglementation)
2. Chargement des données
Exemple concret :
Chargement d’un fichier CSV contenant les données des clients de l’hôtel. Utilisation de df.head() pour afficher les premières lignes, df.shape pour connaître les dimensions, et df.info() pour vérifier les types de données.
Python - Chargement et inspection initiale
import pandas as pd
df = pd.read_csv('donnees_clients_hotel.csv')
# Inspection de base
print(df.head())
print(df.shape)
print(df.info())
print(df.describe())Outils recommandés :
Utilisez pandas_profiling ou ydata-profiling pour générer un rapport automatique qui résume les principales caractéristiques des données.
3. Vérification de la qualité des données
Exemple concret :
Découverte que la colonne “âge” contient des valeurs manquantes et que certaines entrées de “type de chambre” sont mal orthographiées.
Détection des problèmes de qualité
# Valeurs manquantes
print(df.isnull().sum())
# Doublons
print(df.duplicated().sum())
# Valeurs uniques par colonne catégorielle
for col in df.select_dtypes(include='object').columns:
print(f": valeurs uniques")
print(df[col].value_counts().head())Amélioration :
Créez un tableau de bord interactif avec des outils comme Dash ou Streamlit pour visualiser les problèmes de qualité des données en temps réel.
4. Analyse univariée
Exemple concret :
Pour la variable “score de satisfaction”, utilisation de df.describe() pour les statistiques descriptives et d’un histogramme pour visualiser la distribution. Observation : la plupart des clients donnent une note élevée → possible biais.
Analyse univariée
import matplotlib.pyplot as plt
import seaborn as sns
# Variables numériques
df.describe()
# Distribution avec histogramme
plt.figure(figsize=(10, 6))
sns.histplot(df['score_satisfaction'], bins=30, kde=True)
plt.title('Distribution du score de satisfaction')
plt.show()
# Variables catégorielles
df['type_chambre'].value_counts().plot(kind='bar')Amélioration :
Utilisez des graphiques interactifs avec Plotly pour explorer les distributions de manière plus dynamique.
5. Analyse bivariée
Exemple concret :
Utilisation d’un scatter plot pour explorer la relation entre la durée du séjour et le score de satisfaction. Observation : les clients qui restent plus longtemps ont tendance à être plus satisfaits.
Analyse bivariée
# Relation entre deux variables numériques
plt.figure(figsize=(10, 6))
sns.scatterplot(x='duree_sejour', y='score_satisfaction', data=df)
plt.title('Relation durée séjour / satisfaction')
plt.show()
# Matrice de corrélation (variables numériques)
plt.figure(figsize=(12, 8))
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap='coolwarm')
plt.title('Matrice de corrélation')
plt.show()
# Relation variable catégorielle vs numérique
sns.boxplot(x='type_chambre', y='score_satisfaction', data=df)Amélioration :
Utilisez des heatmaps pour visualiser les corrélations entre plusieurs variables numériques simultanément.
6. Ingénierie des caractéristiques
Exemple concret :
Création d’une variable “saison” à partir de la date de séjour pour capturer les variations saisonnières. Encodage de la variable “type de chambre” en utilisant un encodage one-hot.
Feature engineering
# Extraction de la saison depuis une date
df['date_sejour'] = pd.to_datetime(df['date_sejour'])
df['saison'] = df['date_sejour'].dt.month.map({
12: 'hiver', 1: 'hiver', 2: 'hiver',
3: 'printemps', 4: 'printemps', 5: 'printemps',
6: 'ete', 7: 'ete', 8: 'ete',
9: 'automne', 10: 'automne', 11: 'automne'
})
# Encodage one-hot des variables catégorielles
df_encoded = pd.get_dummies(df, columns=['type_chambre'], drop_first=True)Amélioration :
Explorez des techniques d’encodage avancées comme l’encodage target (TargetEncoder de scikit-learn) pour les variables catégorielles.
7. Détection des valeurs aberrantes
Exemple concret :
Utilisation d’Isolation Forest pour détecter les clients dont le comportement est anormal, comme ceux qui ont un score de satisfaction extrêmement bas malgré un long séjour.
Détection d’anomalies
from sklearn.ensemble import IsolationForest
# Méthode statistique (IQR)
Q1 = df['montant'].quantile(0.25)
Q3 = df['montant'].quantile(0.75)
IQR = Q3 - Q1
outliers_iqr = df[(df['montant'] < Q1 - 1.5*IQR) | (df['montant'] > Q3 + 1.5*IQR)]
# Méthode ML (Isolation Forest)
iso_forest = IsolationForest(contamination=0.05, random_state=42)
df['anomalie'] = iso_forest.fit_predict(df.select_dtypes(include='number'))
outliers_ml = df[df['anomalie'] == -1]Amélioration :
Combinez plusieurs méthodes de détection d’anomalies (IQR, Z-score, Isolation Forest, DBSCAN) pour améliorer la robustesse de votre analyse.
8. Gestion des valeurs manquantes
Exemple concret :
Pour les valeurs manquantes dans la colonne “âge”, utilisation de l’imputation par la médiane (distribution asymétrique).
Imputation des valeurs manquantes
from sklearn.impute import SimpleImputer
# Imputation par la médiane (robuste aux outliers)
imputer_median = SimpleImputer(strategy='median')
df['age'] = imputer_median.fit_transform(df[['age']])
# Imputation par la moyenne
imputer_mean = SimpleImputer(strategy='mean')
df['age'] = imputer_mean.fit_transform(df[['age']])
# Imputation par la valeur la plus fréquente (pour catégorielles)
imputer_mode = SimpleImputer(strategy='most_frequent')
df['type_chambre'] = imputer_mode.fit_transform(df[['type_chambre']])
# Suppression des lignes avec trop de valeurs manquantes
df = df.dropna(thresh=len(df.columns)-2) # garde lignes avec au moins n-2 valeurs non nullesAmélioration :
Testez plusieurs méthodes d’imputation et comparez leur impact sur les performances du modèle (cross-validation).
9. Vérification du dataset final
Exemple concret :
Après nettoyage, vérification que toutes les valeurs manquantes ont été traitées et que les types de données sont corrects. Sauvegarde du dataset propre en CSV.
Validation finale
# Vérification finale
assert df.isnull().sum().sum() == 0, "Il reste des valeurs manquantes"
assert not df.duplicated().any(), "Il reste des doublons"
# Vérification des types
print(df.dtypes)
# Statistiques finales
print(df.describe())
# Sauvegarde
df.to_csv('dataset_clean.csv', index=False)Amélioration :
Utilisez des tests unitaires (pytest) pour automatiser la vérification de la cohérence des données à chaque exécution.
10. Insights et prochaines étapes
Exemple concret :
Synthèse des découvertes : les clients qui restent plus longtemps sont plus satisfaits, et les chambres de luxe ont un impact positif sur la satisfaction. Planification de tests de modèles de régression pour prédire la satisfaction.
Synthèse et visualisation
import matplotlib.pyplot as plt
# Top des insights à visualiser
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Insight 1: relation durée séjour / satisfaction
sns.scatterplot(x='duree_sejour', y='score_satisfaction', data=df, ax=axes[0])
axes[0].set_title('Impact de la durée sur la satisfaction')
# Insight 2: satisfaction par type de chambre
sns.barplot(x='type_chambre', y='score_satisfaction', data=df, ax=axes[1])
axes[1].set_title('Satisfaction par type de chambre')
plt.tight_layout()
plt.show()Amélioration :
Créez un rapport interactif avec Streamlit ou Dash contenant des visualisations clés et des recommandations pour les parties prenantes.
Récapitulatif des 10 étapes
| Étape | Description | Exemple concret | Outils/Méthodes |
|---|---|---|---|
| 1 | Comprendre le problème | Prédiction satisfaction client | Réunions, documentation |
| 2 | Chargement des données | Fichier CSV clients hôtel | df.head(), df.info() |
| 3 | Vérification qualité | Valeurs manquantes, doublons | isnull(), duplicated() |
| 4 | Analyse univariée | Distribution satisfaction | Histogrammes, describe() |
| 5 | Analyse bivariée | Durée séjour vs satisfaction | Scatter plots, heatmaps |
| 6 | Ingénierie caractéristiques | Variable “saison” | One-hot encoding, extraction |
| 7 | Détection anomalies | Scores anormaux | Isolation Forest, IQR |
| 8 | Gestion valeurs manquantes | Imputation âge | Médiane, moyenne, mode |
| 9 | Vérification finale | Sauvegarde dataset propre | Tests unitaires, assertions |
| 10 | Insights et planification | Synthèse et modélisation | Rapports, visualisations |
Outils recommandés pour l’EDA
| Outil | Description | Niveau |
|---|---|---|
| Pandas | Manipulation de données, statistiques descriptives | Débutant |
| Matplotlib / Seaborn | Visualisations statiques (histogrammes, scatter plots) | Débutant |
| Plotly | Visualisations interactives (zoom, hover) | Intermédiaire |
| Pandas Profiling / ydata-profiling | Rapport EDA automatique | Débutant |
| Sweetviz | Comparaison de datasets (train/test) | Débutant |
| Lux | Visualisation automatique recommandée | Intermédiaire |
FAQ
Quelle est la différence entre EDA et Data Cleaning ?
L'EDA (analyse exploratoire) vise à comprendre les données : distributions, relations, anomalies. Le Data Cleaning (nettoyage) est l'action de corriger les problèmes identifiés : imputation des valeurs manquantes, correction des outliers, suppression des doublons. L'EDA précède et guide le nettoyage.
Combien de temps doit durer une EDA ?
En règle générale, l'EDA représente 60 à 80% du temps d'un projet ML. Pour un projet simple, 1-2 jours. Pour un projet complexe (multi-sources, données sales), 1-2 semaines. Ne négligez pas cette étape : une bonne EDA évite des mois de modélisation sur de mauvaises données.
Faut-il faire l'EDA avant ou après le split train/test ?
Idéalement, l'EDA doit être faite avant le split, mais uniquement sur les données d'entraînement pour éviter le data leakage. Les informations sur le test set ne doivent pas influencer vos décisions de preprocessing.
Comment automatiser l'EDA ?
Des outils comme pandas-profiling, sweetviz ou dtale génèrent des rapports automatiques. Cependant, ils ne remplacent pas l'analyse humaine pour les insights métier. Utilisez-les comme point de départ, puis creusez manuellement.
Quelle est la différence entre analyse univariée et bivariée ?
L'analyse univariée examine une variable à la fois (distribution, statistiques). L'analyse bivariée examine les relations entre deux variables (corrélation, scatter plots). Pour plus de deux variables, on parle d'analyse multivariée.
Quels sont les signaux d'alerte à ne pas manquer en EDA ?
Signaux critiques : (1) valeurs manquantes > 20% sur une colonne importante, (2) doublons excessifs, (3) distributions anormales (bi-modales inattendues), (4) corrélations parfaites (redondance), (5) outliers extrêmes pouvant être des erreurs de saisie, (6) déséquilibre des classes en classification.
Conclusion
Une EDA structurée est la clé d’un projet de machine learning réussi. Elle permet de comprendre vos données, d’identifier leurs problèmes et de préparer le terrain pour des modèles performants.
À retenir
- 10 étapes clés de la compréhension métier à la planification de la modélisation
- 60-80% du temps projet doit être consacré à l’EDA et au nettoyage
- Visualisez systématiquement : un graphique vaut 1000 statistiques
- Documentez toutes vos décisions pour la reproductibilité
- Automatisez les vérifications récurrentes avec des tests unitaires
- Ne passez à la modélisation qu’après validation de la qualité des données
Pour aller plus loin : Découvrez notre guide pratique sur la structuration d’un projet ML pour organiser l’ensemble de votre pipeline, de l’EDA au déploiement.
Faites parler vos données
Apprenez les méthodes et les outils pour extraire de la valeur stratégique : Data Science : Le guide complet des méthodes et outils.