4  📊 Analyse Exploratoire des Données (EDA)

4.1 🔎 Philosophie de l’Analyse Exploratoire (EDA)

Historiquement, cette philosophie de découverte de la valeur puise ses racines dans l’Analyse Exploratoire des Données (EDA), un concept popularisé par le mathématicien John Tukey dans les années 1970 (IBM, n.d.).

Contrairement à l’analyse confirmatoire classique (où l’on cherche simplement à valider ou infirmer une hypothèse préétablie), l’EDA se distingue par une approche d’investigation systématique. Le but ? Laisser la donnée “parler” d’elle-même pour révéler des structures, des anomalies (Outliers) ou des motifs cachés avant d’appliquer le moindre algorithme de Machine Learning complexe (IBM, n.d.).

C’est ce travail de détective qui constitue le premier rempart contre les conclusions hâtives et les biais algorithmiques.

💡 Concept Clé : EDA

EDA (Exploratory Data Analysis) : Phase d’investigation utilisant des statistiques descriptives et des outils visuels pour résumer les caractéristiques d’un jeu de données et découvrir des modèles cachés avant toute modélisation prédictive.

🎒 Astuce Pro : Éviter le Dark Data

Pour ne pas transformer votre base de données en cimetière numérique, chaque donnée collectée doit répondre à une question métier spécifique ou à un indicateur de performance (KPI) clairement identifié.

Exemple concret :

  • ❌ L’approche “Dark Data” (À éviter) : Un site e-commerce enregistre et stocke de manière brute les coordonnées de clics en pixels (X, Y) de chaque utilisateur sur l’écran. Après un an, l’entreprise possède des téraoctets de données inexploitables et coûteuses en stockage, car elle n’a aucune question métier associée à ces pixels.
  • 🟢 L’approche “Smart Data” (Recommandée) : L’entreprise pose une question précise : “À quelle étape de notre tunnel d’achat les utilisateurs abandonnent-ils le plus ?”. Elle choisit alors de collecter uniquement la page de sortie du tunnel (Panier, Options de Livraison, Paiement). L’analyse révèle immédiatement que 72% des abandons ont lieu sur la page “Livraison”. Action métier : intégrer un mode de livraison en point relais moins cher. Le taux de conversion augmente immédiatement de 12%.

🕵️‍♂️ Simulateur d’Illusion : Ne faites jamais confiance aux résumés

Sélectionnez les différents jeux de données. Observez bien les statistiques descriptives (moyennes, corrélation) : elles sont strictement identiques. Pourtant, regardez ce que l’Analyse Exploratoire Visuelle (EDA) révèle…

4.2 📊 Statistiques Descriptives

L’EDA n’est pas qu’un graphique

Dans l’écosystème analytique de 2026, l’Analyse Exploratoire des Données (EDA) n’est plus une simple étape visuelle : c’est une discipline d’ingénierie rigoureuse. C’est la phase critique de validation de l’intégrité structurelle de vos données avant de déployer le moindre algorithme IA. La première étape consiste à prendre le “pouls” de vos variables grâce aux statistiques descriptives.

L’analyse univariée (l’étude d’une seule variable à la fois) constitue le premier rempart contre les données chaotiques.

4.2.1 🎯 Tendance Centrale

L’objectif est de trouver la valeur qui résume le mieux l’ensemble des données. L’arbitrage classique se fait entre la moyenne et la médiane.

  • La Moyenne (Mean) : C’est la somme de toutes les valeurs divisée par leur nombre total. Si elle est mathématiquement élégante, elle est structurellement très vulnérable aux valeurs aberrantes (Outliers) en raison de sa dépendance à chaque point de données.
  • La Médiane (Median) : C’est la valeur centrale une fois les données triées (elle coupe le jeu en deux moitiés de 50%). Elle offre une robustesse statistique bien supérieure face aux valeurs extrêmes.
    • Attention Architecturale : Le calcul de la médiane est beaucoup plus coûteux en ressources CPU, car il nécessite d’effectuer une opération de tri (Sort) sur des millions de lignes.
  • Le Mode : Représente la valeur la plus fréquente, très utile pour les variables textuelles/catégorielles.

4.2.2 📏 Dispersion

Savoir où est le centre ne suffit pas ; il faut savoir si les données sont très resserrées autour de ce centre ou au contraire très étalées.

  • La Variance et l’Écart-type (Standard Deviation) : Ces mesures évaluent la fluctuation des données autour de la moyenne (\mu). Un écart-type (\sigma) élevé indique une forte volatilité des données.
  • Quartiles et Percentiles : Ils divisent l’ensemble de données en sections de taille égale (les quartiles divisent en 4 blocs de 25%). Ils sont à la base des graphiques “Boîtes à moustaches” (Boxplots) pour détecter visuellement les valeurs aberrantes.

4.2.3 ⚙️ Précision Numérique

En tant qu’ingénieur, vous devez savoir que les statistiques sur ordinateur sont soumises aux limites du matériel.

L’arithmétique en virgule flottante standard (IEEE 754) est notoirement non-associative : l’ordre des opérations modifie les décimales du résultat. Pour l’IA financière, on utilise désormais des types spécifiques comme Decimal (échelle fixe évitant les débordements) ou Int128. Là où le type classique Int64 est limité à 9 quintillions, le Int128 capture une plage 18 quintillions de fois plus large, évitant la saturation de la RAM lors de calculs d’agrégation massive.

4.2.4 🗺️ Moyenne vs Médiane

Pour choisir la mesure de tendance centrale la plus adaptée, vous devez évaluer la sensibilité aux valeurs aberrantes (outliers) et la complexité de calcul induite.

Ce schéma résume la stratégie de choix et son impact sur les ressources matérielles :

flowchart LR
    A[Données avec Outliers ?] -->|Oui| B(Utiliser la Médiane)
    A -->|Non| C(Utiliser la Moyenne)
    
    B --> D{Coût en RAM/CPU}
    D -.->|Élevé| E[Nécessite un Tri complet]
    
    C --> F{Coût en RAM/CPU}
    F -.->|Faible| G[Opération SIMD directe]
    
    style A fill:#cb4b16,stroke:#073642,color:#fdf6e3
    style B fill:#859900,stroke:#073642,color:#fdf6e3
    style C fill:#859900,stroke:#073642,color:#fdf6e3

4.3 🔗 Relations et Corrélations

Le terrain de jeu des interprétations fallacieuses

L’analyse bivariée permet de déceler les structures cachées et les dépendances entre vos colonnes. Cependant, c’est aussi le domaine où les Data Scientists débutants commettent le plus d’erreurs d’interprétation. Distinguer une simple co-occurrence statistique d’une véritable relation causale est tout l’enjeu de cette étape.

Pour évaluer la force des liens entre vos variables, la communauté s’est longtemps reposée sur des matrices mathématiques classiques. Mais face à la complexité des données modernes (non-linéaires, catégorielles), de nouveaux outils sont apparus.

4.3.1 🗺️ Le Pairplot : La Vision Globale

Avant de plonger dans des coefficients mathématiques isolés, le premier réflexe d’un explorateur de données est de générer un Pairplot (ou matrice de nuages de points).

Cet outil projette l’ensemble des relations bivariées possibles d’un jeu de données sous forme d’une grille de graphiques : * Sur la diagonale : Il affiche l’analyse univariée (histogramme ou courbe de densité KDE) de chaque variable, permettant de voir sa distribution individuelle. * Hors diagonale : Il affiche un nuage de points (Scatter Plot) croisant la variable de la ligne avec celle de la colonne. * L’argument magique hue : Permet de colorer les points en fonction d’une variable catégorielle (ex: le type de produit, le diagnostic médical ou le type de bien). Cette simple coloration révèle instantanément des regroupements naturels (clusters) ou des séparations évidentes dans l’espace des caractéristiques.

📊 Matrice Interactive de Pairplot (Analyse Croisée)

Explorez ci-dessous une véritable matrice de Pairplot 3 \times 3 sur des données immobilières.

Instructions : 1. Cliquez sur n’importe quelle cellule de la grille pour afficher son analyse pédagogique détaillée dans le panneau de droite. 2. Changez la coloration via le menu déroulant hue pour observer comment la séparation des données en classes de biens (Maison vs Appartement) apparaît à l’écran.

💻 Implémentation en Python avec Seaborn

La librairie Seaborn simplifie cette génération complexe en une seule ligne de code :

import seaborn as sns
import matplotlib.pyplot as plt

# Chargement d'un jeu de données et affichage du pairplot
# 'hue' colore les points par catégorie et dessine des KDE séparés sur la diagonale
sns.pairplot(df, hue="Type_Bien", palette="solarized", diag_kind="kde")
plt.show()

4.3.2 📉 Linéarité et Rangs

  • Corrélation de Pearson : Le test statistique le plus célèbre. Il évalue le degré de dépendance linéaire exacte entre deux variables numériques continues.
    • Indicateur : Il renvoie un score entre -1 (corrélation négative parfaite) et 1 (corrélation positive parfaite). Un score de 0 indique l’absence de corrélation linéaire.
    • Le Piège : Il suppose une relation proportionnelle constante. Si la relation dessine une courbe (ex: une parabole en forme de U), Pearson renverra 0, vous faisant croire à tort qu’il n’y a aucun lien.
  • Corrélation de Spearman : Contrairement à Pearson, Spearman s’appuie sur les rangs des valeurs plutôt que sur les valeurs brutes.
    • L’Avantage : Il est capable de capturer des relations monotones non-linéaires (si X augmente, Y augmente, peu importe la vitesse) et se montre totalement insensible aux valeurs extrêmes qui pollueraient une matrice de Pearson.

4.3.3 🚀 Coefficients Avancés

L’échec des corrélations linéaires a poussé l’industrie à adopter des métriques agnostiques, capables de gérer le mélange de textes et de nombres.

  • Predictive Power Score (PPS) : Score asymétrique de 0 à 1. Au lieu de faire des mathématiques pures, il entraîne un mini-Arbre de Décision en arrière-plan pour voir si la variable A permet de deviner la variable B.
    • Avantage : Il détecte les relations non-linéaires.
    • Asymétrie : Le fait que “Code Postal” prédise le “Prix du loyer” ne signifie pas que le “Prix du loyer” permet de prédire exactement un “Code Postal”. Pearson, lui, est toujours symétrique.
  • Coefficient Phik (\phi_k) : Coefficient de corrélation extrêmement robuste qui fonctionne de manière cohérente pour des types de variables mixtes (catégorielles, ordinales, intervalles).

4.3.4 Simulation : Les limites de Pearson

Pour bien comprendre la différence entre Pearson (linéaire) et une véritable force prédictive (non-linéaire), observez comment les scores réagissent face à différentes distributions de données.

📈 Les Limites de Pearson

Sélectionnez les différents profils de distribution et observez comment le coefficient de corrélation linéaire de Pearson réagit par rapport à une force prédictive non-linéaire.

4.3.5 ⚖️ Corrélation n’est pas Causalité

C’est le mantra de la Data Science. Si l’EDA permet d’observer que deux variables évoluent de pair, ce lien mathématique n’implique jamais de facto qu’une variable est la cause de l’évolution de l’autre.

  • La variable de confusion : Par exemple, il existe une forte corrélation positive entre les ventes de crèmes glacées et les noyades. Est-ce que manger une glace provoque la noyade ? Non. La variable de confusion cachée est la chaleur estivale, qui provoque simultanément l’augmentation des deux phénomènes.
  • L’EDA sert de générateur d’hypothèses, qui doivent ensuite être validées par le métier ou par des tests A/B.

4.4 🧩 Regroupement et Segmentation

Méfiez-vous de la moyenne globale

Calculer le salaire moyen de l’ensemble d’une entreprise donne une information, mais elle masque les réalités locales. C’est en segmentant ces données (ex: Salaire moyen par département et par niveau d’ancienneté) que l’on extrait la véritable valeur métier. La transformation de données brutes en segments actionnables repose sur une mécanique que tout ingénieur Data doit maîtriser : le Split-Apply-Combine.

4.4.1 🧩 Split-Apply-Combine

Derrière la célèbre fonction .groupby(), le moteur de calcul (qu’il s’agisse de Pandas ou de Polars) effectue toujours trois opérations distinctes :

  1. Split (Diviser) : Le jeu de données original est scindé en sous-groupes selon des clés définies (ex: le genre, la ville). Cette étape repose sur des algorithmes de hachage (hashing) en mémoire.
  2. Apply (Appliquer) : Une fonction d’agrégation (moyenne, somme, comptage, ou même un modèle IA) est exécutée indépendamment sur chaque sous-groupe.
  3. Combine (Recombiner) : Les résultats isolés sont réassemblés dans une nouvelle structure de données propre et unifiée.

🔄 Pipeline Split-Apply-Combine

Sélectionnez la fonction d’agrégation et observez comment le moteur scinde le jeu de données d’origine, calcule les valeurs intermédiaires pour chaque groupe et les recombine dans une structure propre.

4.4.2 🏎️ GroupBy vs Pivot Table

Un point de friction classique pour le Data Scientist est de choisir entre .groupby().agg() et .pivot_table(). Bien qu’elles produisent des résultats similaires, leur mécanique interne est fondamentalement différente.

  • L’implémentation de pivot_table utilise souvent des boucles Python pures sous le capot pour appliquer vos fonctions, ce qui est extrêmement lent.
  • L’implémentation de groupby().agg() vérifie d’abord si une fonction optimisée en C/Cython est disponible pour ce que vous demandez (comme sum ou mean). Si oui, le moteur court-circuite Python et utilise le code C compilé. Sur des millions de lignes, groupby peut être jusqu’à 60 fois plus rapide.

4.4.3 📊 Découpage et Discrétisation (Binning)

Une autre forme de segmentation statistique très courante consiste à transformer une variable continue (ex : l’âge ou le poids des marchandises) en une variable catégorielle ordonnée (ex : tranches de poids [0-200], [200-1000], etc.). C’est ce qu’on appelle la discrétisation ou le binning.

Pandas propose deux outils fondamentaux pour réaliser cela :

  1. pd.cut (Découpage par intervalles réguliers ou spécifiques) : Divise la plage de valeurs en intervalles définis ou d’égale largeur. C’est parfait lorsque vous voulez des catégories métiers bien définies.
  2. pd.qcut (Découpage par quantiles/effectifs égaux) : Divise les données de sorte que chaque groupe contienne le même nombre d’observations (ex : quartiles, déciles). C’est idéal pour créer des groupes de taille homogène.
import pandas as pd

# Exemple de découpage par intervalles spécifiques (pd.cut)
df_manifeste['categorie_poids'] = pd.cut(
    df_manifeste['poids_kg'], 
    bins=[0, 200, 1000, float('inf')], 
    labels=['Léger', 'Moyen', 'Lourd']
)

# Exemple de découpage par quantiles (pd.qcut en 4 groupes égaux / quartiles)
df_manifeste['quartile_poids'] = pd.qcut(
    df_manifeste['poids_kg'], 
    q=4, 
    labels=['Q1', 'Q2', 'Q3', 'Q4']
)

4.5 🕵️‍♂️ Mission 4

Vous descendez sur le pont inférieur face au conteneur suspect marqué d’un “C”. Il est verrouillé par un cadenas numérique à 4 chiffres. Le capitaine du port vous transmet le manifeste des marchandises chargées aujourd’hui. Exécutez la cellule pour examiner le manifeste :

import pandas as pd

# Manifeste des marchandises du port
data_manifeste = {
    'proprietaire': ['Alice', 'Bob', 'Charlie', 'Alice', 'Charlie', 'Diana', 'Charlie'],
    'type_marchandise': ['Textiles', 'Electronique', 'Poissons', 'Meubles', 'Glace', 'Livres', 'Produits Chimiques'],
    'poids_kg': [150, 420, 1042, 300, 2105, 50, 1000]
}
df_manifeste = pd.DataFrame(data_manifeste)

print("Manifeste récupéré avec succès !")
display(df_manifeste)

Un docker vous glisse une information : “Le code du cadenas est toujours le poids total cumulé des marchandises du propriétaire.”

Votre objectif : Utiliser le regroupement de données (groupby) pour calculer le poids total des marchandises de chaque propriétaire, et déduire le code de Charlie.

4.6 TP2 : L’Enquête Dimensionnelle (EDA)

Félicitations ! Grâce à votre travail de Data Wrangling (TP1), la base de données du Spaceship Titanic est propre et exploitable. Néanmoins, une question fondamentale subsiste : quel est le profil des passagers qui ont été transportés dans une autre dimension spatio-temporelle ?

Dans ce deuxième TP, vous incarnerez un Analyste de l’équipe de sauvetage et explorerez ces données pour identifier des tendances et des profils types qui permettront d’aider les équipes de recherche spatiale.

4.6.1 🎯 Objectifs Pédagogiques

  • Statistiques Descriptives Globales : Dresser un état des lieux de base de la population à l’aide de méthodes globales (.describe() et .value_counts()) pour évaluer le taux de disparition global et l’âge moyen des passagers.
  • Tris Croisés & Analyse Croisée : Croiser des variables qualitatives stratégiques (le statut VIP et la cible Transported) via pd.crosstab() pour vérifier scientifiquement la rumeur selon laquelle les cabines VIP offraient une protection contre l’anomalie.
  • Regroupement et Profilage : Regrouper les passagers selon leur planète d’origine (HomePlanet) à l’aide de .groupby() et .agg() pour modéliser leurs comportements et leurs dépenses moyennes.
  • Matrice de Corrélation : Évaluer et cartographier les interactions financières des passagers (RoomService, Spa, VRDeck, etc.) à l’aide de matrices de corrélation (.corr()) pour détecter des motifs d’achat corrélés.

4.6.2 📁 Fichiers du TP

Vous pouvez explorer l’arborescence des fichiers du TP ci-dessous et télécharger directement l’archive de départ :

4.7 🌉 Conclusion et Transition

L’analyse exploratoire et la visualisation nous ont permis de comprendre les tendances, les profils types et les corrélations au sein de nos données. Armés de ces connaissances, nous sommes maintenant prêts à passer à la modélisation pour prédire des tendances ou segmenter nos données.

C’est ce que nous allons explorer dans le Chapitre 5 : Modélisation et Machine Learning.

IBM. n.d. “What Is Exploratory Data Analysis?” https://www.ibm.com/think/topics/exploratory-data-analysis.