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

  • Di
  • 2025-05-13 - 5 minuti
banner

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

Post correlati

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di Coderful
Logo di DevDojo

Non perderti gli ultimi aggiornamenti, iscriviti a TheRedCode Digest!

La tecnologia corre, e tu devi correre più veloce per rimanere sempre sul pezzo! 🚀

Riceverai una volta al mese (o anche meno) con codici sconto per partecipare agli eventi del settore, quiz per vincere dei gadget e i recap degli articoli più interessanti pubblicati sul blog

Ci sto!

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!