1. L’Analyse Exploratoire des Données (EDA)

L’EDA (Exploratory Data Analysis), théorisée par John Tukey, est une étape fondamentale. Elle consiste à interroger les données sans présupposé rigide afin de faire émerger leur distribution, leurs asymétries et leurs anomalies cachées.

2. Indicateurs statistiques de position et de dispersion

Pour résumer une variable continue, la moyenne arithmétique ne suffit pas, notamment en présence de distributions asymétriques fréquentes en économie :

  • Médiane (Q2) et Quantiles : Mesure de tendance centrale insensible aux valeurs extrêmes. Le percentile 90 et l’écart interquartile (IQR = Q3 – Q1) permettent de cerner la variabilité centrale.
  • Variance et Écart-type : Quantification de la dispersion autour de la moyenne.
  • Asymétrie (Skewness) et Aplatissement (Kurtosis) : Déterminer si la distribution s’écarte significativement d’une loi normale (Gaussienne).

3. Analyse bivariée et matrices de corrélation

L’évaluation des relations linéaires et non linéaires entre variables nécessite le calcul de métriques précises :

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Matrice de corrélation de Pearson
corr_matrix = df[['montant_achat', 'age_client', 'score_fidelite', 'duree_session']].corr()

# Visualisation sous forme de Heatmap annotée
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title("Matrice de Corrélation - Profil Client Éducasuisse")
plt.show()

Attention au piège classique : corrélation ne signifie pas causalité. Deux variables corrélées peuvent être sous l’influence commune d’un facteur confondant non mesuré.

4. Détection et traitement des outliers (valeurs aberrantes)

Une valeur aberrante peut résulter d’une erreur d’enregistrement ou refléter un événement rare mais capital (ex. transaction frauduleuse). La règle des moustaches de Tukey basée sur l’écart interquartile offre un filtre robuste :

Q1 = df['montant_achat'].quantile(0.25)
Q3 = df['montant_achat'].quantile(0.75)
IQR = Q3 - Q1
borne_inf = Q1 - 1.5 * IQR
borne_sup = Q3 + 1.5 * IQR

outliers = df[(df['montant_achat'] < borne_inf) | (df['montant_achat'] > borne_sup)]
print(f"Nombre d'observations hors normes détectées : {len(outliers)}")