Tecniche di data imputation: come gestire dati mancanti in un dataset

Immagine di copertina

Nell’analisi dei dati, la gestione dei valori mancanti è un passaggio fondamentale per garantire l’accuratezza e l’affidabilità dei risultati. La data imputation, o imputazione dei dati, consiste nel gestire o sostituire i valori mancanti con valori plausibili. Questa tecnica è essenziale per evitare che i dati mancanti influenzino negativamente le analisi statistiche e le previsioni.

In questo tutorial, esploreremo le principali tecniche di imputazione dei dati e come applicarle in Python.

Cosa vedrai

Tecniche di Imputazione

Imputazione con il valore medio

Descrizione: Questa tecnica sostituisce i valori mancanti con la media dei dati disponibili. Caso d’uso: Ideale per dataset semplici e quando si desidera una rapida analisi, e si hanno a disposizione dati numerici o trasformabili in tali. Perché usarla: Facile da implementare e veloce, ma potrebbe non catturare completamente la variabilità dei dati.

Esempio in Python:

from sklearn.impute import SimpleImputer
import pandas as pd
import numpy as np

# Creazione di un dataset di esempio
data = {'Età': [20, np.nan, 22, 21]}
df = pd.DataFrame(data)

# Imputazione con la media
imputer = SimpleImputer(strategy='mean')
df['Età'] = imputer.fit_transform(df[['Età']])

Imputazione con la moda

Descrizione: Sostituisce i valori mancanti con il valore più frequente, definito come moda in statistica. Caso d’uso: Ottima per dati categoriali, specialmente quando la moda ha un significato importante (e.g.: trend stagionali, classificazione) Perché usarla: Preserva la distribuzione dei dati per le variabili categoriali.

Esempio in Python:

# Creazione di un dataset di esempio categorico
data = {'Genere': ['Maschio', np.nan, 'Femmina', 'Maschio']}
df = pd.DataFrame(data)

# Imputazione con la modalità
imputer = SimpleImputer(strategy='most_frequent')
df['Genere'] = imputer.fit_transform(df[['Genere']])

Imputazione con il valore mediano

Descrizione: Sostituisce i valori mancanti con la mediana dei dati disponibili. Caso d’uso: Ideale per dati numerici con valori eterogenei (che contengono outliers). Perché usarla: Solitamente suggerita come base di partenza per molte tipologie di analisi, perché più robusta rispetto all’imputazione con la media in presenza di outliers.

Esempio in Python:

# Utilizza la mediana come strategia di imputazione
imputer = SimpleImputer(strategy='median')
df['Età'] = imputer.fit_transform(df[['Età']])

K-Nearest Neighbors (KNN)

Descrizione: Trova i K vicini più prossimi e imputa i valori in base a questi. Caso d’uso: Ideale per dataset complessi con relazioni strutturate. Perché usarla: Cattura i pattern locali e le relazioni nei dati.

Esempio in Python:

from sklearn.impute import KNNImputer

# Creazione di un dataset di esempio
data = {'Età': [20, np.nan, 22, 21], 'Altezza': [170, 165, np.nan, 175]}
df = pd.DataFrame(data)

# Imputazione con KNN
imputer = KNNImputer(n_neighbors=2)
df_imputed = imputer.fit_transform(df)
df_imputed = pd.DataFrame(df_imputed, columns=df.columns)

Imputazione Iterativa

Descrizione: Imputa i valori mancanti iterativamente usando modelli predittivi. Caso d’uso: Dataset grandi con relazioni complesse. Perché usarla: Gestisce bene più variabili e relazioni, ma può essere lenta.

Esempio in Python:

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

# Abilita l'imputazione iterativa
enable_iterative_imputer()

# Creazione di un dataset di esempio
data = {'Età': [20, np.nan, 22, 21], 'Altezza': [170, 165, np.nan, 175]}
df = pd.DataFrame(data)

# Esecuzione dell'imputazione iterativa
imputer = IterativeImputer(max_iter=10, random_state=0)
df_imputed = imputer.fit_transform(df)
df_imputed = pd.DataFrame(df_imputed, columns=df.columns)

Scegliere la Tecnica Giusta

Si tratta di un’attività che richiede di tenere in considerazione diversi fattori:

  • Complessità dei dati: Per dataset semplici, media o moda potrebbero essere sufficienti, a seconda del tipo di dato. Per dataset più complessi, potrebbe essere utile utilizzare delle tecniche più avanzate come KNN, FKM o bPCA.
  • Tipo di dato: Utilizza la moda per dati categorici e media o mediana per dati numerici.
  • Dimensione del dataset: MICE è efficace per grandi dataset ma, come detto, può essere lento, mentre bPCA è adatta per dati ad alta dimensionalità.
  • Risorse a disposizione: I metodi che usano tecniche di ML richiedono molte risorse, anche se sono particolarmente indicati per gestire pattern complessi.

E se la mancanza di quei dati non fosse casuale? Il termine MNAR (“Missing not a random”) indica l’assenza di alcuni valori in casi in cui non sia possibile imputarli, come può essere lo status di fumatore o meno di un paziente che sta per subire un’operazione chirurgica: è possibile considerare metodi come MICE o random forest che per gestire questi casi, tenendo conto che un’imputazione sbagliata, potrebbe avere un peso rilevante.

Riepilogo delle tecniche

Di seguito, riportiamo una tabella riepilogativa delle tecniche illustrate e di alcune citate, dei casi d’uso e di come funzionano:

Tecnica di ImputazioneDescrizioneQuando UtilizzarePerché Utilizzarla
Imputazione con la mediaSostituisce i valori mancanti con la media dei dati disponibili.Dataset semplici, analisi rapide.Facile da implementare, veloce, ma potrebbe non catturare completamente la variabilità dei dati.
Imputazione con la modaSostituisce i valori mancanti con il valore più frequente.Dati categoriali, specialmente quando la modalità ha un significato importante.Preserva la distribuzione dei dati per le variabili categoriali.
Imputazione con la medianaSostituisce i valori mancanti con la mediana dei dati disponibili.Dati numerici con valori estremi (outliers).Più robusta rispetto all’imputazione con la media in presenza di outliers.
K-Nearest Neighbors (KNN)Trova i K vicini più prossimi e imputa i valori in base a questi.Dataset complessi con relazioni strutturate.Cattura i pattern locali e le relazioni nei dati.
Fuzzy K-Means (FKM)Estensione del KNN che utilizza clustering fuzzy.Piccoli dataset con relazioni complesse.Offre migliori prestazioni in alcuni scenari, specialmente con piccoli dataset.
Bayesian PCA (bPCA)Utilizza metodi bayesiani per imputare i valori mancanti tramite PCA.Dati ad alta dimensionalità, relazioni complesse.Robusta per dati ad alta dimensionalità, cattura la struttura sottostante.
Imputazione Multipla per Catene di Equazioni (MICE)Imputa i valori mancanti iterativamente usando modelli predittivi.Grandi dataset, relazioni complesse.Gestisce bene più variabili e relazioni, ma può essere lenta.

Considerazioni finali

L’imputazione dei dati è una fase critica nell’analisi dei dati, poiché può influenzare significativamente i risultati finali. La scelta della tecnica di imputazione dipende dalle caratteristiche del dataset e dall’obiettivo dell’analisi. È importante valutare attentamente le tecniche disponibili e selezionare quella più adatta al proprio caso d’uso.

Inoltre, è fondamentale considerare l’impatto dell’imputazione sui risultati finali. Come già evidenziato, un’imputazione inaccurata può portare a conclusioni errate, mentre un’imputazione ben eseguita può migliorare notevolmente la qualità dell’analisi. Pertanto, è cruciale testare diverse tecniche e valutare i risultati per garantire che l’imputazione sia stata eseguita in modo ottimale.

Risorse utili

Conosci meglio chi ha scritto questo articolo

Serena Sensini

Ciao! Mi chiamo Serena Sensini e sono la creatrice di @ TheRedCode.it. Ho aperto questo blog nel 2021 per raccontare il mio lavoro e il mondo dell’informatica a parole semplici, in piccole pillole e alla portata di tutte le persone.

Sono un’ingegnera informatica specializzata in ambito AI & NLP. Di giorno lavoro come CTO @ Welyk e come Innovation & Emerging Technologies Leader @ Dedalus, mentre di notte scrivo e sono autrice di 5 libri -per ora-. 🖊️

Foto di Serena Sensini

Partners

Community, aziende e persone che supportano attivamente il blog

Vuoi diventare tech content creator? 🖊️

Se ti va di raccontare la tua esperienza nel mondo tech, questo è il posto giusto.

Cerchiamo voci autentiche, esempi pratici e punti di vista utili per chi legge.

Scrivici a collaborazioni[at]theredcode.it con una proposta: idea, taglio del contenuto e una breve presentazione. Non vediamo l'ora di leggere la tua esperienza!

Invia la tua idea