Come gestire i dati mancanti

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

Media, mediana e modalità

Il calcolo della media, mediana o modalità generale è un metodo di imputazione molto semplice, è l’unica funzione testata che non sfrutta le caratteristiche della serie temporale o la relazione tra le variabili. È molto veloce, ma ha chiari svantaggi. Uno svantaggio è che l’imputazione media riduce la varianza nel set di dati.

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"

Regressione lineare

Per iniziare, vengono identificati diversi predittori della variabile con valori mancanti utilizzando una matrice di correlazione. I migliori predittori sono selezionati e utilizzati come variabili indipendenti in un’equazione di regressione. La variabile con dati mancanti viene usata come variabile dipendente. I casi con dati completi per le variabili predittive sono usati per generare l’equazione di regressione; l’equazione è poi usata per predire i valori mancanti per i casi incompleti. In un processo iterativo, i valori per la variabile mancante sono inseriti e poi tutti i casi sono usati per predire la variabile dipendente. Questi passi vengono ripetuti fino a quando c’è poca differenza tra i valori predetti da un passo all’altro, cioè convergono.
In teoria fornisce buone stime per i valori mancanti. Tuttavia, ci sono diversi svantaggi di questo modello che tendono a superare i vantaggi. In primo luogo, poiché i valori sostituiti sono stati predetti da altre variabili, tendono ad adattarsi “troppo bene” e quindi l’errore standard si sgonfia. Si deve anche assumere che ci sia una relazione lineare tra le variabili usate nell’equazione di regressione quando potrebbe non esserci.

Imputazione multipla

  1. Imputazione: Imputa le voci mancanti degli insiemi di dati incompleti m volte (m=3 nella figura). Si noti che i valori imputati sono estratti da una distribuzione. La simulazione di estrazioni casuali non include l’incertezza nei parametri del modello. Un approccio migliore è quello di usare la simulazione Markov Chain Monte Carlo (MCMC). Questo passo si traduce in m serie di dati completi.
  2. Analisi: Analizzare ciascuno dei m set di dati completi.
  3. Pooling: Integrare i risultati di m analisi in un risultato finale

Fonte: http://www.stefvanbuuren.nl/publications/mice%20in%20r%20-%20draft.pdf
# 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)

Questo è di gran lunga il metodo preferito per l’imputazione per le seguenti ragioni:
– Facile da usare
– Nessuna distorsione (se il modello di imputazione è corretto)

Imputazione di variabili categoriche

  1. La modalità di imputazione è un metodo, ma introduce sicuramente una distorsione
  2. I valori mancanti possono essere trattati come una categoria separata. Possiamo creare un’altra categoria per i valori mancanti e usarli come un livello diverso. Questo è il metodo più semplice.
  3. Modelli predittivi: Qui, creiamo un modello predittivo per stimare i valori che sostituiranno i dati mancanti. In questo caso, dividiamo il nostro set di dati in due set: Un set senza valori mancanti per la variabile (training) e un altro con valori mancanti (test). Possiamo usare metodi come la regressione logistica e l’ANOVA per la predizione
  4. Imputazione multipla

KNN (K Nearest Neighbors)

Ci sono altre tecniche di apprendimento automatico come XGBoost e Random Forest per l’imputazione dei dati, ma noi discuteremo KNN perché è ampiamente usato. In questo metodo, k vicini sono scelti in base a qualche misura di distanza e la loro media è usata come stima di imputazione. Il metodo richiede la selezione del numero di vicini più vicini e una metrica di distanza. KNN può prevedere sia attributi discreti (il valore più frequente tra i k vicini più vicini) che attributi continui (la media tra i k vicini più vicini)
La metrica di distanza varia a seconda del tipo di dati:
1. Dati continui: Le metriche di distanza comunemente usate per i dati continui sono Euclidea, Manhattan e Coseno
2. Dati Categorici: La distanza di Hamming è generalmente usata in questo caso. Prende tutti gli attributi categorici e per ognuno, conta uno se il valore non è lo stesso tra due punti. La distanza di Hamming è quindi uguale al numero di attributi per i quali il valore era diverso.
Una delle caratteristiche più interessanti dell’algoritmo KNN è che è semplice da capire e facile da implementare. La natura non parametrica di KNN gli dà un vantaggio in alcune impostazioni in cui i dati possono essere altamente “insoliti”.
Uno degli svantaggi evidenti dell’algoritmo KNN è che diventa dispendioso in termini di tempo quando si analizzano grandi set di dati perché cerca istanze simili attraverso l’intero set di dati. Inoltre, l’accuratezza di KNN può essere gravemente degradata con dati ad alta dimensione perché c’è poca differenza tra il vicino più vicino e quello più lontano.

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)

Tra tutti i metodi discussi sopra, l’imputazione multipla e KNN sono ampiamente utilizzati, e l’imputazione multipla essendo più semplice è generalmente preferita.

Se avete domande su questo post, chiedete pure nei commenti e farò del mio meglio per rispondere.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.