library(imputeTS)na.random(mydata) # Random Imputation
na.locf(mydata, option = "locf") # Last Obs. Carried Forward
na.locf(mydata, option = "nocb") # Next Obs. Carried Backward
na.interpolation(mydata) # Linear Interpolation
na.seadec(mydata, algorithm = "interpolation") # Seasonal Adjustment then Linear Interpolation
Moyenne, médiane et mode
Le calcul de la moyenne, de la médiane ou du mode global est une méthode d’imputation très basique, c’est la seule fonction testée qui ne tire aucun avantage des caractéristiques des séries temporelles ou de la relation entre les variables. Elle est très rapide, mais présente des inconvénients évidents. L’un des inconvénients est que l’imputation moyenne réduit la variance de l’ensemble de données.
library(imputeTS)na.mean(mydata, option = "mean") # Mean Imputation
na.mean(mydata, option = "median") # Median Imputation
na.mean(mydata, option = "mode") # Mode ImputationIn Python
from sklearn.preprocessing import Imputer
values = mydata.values
imputer = Imputer(missing_values='NaN', strategy='mean')
transformed_values = imputer.fit_transform(values)# strategy can be changed to "median" and "most_frequent"
Régression linéaire
Pour commencer, plusieurs prédicteurs de la variable à valeurs manquantes sont identifiés à l’aide d’une matrice de corrélation. Les meilleurs prédicteurs sont sélectionnés et utilisés comme variables indépendantes dans une équation de régression. La variable avec des données manquantes est utilisée comme variable dépendante. Les cas avec des données complètes pour les variables prédicteurs sont utilisés pour générer l’équation de régression ; l’équation est ensuite utilisée pour prédire les valeurs manquantes pour les cas incomplets. Dans un processus itératif, les valeurs de la variable manquante sont insérées, puis tous les cas sont utilisés pour prédire la variable dépendante. Ces étapes sont répétées jusqu’à ce qu’il y ait peu de différence entre les valeurs prédites d’une étape à l’autre, c’est-à-dire qu’elles convergent.
Cette méthode fournit « théoriquement » de bonnes estimations pour les valeurs manquantes. Cependant, ce modèle présente plusieurs inconvénients qui tendent à l’emporter sur les avantages. Tout d’abord, comme les valeurs remplacées ont été prédites à partir d’autres variables, elles ont tendance à s’emboîter « trop bien » et l’erreur standard est donc dégonflée. Il faut également supposer qu’il existe une relation linéaire entre les variables utilisées dans l’équation de régression alors qu’il n’y en a peut-être pas.
Imputation multiple
- Imputation : Imputez les entrées manquantes des ensembles de données incomplets m fois (m=3 dans la figure). Notez que les valeurs imputées sont tirées d’une distribution. La simulation de tirages aléatoires n’inclut pas l’incertitude des paramètres du modèle. Une meilleure approche consiste à utiliser la simulation de Monte Carlo par chaîne de Markov (MCMC). Cette étape donne lieu à m ensembles de données complets.
- Analyse : Analyser chacun des m ensembles de données complétés.
- Mise en commun : Intégrer les m résultats d’analyse dans un résultat final
# We will be using mice library in r
library(mice)
# Deterministic regression imputation via mice
imp <- mice(mydata, method = "norm.predict", m = 1)
# Store data
data_imp <- complete(imp)# Multiple Imputation
imp <- mice(mydata, m = 5)#build predictive model
fit <- with(data = imp, lm(y ~ x + z))#combine results of all 5 models
combine <- pool(fit)
C’est de loin la méthode la plus privilégiée pour l’imputation pour les raisons suivantes :
– Facile à utiliser
– Aucun biais (si le modèle d’imputation est correct)
Imputation de variables catégorielles
- L’imputation par mode est une méthode mais elle introduira certainement un biais
- Les valeurs manquantes peuvent être traitées comme une catégorie distincte en soi. Nous pouvons créer une autre catégorie pour les valeurs manquantes et les utiliser comme un niveau différent. C’est la méthode la plus simple.
- Modèles prédictifs : Ici, nous créons un modèle prédictif pour estimer les valeurs qui remplaceront les données manquantes. Dans ce cas, nous divisons notre ensemble de données en deux ensembles : Un ensemble sans valeurs manquantes pour la variable (formation) et un autre avec des valeurs manquantes (test). Nous pouvons utiliser des méthodes comme la régression logistique et l’ANOVA pour la prédiction
- Imputation multiple
KNN (K Nearest Neighbors)
Il existe d’autres techniques d’apprentissage automatique comme XGBoost et Random Forest pour l’imputation des données, mais nous allons parler de KNN car il est largement utilisé. Dans cette méthode, k voisins sont choisis en fonction d’une certaine mesure de distance et leur moyenne est utilisée comme estimation d’imputation. La méthode nécessite la sélection du nombre de voisins les plus proches et d’une mesure de distance. KNN peut prédire à la fois des attributs discrets (la valeur la plus fréquente parmi les k plus proches voisins) et des attributs continus (la moyenne parmi les k plus proches voisins)
La métrique de distance varie selon le type de données :
1. Données continues : Les métriques de distance couramment utilisées pour les données continues sont Euclidienne, Manhattan et Cosinus
2. Données catégorielles : La distance de Hamming est généralement utilisée dans ce cas. Elle prend tous les attributs catégoriels et pour chacun, comptez un si la valeur n’est pas la même entre deux points. La distance de Hamming est alors égale au nombre d’attributs pour lesquels la valeur était différente.
L’une des caractéristiques les plus attrayantes de l’algorithme KNN est qu’il est simple à comprendre et facile à mettre en œuvre. La nature non paramétrique de KNN lui donne un avantage dans certains contextes où les données peuvent être très « inhabituelles ».
Un des inconvénients évidents de l’algorithme KNN est qu’il devient chronophage lors de l’analyse de grands ensembles de données car il recherche des instances similaires à travers l’ensemble des données. De plus, la précision de KNN peut être sévèrement dégradée avec des données à haute dimension parce qu’il y a peu de différence entre le voisin le plus proche et le plus éloigné.
library(DMwR)
knnOutput <- knnImputation(mydata)In python
from fancyimpute import KNN
# Use 5 nearest rows which have a feature to fill in each row's missing features
knnOutput = KNN(k=5).complete(mydata)
Parmi toutes les méthodes discutées ci-dessus, l’imputation multiple et KNN sont largement utilisées, et l’imputation multiple étant plus simple est généralement préférée.
Si vous avez des questions sur ce post, veuillez les poser dans les commentaires et je ferai de mon mieux pour y répondre.