Accéder au contenu principal

Techniques clés pour gérer les valeurs manquantes que tout data scientist doit connaître

Découvrez des techniques efficaces pour traiter les valeurs manquantes et leurs implémentations en Python.
Actualisé 19 sept. 2026  · 15 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

La gestion des données manquantes est un problème courant et inhérent à la collecte de données, en particulier avec de grands jeux de données. Les causes sont multiples : informations incomplètes fournies par les participants, non-réponse de personnes refusant de partager des informations, questionnaires mal conçus ou encore suppression de données pour des raisons de confidentialité.

Mal gérées, les données manquantes peuvent biaiser les conclusions de toutes les analyses statistiques menées, et conduire l'entreprise à prendre de mauvaises décisions.

Cet article présente des techniques pour gérer efficacement les valeurs manquantes et leurs implémentations en Python. Nous illustrerons les avantages et limites de chaque méthode afin de vous aider à choisir la plus adaptée à chaque situation.

Identifier les données manquantes

Les données manquantes se présentent sous différents formats. Cette section explique les principaux types de valeurs manquantes et comment les repérer.

Types de données manquantes

On distingue trois grands types de données manquantes : (1) Missing Completely at Random (MCAR), (2) Missing at Random (MAR) et (3) Missing Not at Random (MNAR).

Il est essentiel de bien comprendre chacun d’eux pour choisir la méthode de traitement appropriée. 

1) MCAR - Missing completely at random

Ce cas survient lorsque toutes les variables et observations ont la même probabilité d’être manquantes. Imaginez donner à un enfant des Lego de différentes couleurs pour construire une maison. Chaque Lego représente une information, comme la forme ou la couleur. L’enfant peut en perdre certains pendant le jeu. Ces Lego perdus représentent une information manquante, tout comme lorsqu’il ne se souvient plus de la forme ou de la couleur d’une brique. Cette perte est aléatoire et n’affecte pas l’information qu’il détient sur les autres Lego. 

2) MAR - Missing at random

Pour MAR, la probabilité qu’une valeur soit manquante est liée à la valeur de la variable elle-même ou à d’autres variables du jeu de données. Autrement dit, toutes les observations et variables n’ont pas la même chance d’être manquantes. Exemple : dans une enquête auprès de la communauté data, les data scientists qui mettent rarement à jour leurs compétences sont plus susceptibles de ne pas connaître les nouveaux algorithmes ou technologies de pointe, et d’ignorer certaines questions. Ici, le caractère manquant dépend de la fréquence de la montée en compétences.

3) MNAR - Missing not at random

MNAR est généralement le scénario le plus complexe. Il s’applique lorsque ni MAR ni MCAR ne conviennent. La probabilité d’être manquant varie alors selon les valeurs d’une même variable, pour des raisons potentiellement inconnues. Exemple : dans une enquête sur les couples mariés, les couples en difficulté pourraient refuser de répondre à certaines questions par gêne.

Méthodes d’identification des données manquantes

Plusieurs méthodes permettent d’identifier les données manquantes dans pandas. Voici les plus courantes.

Fonctions

Descriptions

.isnull()

Retourne un dataframe pandas dont chaque valeur est un booléen : True si la valeur est manquante, False sinon.

.notnull()

À l’inverse, les valeurs sont False lorsqu’une valeur NaN ou None est détectée.

.info()

Génère trois colonnes principales, dont « Non-Null Count » qui indique le nombre de valeurs non manquantes par colonne.

.isna()

Semblable à isnull et notnull, mais affiche True uniquement quand la valeur manquante est de type NaN. 

Devenez un scientifique ML

Maîtriser Python pour devenir un scientifique de l'apprentissage automatique
Commencez À Apprendre Gratuitement

Gérer les données manquantes

Il existe plusieurs approches pour traiter les données manquantes. Cette section en couvre quelques-unes, avec leurs avantages et inconvénients.

Pour illustrer le cas d’usage, nous utiliserons les Loan Data disponibles sur DataLab ainsi que le code source présenté dans le tutoriel

Comme ce jeu de données ne contient pas de valeurs manquantes, nous utiliserons un sous-ensemble (100 lignes) et introduirons manuellement des valeurs manquantes.

import pandas as pd
sample_customer_data = pd.read_csv("data/customer_churn.csv",  nrows=100)
sample_customer_data.info()

Sample of 100 random samples

Échantillon de 100 observations avant l’introduction de valeurs manquantes

Introduisons 50 % de valeurs manquantes dans chaque colonne du dataframe.

import numpy as np
def introduce_nan(x,percentage):
n = int(len(x)*(percentage - x.isna().mean()))
idxs = np.random.choice(len(x), max(n,0), replace=False, p=x.notna()/x.notna().sum())
x.iloc[idxs] = np.nan

L’application de la fonction aux données produit le résultat suivant. 

sample_customer_data.apply(introduce_nan, percentage=.5)
sample_customer_data.info()

samples after introducing missing values

Échantillon de 100 observations après l’introduction de valeurs manquantes

Ci-dessous, les cinq premières lignes du jeu de données. 

sample_customer_data.head()

First five rows with null values

Cinq premières lignes avec des valeurs nulles

Suppression de données

La fonction dropna() est le moyen le plus simple de supprimer des observations ou des variables contenant des valeurs manquantes. Voici quelques techniques. 

1) Supprimer des observations avec des valeurs manquantes

Trois scénarios peuvent se produire lors de la suppression d’observations : 

  • dropna() : supprime toutes les lignes contenant des valeurs manquantes.
drop_na_strategy = sample_customer_data.dropna()
drop_na_strategy.info()

Drop observations

Suppression d’observations avec la fonction dropna() par défaut

On constate que toutes les observations sont supprimées, ce qui peut être très risqué pour la suite de l’analyse. 

  • dropna(how = ‘all’) : supprime les lignes où toutes les valeurs de colonnes sont manquantes.
drop_na_all_strategy = sample_customer_data.dropna(how="all")
drop_na_all_strategy.info()

D’après la sortie ci-dessous, aucune observation n’a toutes ses colonnes manquantes.

samples after introducing missing values

Suppression d’observations via la stratégie « all »

  • dropna(thresh = minimum_value) : supprime les lignes selon un seuil. Cette stratégie fixe un nombre minimal de valeurs non manquantes pour conserver les lignes. 
drop_na_thres_strategy = sample_customer_data.dropna(thresh=0.6)
drop_na_thres_strategy.info()

Avec un seuil à 60 %, le résultat est identique au précédent.

Drop observations using the “all” strategy

Suppression d’observations avec seuil

2) Supprimer des colonnes avec des valeurs manquantes

Le paramètre axis = 1 indique explicitement que l’on agit sur les colonnes et non sur les lignes. 

  • dropna(axis = 1) : supprime toutes les colonnes contenant des valeurs manquantes.
drop_na_cols_strategy = sample_customer_data.dropna(axis=1)
drop_na_cols_strategy.info()

Il ne reste plus aucune colonne : chacune contenait au moins une valeur manquante.

Empty dataframe after dropna

Dataframe vide après dropna() sur les colonnes

Comme beaucoup d’approches, dropna() a des atouts et des limites.

Avantages

  • Méthode directe et simple à utiliser.
  • Utile lorsque les valeurs manquantes sont sans importance. 

Inconvénients

  • Peut entraîner une perte d’information, source de biais dans le jeu de données final.
  • Inadaptée si les données ne sont pas manquantes complètement au hasard.
  • Avec une forte proportion de valeurs manquantes, la taille du jeu de données peut être fortement réduite, ce qui impacte toutes les analyses statistiques. 

Imputation par la moyenne/médiane

Ces stratégies de remplacement sont explicites : on remplace les valeurs manquantes d’une colonne par la moyenne ou la médiane des valeurs observées de cette colonne. 

La distribution normale est le cas idéal. Malheureusement, ce n’est pas toujours le cas. La médiane est alors utile car elle est moins sensible aux valeurs extrêmes.

En Python, la fonction fillna() de pandas permet d’effectuer ces remplacements. 

  • Exemple d’imputation par la moyenne.
mean_value = sample_customer_data.mean()
mean_imputation = sample_customer_data.fillna(mean_value)

Result of the mean imputation

Résultat de l’imputation par la moyenne

  • Exemple d’imputation par la médiane
median_value = sample_customer_data.median()
median_imputation = sample_customer_data.fillna(median_value)
median_imputation.head()

Result of the mean imputation

Résultat de l’imputation par la médiane

Avantages

  • Simplicité et mise en œuvre rapide.
  • L’imputation s’appuie sur l’information existante des données non manquantes, sans besoin de données additionnelles.
  • Peut fournir une bonne estimation des valeurs manquantes : la moyenne pour des données proches de la normale, la médiane pour des distributions asymétriques.

Inconvénients

  • Inapplicable aux variables catégorielles : réservé aux variables numériques.
  • La moyenne est sensible aux valeurs aberrantes et peut mal représenter la tendance centrale. La médiane peut aussi ne pas être représentative selon le contexte.
  • Suppose que les données soient MCAR, ce qui n’est pas toujours vrai. 

Imputation par échantillon aléatoire

Le principe diffère des méthodes précédentes et nécessite quelques étapes supplémentaires. 

  • Créer deux sous-ensembles à partir des données d’origine. 
  • Le premier contient les observations complètes, le second celles avec des valeurs manquantes. 
  • Sélectionner aléatoirement une observation dans chaque sous-ensemble.
  • Remplacer les données manquantes de l’observation incomplète par les valeurs correspondantes de l’observation complète.
  • Répéter jusqu’à ce qu’il n’y ait plus de valeurs manquantes.
def random_sample_imputation(df):
   
cols_with_missing_values = df.columns[df.isna().any()].tolist()

for var in cols_with_missing_values:

    # extract a random sample
    random_sample_df = df[var].dropna().sample(df[var].isnull().sum(),
                                                  random_state=0)
    # re-index the randomly extracted sample
    random_sample_df.index = df[
            df[var].isnull()].index

    # replace the NA
    df.loc[df[var].isnull(), var] = random_sample_df
 
return df
df = sample_customer_data.copy()
random_sample_imp_df = random_sample_imputation(sample_customer_data)
random_sample_imp_df.head()

Random sample imputation

Imputation par échantillon aléatoire

Avantages

  • Méthode simple et facile à mettre en œuvre.
  • Couvre à la fois les variables numériques et catégorielles.
  • Moins de distorsion de la variance et préservation de la distribution initiale, contrairement à la moyenne ou à la médiane.

Inconvénients

  • Le caractère aléatoire n’est pas toujours adapté et peut introduire du bruit, menant à des conclusions erronées. 
  • Comme la moyenne et la médiane, suppose des données MCAR.

Imputation multiple

Il s’agit d’une technique d’imputation multivariée : l’information manquante est comblée en tenant compte des autres variables. 

Par exemple, si le revenu d’une personne est manquant, il est incertain de savoir si elle a un crédit immobilier. Pour affiner l’estimation, on considère d’autres caractéristiques : score de crédit, profession, statut de propriétaire, etc.

La Multiple Imputation by Chained Equations (MICE) est l’une des méthodes les plus répandues en imputation multivariée. Pour mieux comprendre MICE, considérons l’ensemble de variables X1, X2, …, Xn, dont certaines ont des valeurs manquantes. 

L’algorithme fonctionne ainsi : 

  • Pour chaque variable, remplacer les valeurs manquantes par une imputation simple (p. ex. la moyenne), servant de « placeholders ».
  • Les « placeholders » de la première variable X1 sont régressés via un modèle où X1 est la variable dépendante et les autres sont indépendantes. On répète pour X2 comme dépendante, etc., jusqu’à ce que chaque variable ait joué le rôle de variable dépendante au moins une fois.
  • Remplacer ensuite les « placeholders » par les prédictions du modèle de régression.
  • Répéter le processus sur un certain nombre de cycles, généralement dix selon Raghunathan et al. 2002, en mettant à jour l’imputation à chaque itération. 
  • À la fin, les valeurs manquantes sont idéalement remplacées par des prédictions reflétant au mieux les relations observées dans les données.

L’implémentation s’appuie sur la bibliothèque miceforest

Commencez par installer la bibliothèque avec pip.

pip install miceforest

Puis importez le module ImputationKernel et créez le kernel d’imputation.

from miceforest import ImputationKernel

mice_kernel = ImputationKernel(
data = sample_customer_data,
save_all_iterations = True,
random_state = 2023
)

Exécutez ensuite le kernel sur deux itérations et générez les données imputées.

mice_kernel.mice(2)
mice_imputation = mice_kernel.complete_data()
mice_imputation.head()

Multiple imputation

Imputation multiple

Avantages

  • Très efficace pour traiter des valeurs manquantes sur plusieurs variables et types de données. 
  • Peut produire de bien meilleurs résultats que l’imputation par la moyenne ou la médiane. 
  • De nombreux algorithmes (comme K-Nearest Neighbors, Random forest, ou les réseaux de neurones) peuvent servir de moteur de prédiction pour l’imputation multiple.  

Inconvénients

  • Suppose des données MAR.
  • Peut être coûteuse en calcul par rapport à d’autres techniques, surtout avec de grands jeux de données. 
  • Demande plus d’efforts que les méthodes précédentes.

Parmi toutes les imputations, on peut identifier celles qui se rapprochent le plus de la distribution des données d’origine.

La moyenne (en jaune) et la médiane (en rouge) s’écartent nettement de la distribution originale de la colonne « Charge amount », elles ne sont donc pas idéales ici.

mean_imputation["Charge Amount Mean Imp"] = mean_imputation["Charge Amount"]
median_imputation["Charge Amount Median Imp"] = median_imputation["Charge Amount"]
random_sample_imp_df["Charge Amount Random Imp"] = random_sample_imp_df["Charge Amount"]

Avec les nouvelles colonnes créées pour chaque type d’imputation, nous pouvons tracer les distributions.

import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))

sample_customer_data["Charge Amount"].plot(kind='kde',color='blue')
mean_imputation["Charge Amount Mean Imp"].plot(kind='kde',color='yellow')
median_imputation["Charge Amount Median Imp"].plot(kind='kde',color='red')

Original data vs mean vs median

Distribution « Charge Amount » : données originales vs moyenne vs médiane

En traçant l’imputation multiple et l’imputation aléatoire ci-dessous, on observe un recouvrement quasi parfait avec les données originales. Ces imputations sont donc meilleures que la moyenne et la médiane.

random_sample_imp_df["Charge Amount Random Imp"] = random_sample_imp_df["Charge Amount"]
mice_imputation["Charge Amount MICE Imp"] = mice_imputation["Charge Amount"]

mice_imputation["Charge Amount MICE Imp"].plot(kind='kde',color='black')
random_sample_imp_df["Charge Amount Random Imp"].plot(kind='kde',color='purple')

plt.legend()

original data vs mean vs median vs MICE vs random

Distribution « Charge Amount » : original vs moyenne vs médiane vs MICE vs aléatoire

Le cours Handling Missing Data with Imputations in R est une excellente ressource pour approfondir les stratégies de traitement des valeurs manquantes. Il couvre la visualisation et les tests statistiques pour reconnaître les motifs de données manquantes, ainsi que leur imputation via des méthodes statistiques et de machine learning.  

Dans le même esprit, le cours Dealing with Missing Data in Python explique comment identifier, analyser, supprimer et imputer des données manquantes en Python.

Bonnes pratiques

Choisir la bonne méthode d’imputation selon le type de données manquantes

Il existe de nombreuses stratégies d’imputation et il ne faut pas les appliquer à l’aveugle. Adopter la bonne approche évite d’introduire des biais et de prendre de mauvaises décisions. 

Le tableau suivant indique quelles méthodes privilégier selon le type de données manquantes. La liste n’est pas exhaustive, mais regroupe les plus utilisées.

Type de données manquantes

Méthode d’imputation

Missing Completely At Random

Moyenne, médiane, mode ou toute autre méthode d’imputation

Missing At Random

Imputation multiple, imputation par régression

Missing Not At Random

Substitution par motif, estimation du maximum de vraisemblance

Évaluer l’impact de l’imputation sur l’analyse globale

Gardez à l’esprit que, quelle que soit la méthode, les données originales ne peuvent pas être « retrouvées ». En revanche, on peut générer des jeux imputés qui se rapprochent au mieux de la réalité. 

Voici quelques étapes clés pour l’évaluation.

  • Tester plusieurs techniques d’imputation afin d’identifier la plus robuste. Cela aide à repérer les biais et variations entre méthodes.
  • Comparer les données imputées finales aux données initiales non imputées pour juger de la fiabilité de la méthode. 
  • Inclure le processus d’imputation dans toute la chaîne d’analyse, du nettoyage des données jusqu’à la construction de tout modèle de machine learning. 

Communiquer les données manquantes et les méthodes d’imputation aux parties prenantes

Des données de qualité sont l’objectif de toute partie prenante et de tout professionnel de la donnée. 

L’honnêteté et la transparence sont essentielles lorsqu’on communique sur les données manquantes. Points d’attention : 

  • Préciser le contexte : MCAR, MAR ou MNAR.
  • Expliquer clairement et documenter les méthodes utilisées pour traiter les manquants, en détaillant avantages et limites.
  • Présenter les résultats de façon intelligible pour les parties prenantes.

Conclusion

Cet article a expliqué ce que sont les données manquantes et leur impact sur les décisions basées sur les données. Il a présenté plusieurs stratégies pour les traiter, ainsi que leurs forces et faiblesses, afin d’éclairer la prise de décision.

Nous espérons qu’il vous apporte des leviers concrets pour gérer efficacement vos problèmes de données manquantes.

Obtenez une certification en science des données

Validez vos compétences professionnelles de data scientist.

Faire Progresser Ma Carrière Dans Les Données
Timeline mobile.png

FAQ sur les valeurs manquantes

Qu’est-ce que les données manquantes ?

Les données manquantes signifient que certaines ou toutes les variables du jeu de données comportent des valeurs absentes.

Quels sont les différents types de données manquantes ?

On distingue trois principaux types de données manquantes : Missing Completely at Random (MCAR), Missing At Random (MAR) et Missing Not At Random (MNAR).

Comment gérer les données manquantes ?

Plusieurs approches existent pour traiter les valeurs manquantes : imputation par la moyenne, la médiane, le mode, imputation par échantillon aléatoire et imputation multiple. La liste n’est pas exhaustive et chaque méthode a ses avantages et ses limites.

Pourquoi les données manquantes sont-elles importantes ?

Elles sont cruciales à considérer car elles peuvent dégrader les performances de vos modèles de machine learning et biaiser les conclusions de vos analyses statistiques, menant ainsi l’entreprise à de mauvaises décisions.

Sujets
Analyse des données
Python

Meilleurs cours

Cours

Gérer les données manquantes en Python

4 h
26.1K
Apprenez à identifier, analyser, supprimer et imputer les données manquantes dans Python.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow