Machine Learning · Data Science · EDA

Optimisez vos projets de Machine Learning avec une EDA structurée

Analyse exploratoire des données : méthodologie en 10 étapes pour comprendre vos données, détecter les anomalies, préparer la modélisation et éviter les pièges classiques.

Niveau : intermédiaire | Temps de lecture : 12 min | Mis à jour : avril 2026

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

Schéma du workflow EDA en 10 étapes pour Machine Learning

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"{col}: {df[col].nunique()} 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 nulles
Amé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 — EDA structurée pour Machine Learning

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.
 

Recevez la veille IA & Data qui compte vraiment

 

    Analyses claires, outils concrets et tendances IA sans bruit.     Rejoignez les lecteurs de IANA Data.