Le diagnostic de qualité des données est systématiquement la première étape d un projet data. En entretien, on évalue la rigueur de cette phase souvent négligée.
Quelle est votre démarche systématique quand vous découvrez un nouveau dataset ?
import pandas as pd
import numpy as np
# Étape 1 : vue d ensemble
print(df.shape) # dimensions
print(df.dtypes) # types de colonnes
print(df.head())
print(df.describe()) # statistiques descriptives
# Étape 2 : valeurs manquantes
missing = df.isnull().sum()
missing_pct = (missing / len(df) * 100).sort_values(ascending=False)
print(missing_pct[missing_pct > 0])
# Étape 3 : doublons
print(f'Doublons complets: {df.duplicated().sum()}')
print(f'Doublons sur clé: {df.duplicated(subset=["order_id"]).sum()}')
# Étape 4 : distributions
for col in df.select_dtypes(include='number').columns:
print(f'{col}: min={df[col].min():.2f}, max={df[col].max():.2f}, '
f'mean={df[col].mean():.2f}, median={df[col].median():.2f}')Comment utilisez-vous YData Profiling pour accélérer le diagnostic ?
from ydata_profiling import ProfileReport
# Rapport complet (attention : lent sur >100k lignes)
profile = ProfileReport(
df,
title='Diagnostic qualité - Commandes 2024',
explorative=True
)
profile.to_file('diagnostic_qualite.html')
# Rapport minimal pour les gros volumes
profile_minimal = ProfileReport(
df,
minimal=True, # désactive les corrélations coûteuses
title='Diagnostic rapide'
)
# Ce que le rapport contient automatiquement :
# - Distribution de chaque variable
# - Valeurs manquantes et patterns
# - Corrélations (Pearson, Spearman, Cramér V)
# - Alertes automatiques (skewness, constantes, haute cardinalité)
# - Interactions entre variablesComment distinguez-vous MCAR, MAR et MNAR ? Pourquoi est-ce important ?
import missingno as msno
import matplotlib.pyplot as plt
# Visualiser les patterns de valeurs manquantes
msno.matrix(df) # pattern visuel
msno.heatmap(df) # corrélation entre colonnes manquantes
msno.dendrogram(df) # clustering des patterns
# Test de Little (MCAR vs non-MCAR)
# Si p-value < 0.05 : les données ne sont PAS MCAR
from scipy import stats
# Vérifier si les manquants dépendent d autres colonnes
df['income_missing'] = df['income'].isnull().astype(int)
print(df.groupby('income_missing')['age'].describe())
# Si l âge diffère selon income_missing -> MAR (pas MCAR)Quelles méthodes utilisez-vous pour détecter les valeurs aberrantes ?
import numpy as np
from scipy import stats
# Méthode 1 : IQR (robuste)
def detect_outliers_iqr(series):
Q1 = series.quantile(0.25)
Q3 = series.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
return series[(series < lower) | (series > upper)]
# Méthode 2 : Z-score (si distribution normale)
z_scores = np.abs(stats.zscore(df['amount']))
outliers_z = df[z_scores > 3]
# Méthode 3 : Isolation Forest (multivariée)
from sklearn.ensemble import IsolationForest
iso = IsolationForest(contamination=0.01, random_state=42)
df['is_outlier'] = iso.fit_predict(df[numeric_cols])
# -1 = outlier, 1 = normalComment identifiez-vous les features redondantes dans un dataset ?
import seaborn as sns
# Corrélations linéaires (Pearson)
corr_matrix = df.select_dtypes('number').corr()
# Visualiser avec heatmap
sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm')
# Identifier les paires très corrélées
upper = corr_matrix.where(
np.triu(np.ones(corr_matrix.shape), k=1).astype(bool)
)
high_corr = [(c, r, upper.loc[r, c])
for c in upper.columns
for r in upper.index
if abs(upper.loc[r, c]) > 0.95]
print('Features très corrélées (>0.95):', high_corr)
# Variance Inflation Factor (VIF) pour la multicolinéarité
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif = pd.DataFrame()
vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif['feature'] = X.columns
# VIF > 10 : multicolinéarité problématiqueQu est-ce qu un rapport de qualité de données actionnable ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Junior | df.describe(), valeurs manquantes, doublons | Fait une exploration systématique avant de modéliser | Commence à modéliser sans explorer les données |
| Confirmé | YData Profiling, IQR outliers, corrélations | Utilise YData Profiling, distingue MCAR/MAR/MNAR, détecte les outliers | Ne sait pas ce que sont MCAR et MAR |
| Senior | Isolation Forest, VIF, rapport de qualité structuré | Utilise des méthodes multivariées, produit un rapport avec recommandations | N a jamais produit de rapport de qualité de données |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.