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

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 Imputazione | Descrizione | Quando Utilizzare | Perché Utilizzarla |
---|---|---|---|
Imputazione con la media | Sostituisce 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 moda | Sostituisce 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 mediana | Sostituisce 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.