Image par auteur | DALLE-3 & Canva
Les valeurs manquantes dans les ensembles de données réels sont un problème fréquent. Cela peut se produire pour diverses raisons, telles que des observations manquées, des erreurs de transmission de données, des dysfonctionnements de capteurs, etc. Nous ne pouvons pas simplement les ignorer car elles peuvent fausser les résultats de nos modèles. Nous devons soit les supprimer, soit les traiter pour compléter notre ensemble de données. La suppression de ces valeurs entraîne une perte d’informations, ce que nous préférons éviter. Les scientifiques ont donc développé différentes méthodes pour gérer ces valeurs manquantes, comme l’imputation et l’interpolation. Ces deux techniques sont souvent confondues ; l’imputation est un terme plus courant connu des débutants. Avant d’aller plus loin, clarifions la différence entre ces deux techniques.
L’imputation consiste à combler les valeurs manquantes avec des mesures statistiques telles que la moyenne, la médiane ou le mode. C’est simple, mais cela ne prend pas en compte la tendance de l’ensemble de données. En revanche, l’interpolation estime les valeurs manquantes en fonction des tendances et des modèles environnants. Cette approche est plus efficace lorsque les valeurs manquantes ne sont pas trop dispersées.
Maintenant que nous connaissons la différence entre ces techniques, discutons de certaines des méthodes d’interpolation disponibles dans Pandas, puis je vous montrerai un exemple. Ensuite, je partagerai quelques conseils pour vous aider à choisir la bonne technique d’interpolation.
Types de méthodes d’interpolation dans Pandas
Pandas propose diverses méthodes d’interpolation (‘linéaire’, ‘temps’, ‘index’, ‘valeurs’, ‘pad’, ‘le plus proche’, ‘zéro’, ‘linéaire’, ‘quadratique’, ‘cubique’, ‘barycentrique’, ‘krogh’, ‘polynomial’, ‘spline’, ‘piecewise_polynomial’, ‘from_derivatives’, ‘pchip’, ‘akima’, ‘cubicspline’) accessibles via la fonction interpolate()
. La syntaxe de cette méthode est la suivante :
DataFrame.interpolate(method='linear', **kwargs, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=_NoDefault.no_default, **kwargs)
Il existe de nombreuses méthodes, mais nous allons nous concentrer sur quelques-unes couramment utilisées :
- Interpolation linéaire : C’est la méthode par défaut, rapide et simple. Elle relie les points de données connus par une ligne droite pour estimer les valeurs manquantes.
- Interpolation temporelle : Utile lorsque vos données sont distribuées linéairement dans le temps mais pas uniformément espacées. Votre index doit être un index datetime pour remplir les valeurs manquantes en tenant compte des intervalles de temps.
- Interpolation d’index : Semblable à l’interpolation temporelle, elle utilise la valeur d’index pour calculer les valeurs manquantes. L’index doit transmettre des informations significatives comme la température ou la distance.
- Méthode Pad (Forward Fill) et Backward Fill : Copie la valeur existante pour remplir la valeur manquante. La direction de propagation peut être vers l’avant (Forward Fill) ou vers l’arrière (Backward Fill).
- Interpolation la plus proche : Utilise les variations locales des données pour remplir les valeurs manquantes avec la valeur la plus proche.
- Interpolation polynomiale : Adapte une fonction polynomiale aux points de données pour estimer les valeurs manquantes. Vous devez spécifier l’ordre du polynôme (par exemple, order=2 pour quadratique).
- Interpolation spline : Utilise des fonctions polynomiales par morceaux pour connecter les points de données, créant une courbe lisse. La méthode
piecewise_polynomial
est similaire mais n’assure pas la continuité des dérivées aux frontières.
Passons maintenant à un exemple pratique en utilisant l’ensemble de données Airline Passengers, qui contient des données mensuelles sur les passagers de 1949 à 1960, pour voir comment fonctionne l’interpolation.
Mise en œuvre du code : ensemble de données sur les passagers des compagnies aériennes
Nous allons introduire quelques valeurs manquantes dans l’ensemble de données sur les passagers des compagnies aériennes, puis les interpoler à l’aide de l’une des techniques ci-dessus.
Étape 1 : Effectuer des importations et charger un ensemble de données
Importez les bibliothèques de base et chargez le fichier CSV de cet ensemble de données dans un DataFrame à l’aide de la fonction pd.read_csv
.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Load the dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
df = pd.read_csv(url, index_col="Month", parse_dates=['Month'])
parse_dates
convertira la colonne « Mois » en un objet datetime
, et index_col
le définit comme index du DataFrame.
Étape 2 : Introduire les valeurs manquantes
Sélectionnons au hasard 15 instances différentes et marquons la colonne « Passagers » comme np.nan
représentant les valeurs manquantes.
# Introduce missing values
np.random.seed(0)
missing_idx = np.random.choice(df.index, size=15, replace=False)
df.loc[missing_idx, 'Passengers'] = np.nan
Étape 3 : Tracer des données avec des valeurs manquantes
Utilisons Matplotlib pour visualiser à quoi ressemblent nos données après avoir introduit 15 valeurs manquantes.
# Plot the data with missing values
plt.figure(figsize=(10,6))
plt.plot(df.index, df['Passengers'], label="Original Data", linestyle="-", marker="o")
plt.legend()
plt.title('Airline Passengers with Missing Values')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.show()
Graphique de l’ensemble de données d’origine
Vous pouvez voir que le graphique montre des lacunes aux emplacements des valeurs manquantes.
Étape 4 : Utilisation de l’interpolation
Bien que je partagerai quelques conseils plus tard pour vous aider à choisir la bonne technique d’interpolation, concentrons-nous sur cet ensemble de données. Nous savons qu’il s’agit de données de séries chronologiques, mais comme la tendance ne semble pas linéaire, une simple interpolation temporelle ne convient pas ici. Compte tenu des modèles et oscillations observés, l’interpolation spline est plus appropriée. Appliquons cela et vérifions le résultat après interpolation des valeurs manquantes.
# Use spline interpolation to fill in missing values
df_interpolated = df.interpolate(method='spline', order=3)
# Plot the interpolated data
plt.figure(figsize=(10,6))
plt.plot(df_interpolated.index, df_interpolated['Passengers'], label="Spline Interpolation")
plt.plot(df.index, df['Passengers'], label="Original Data", alpha=0.5)
plt.scatter(missing_idx, df_interpolated.loc[missing_idx, 'Passengers'], label="Interpolated Values", color="green")
plt.legend()
plt.title('Airline Passengers with Spline Interpolation')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.show()
Graphique après interpolation
Nous pouvons voir sur le graphique que les valeurs interpolées complètent les points de données et préservent également le modèle. Il peut désormais être utilisé pour des analyses ou des prévisions plus approfondies.
Conseils pour choisir la méthode d’interpolation
Voici quelques conseils pour choisir la méthode d’interpolation appropriée :
- Visualisez vos données pour comprendre leur distribution et leur modèle. Si les données sont régulièrement espacées et/ou si les valeurs manquantes sont distribuées de manière aléatoire, des techniques d’interpolation simples fonctionneront bien.
- Si vous observez des tendances ou une saisonnalité dans vos données de séries chronologiques, il est préférable d’utiliser une interpolation spline ou polynomiale pour préserver ces tendances tout en remplissant les valeurs manquantes, comme le montre l’exemple ci-dessus.
- Les polynômes de degré supérieur peuvent s’adapter de manière plus flexible mais sont sujets au surajustement. Gardez le degré bas pour éviter les formes déraisonnables.
- Pour les valeurs inégalement espacées, utilisez des méthodes basées sur l’indexation comme l’index et le temps pour combler les lacunes sans déformer l’échelle. Vous pouvez également utiliser le remplissage ou le remplissage ultérieur ici.
- Si vos valeurs ne changent pas fréquemment ou ne suivent pas une tendance à la hausse et à la baisse, l’utilisation de la valeur valide la plus proche fonctionne également bien.
- Testez différentes méthodes sur un échantillon de données et évaluez dans quelle mesure les valeurs interpolées correspondent aux points de données réels.
Pour explorer d’autres paramètres de la méthode `dataframe.interpolate`, consultez la documentation Pandas : Documentation Pandas.
Kanwal Mehreen Kanwal est un ingénieur en apprentissage automatique et un rédacteur technique passionné par la science des données et l’intersection de l’IA et de la médecine. Elle a co-écrit l’ebook « Maximiser la productivité avec ChatGPT ». En tant que Google Generation Scholar 2022 pour l’APAC, elle défend la diversité et l’excellence académique. Elle est également reconnue comme boursière Teradata Diversity in Tech, boursière Mitacs Globalink Research et boursière Harvard WeCode. Kanwal est un ardent défenseur du changement, ayant fondé FEMCodes pour autonomiser les femmes dans les domaines STEM.