Vai al contenuto principale

Tecniche migliori per gestire i valori mancanti che ogni data scientist dovrebbe conoscere

Esplora diverse tecniche per gestire in modo efficiente i valori mancanti e le loro implementazioni in Python.
Aggiornato 29 set 2026  · 15 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Gestire i dati mancanti è un problema comune e intrinseco nella raccolta dei dati, soprattutto quando si lavora con dataset di grandi dimensioni. Le cause dei dati mancanti sono diverse: informazioni incomplete fornite dai partecipanti, mancata risposta di chi rifiuta di condividere dati, questionari progettati male o rimozione di dati per motivi di riservatezza.

Se non vengono gestiti correttamente, i dati mancanti possono distorcere le conclusioni di tutte le analisi statistiche sui dati, portando l’azienda a prendere decisioni sbagliate.

In questo articolo ci concentreremo su alcune tecniche per gestire in modo efficiente i valori mancanti e sulle loro implementazioni in Python. Illustreremo vantaggi e svantaggi di ciascuna tecnica per aiutarti a scegliere quella giusta in base alla situazione.

Identificare i dati mancanti

I dati mancanti si presentano in formati diversi. In questa sezione spieghiamo i vari tipi di dati mancanti e come identificarli.

Tipi di dati mancanti

Esistono tre principali tipi di dati mancanti: (1) Missing Completely at Random (MCAR), (2) Missing at Random (MAR) e (3) Missing Not at Random (MNAR).

È importante comprendere bene ciascuno di essi per scegliere i metodi appropriati con cui gestirli. 

1) MCAR - Missing completely at random

Succede se tutte le variabili e le osservazioni hanno la stessa probabilità di essere mancanti. Immagina di dare a un bambino dei Lego di colori diversi per costruire una casa. Ogni Lego rappresenta un’informazione, come forma e colore. Il bambino potrebbe perdere alcuni pezzi durante il gioco. Questi Lego persi rappresentano informazioni mancanti, proprio come quando non si ricorda la forma o il colore del pezzo che aveva. Quell’informazione è andata persa casualmente, ma non cambia le informazioni che il bambino ha sugli altri pezzi. 

2) MAR - Missing at random

Per MAR, la probabilità che un valore sia mancante è legata al valore della variabile o ad altre variabili del dataset. Ciò significa che non tutte le osservazioni e variabili hanno la stessa probabilità di essere mancanti. Un esempio di MAR è un sondaggio nella community dei dati in cui i data scientist che aggiornano di rado le proprie competenze hanno maggiori probabilità di non conoscere nuovi algoritmi o tecnologie all’avanguardia, e quindi saltano certe domande. In questo caso, i dati mancanti sono correlati alla frequenza con cui il data scientist fa upskilling.

3) MNAR- Missing not at random

MNAR è considerato lo scenario più difficile tra i tre tipi di dati mancanti. Si applica quando né MAR né MCAR valgono. In questa situazione, la probabilità di essere mancante è completamente diversa per valori differenti della stessa variabile, e le ragioni possono esserci sconosciute. Un esempio di MNAR è un sondaggio sulle coppie sposate. Le coppie con una relazione difficile potrebbero non voler rispondere a certe domande perché si sentono in imbarazzo.

Metodi per identificare i dati mancanti

In pandas si possono usare diversi metodi per identificare i dati mancanti. Di seguito i più ricorrenti.

Funzioni

Descrizioni

.isnull()

Questa funzione restituisce un dataframe pandas in cui ogni valore è booleano: True se il valore è mancante, False altrimenti.

.notnull()

In modo analogo alla funzione precedente, i valori sono False se viene rilevato un valore NaN o None.

.info()

Questa funzione genera tre colonne principali, tra cui “Non-Null Count”, che mostra il numero di valori non mancanti per ciascuna colonna.

.isna()

Simile a isnull e notnull. Tuttavia mostra True solo quando il valore mancante è di tipo NaN. 

Gestire i dati mancanti

Esistono diversi approcci per gestire i dati mancanti. In questa sezione ne vediamo alcuni con i rispettivi vantaggi e svantaggi.

Per illustrare meglio il caso d’uso, useremo i Loan Data disponibili su DataLab insieme al codice sorgente trattato nel tutorial. 

Poiché il dataset non ha valori mancanti, useremo un sottoinsieme dei dati (100 righe) e poi introdurremo manualmente valori mancanti.

import pandas as pd
sample_customer_data = pd.read_csv("data/customer_churn.csv",  nrows=100)
sample_customer_data.info()

Esempio di 100 campioni casuali

Esempio di 100 campioni casuali prima di introdurre valori mancanti

Introduciamo il 50% di valori mancanti in ciascuna colonna del dataframe usando.

import numpy as np
def introduce_nan(x,percentage):
n = int(len(x)*(percentage - x.isna().mean()))
idxs = np.random.choice(len(x), max(n,0), replace=False, p=x.notna()/x.notna().sum())
x.iloc[idxs] = np.nan

Applicando la funzione ai dati si ottiene questo risultato. 

sample_customer_data.apply(introduce_nan, percentage=.5)
sample_customer_data.info()

campioni dopo l’introduzione di valori mancanti

Esempio di 100 campioni casuali dopo aver introdotto valori mancanti

Di seguito le prime cinque righe del dataset. 

sample_customer_data.head()

Prime cinque righe con valori nulli

Prime cinque righe con valori nulli

Eliminazione dei dati

Usare la funzione dropna() è il modo più semplice per rimuovere dal dataframe osservazioni o feature con valori mancanti. Di seguito alcune tecniche. 

1) Eliminare le osservazioni con valori mancanti

Quando si tenta di rimuovere osservazioni da un dataset, possono verificarsi tre scenari: 

  • dropna(): elimina tutte le righe con valori mancanti.
drop_na_strategy = sample_customer_data.dropna()
drop_na_strategy.info()

Eliminare osservazioni

Eliminare osservazioni usando la funzione dropna() predefinita

Si vede che tutte le osservazioni vengono eliminate dal dataset, il che può essere particolarmente pericoloso per il resto dell’analisi. 

  • dropna(how = ‘all’): le righe in cui tutti i valori di colonna sono mancanti.
drop_na_all_strategy = sample_customer_data.dropna(how="all")
drop_na_all_strategy.info()

Dal risultato qui sotto, notiamo che non ci sono osservazioni con tutte le colonne mancanti.

campioni dopo l’introduzione di valori mancanti

Eliminare osservazioni usando la strategia “all”

  • dropna(thresh = minimum_value): elimina righe in base a una soglia. Questa strategia imposta un numero minimo di valori non mancanti richiesti per mantenere le righe. 
drop_na_thres_strategy = sample_customer_data.dropna(thresh=0.6)
drop_na_thres_strategy.info()

Impostando la soglia al 60%, il risultato è lo stesso del precedente.

Eliminare osservazioni usando la strategia “all”

Eliminare osservazioni usando una soglia

2) Eliminare le colonne con valori mancanti

Il parametro axis = 1 può essere usato per specificare esplicitamente che ci interessano le colonne anziché le righe. 

  • dropna(axis = 1): elimina tutte le colonne con valori mancanti.
drop_na_cols_strategy = sample_customer_data.dropna(axis=1)
drop_na_cols_strategy.info()

Non sono rimaste colonne nei dati. Questo perché tutte le colonne hanno almeno un valore mancante.

Dataframe vuoto dopo dropna

Dataframe vuoto dopo dropna() sulle colonne

Come molti altri approcci, anche dropna() ha pro e contro.

Pro

  • Semplice e immediato da usare.
  • Utile quando i valori mancanti non hanno importanza. 

Contro

  • Questo approccio può portare a perdita di informazione, introducendo bias nel dataset finale.
  • Non è appropriato quando i dati non sono completamente mancanti a caso.
  • Un dataset con un’alta percentuale di valori mancanti può ridursi significativamente, con impatto sui risultati di tutte le analisi statistiche su quel dataset. 

Imputazione con media/mediana

Queste strategie di sostituzione sono intuitive. Le imputazioni con media e mediana servono rispettivamente a sostituire i valori mancanti di una data colonna con la media e la mediana dei valori non mancanti in quella colonna. 

La distribuzione normale è lo scenario ideale. Purtroppo non è sempre così. Qui l’imputazione con la mediana può essere utile perché non è sensibile agli outlier.

In Python, la funzione fillna() di pandas può essere usata per queste sostituzioni. 

  • Esempio di imputazione con la media.
mean_value = sample_customer_data.mean()
mean_imputation = sample_customer_data.fillna(mean_value)

Risultato dell’imputazione con la media

Risultato dell’imputazione con la media

  • Esempio di imputazione con la mediana
median_value = sample_customer_data.median()
median_imputation = sample_customer_data.fillna(median_value)
median_imputation.head()

Risultato dell’imputazione con la media

Risultato dell’imputazione con la mediana

Pro

  • Semplicità e facilità di implementazione sono tra i vantaggi di media e mediana.
  • L’imputazione è eseguita usando le informazioni esistenti dai dati non mancanti; non sono necessari dati aggiuntivi.
  • Media e mediana possono fornire una buona stima dei valori mancanti, rispettivamente per dati normalmente distribuiti e per dati asimmetrici.

Contro

  • Non possiamo applicare queste due strategie alle colonne categoriche. Funzionano solo per quelle numeriche.
  • L’imputazione con la media è sensibile agli outlier e può non rappresentare bene la tendenza centrale dei dati. Analogamente, anche la mediana potrebbe non rappresentarla al meglio.
  • L’imputazione con la mediana assume che i dati siano completamente mancanti a caso (MCAR), cosa non sempre vera. 

Imputazione a campione casuale

L’idea alla base dell’imputazione a campione casuale è diversa dalle precedenti e prevede passaggi aggiuntivi. 

  • Per prima cosa, si creano due sottoinsiemi a partire dai dati originali. 
  • Il primo contiene tutte le osservazioni senza dati mancanti, il secondo quelle con dati mancanti. 
  • Poi si seleziona casualmente un’osservazione da ciascun sottoinsieme.
  • Quindi, i dati mancanti nell’osservazione precedentemente selezionata vengono sostituiti con quelli esistenti dell’osservazione che ha tutti i dati disponibili.
  • Infine, il processo continua finché non ci sono più informazioni mancanti.
def random_sample_imputation(df):
   
cols_with_missing_values = df.columns[df.isna().any()].tolist()

for var in cols_with_missing_values:

    # extract a random sample
    random_sample_df = df[var].dropna().sample(df[var].isnull().sum(),
                                                  random_state=0)
    # re-index the randomly extracted sample
    random_sample_df.index = df[
            df[var].isnull()].index

    # replace the NA
    df.loc[df[var].isnull(), var] = random_sample_df
 
return df
df = sample_customer_data.copy()
random_sample_imp_df = random_sample_imputation(sample_customer_data)
random_sample_imp_df.head()

Imputazione a campione casuale

Imputazione a campione casuale

Pro

  • Tecnica semplice e immediata.
  • Gestisce sia dati numerici sia categorici.
  • Minore distorsione della varianza e preserva la distribuzione originale dei dati, cosa che non avviene con media, mediana e simili.

Contro

  • La casualità non funziona necessariamente in ogni situazione e può introdurre rumore nei dati, portando a conclusioni statistiche errate. 
  • Analogamente a media e mediana, anche questo approccio assume che i dati siano completamente mancanti a caso (MCAR).

Imputazione multipla

Si tratta di una tecnica di imputazione multivariata, cioè l’informazione mancante viene colmata tenendo conto delle informazioni dalle altre colonne. 

Per esempio, se manca il valore del reddito per un individuo, non è certo se abbia un mutuo o meno. Per determinare il valore corretto è quindi necessario valutare altre caratteristiche come credit score, professione e se possiede o meno una casa.

Multiple Imputation by Chained Equations (MICE) è uno dei metodi più popolari nell’imputazione multivariata. Per capire meglio l’approccio MICE, consideriamo l’insieme di variabili X1, X2, … Xn, dove alcune o tutte hanno valori mancanti. 

L’algoritmo funziona così: 

  • Per ogni variabile, sostituisci il valore mancante con una strategia semplice come l’imputazione con la media, considerata come “segnaposto”.
  • I “segnaposto” per la prima variabile, X1, vengono regressi usando un modello di regressione in cui X1 è la variabile dipendente e le restanti sono variabili indipendenti. Poi X2 è usata come variabile dipendente e le restanti come indipendenti. Il processo continua così finché tutte le variabili sono state considerate almeno una volta come variabile dipendente.
  • Quei “segnaposto” originali vengono poi sostituiti con le previsioni del modello di regressione.
  • Il processo di sostituzione si ripete per un certo numero di cicli, in genere dieci secondo Raghunathan et al. 2002, e l’imputazione viene aggiornata a ogni ciclo. 
  • Al termine del ciclo, i valori mancanti idealmente sono sostituiti da valori previsti che riflettono al meglio le relazioni identificate nei dati.

L’implementazione si effettua usando la libreria miceforest. 

Per prima cosa, dobbiamo installare la libreria usando pip.

pip install miceforest

Quindi importiamo il modulo ImputationKernel e creiamo il kernel per l’imputazione.

from miceforest import ImputationKernel

mice_kernel = ImputationKernel(
data = sample_customer_data,
save_all_iterations = True,
random_state = 2023
)

Inoltre, eseguiamo il kernel sui dati per due iterazioni e infine creiamo i dati imputati.

mice_kernel.mice(2)
mice_imputation = mice_kernel.complete_data()
mice_imputation.head()

Imputazione multipla

Imputazione multipla

Pro

  • L’imputazione multipla è efficace nel gestire dati mancanti su più variabili e tipologie di dato. 
  • L’approccio può produrre risultati molto migliori rispetto a imputazioni con media e mediana. 
  • Molti altri algoritmi, come K-Nearest Neighbors, Random Forest e reti neurali, possono essere usati come motore delle previsioni nell’imputazione multipla.  

Contro

  • L’imputazione multipla assume che i dati siano mancanti in modo casuale (MAR).
  • Nonostante i vantaggi, questo approccio può essere computazionalmente costoso rispetto ad altre tecniche, soprattutto con dataset di grandi dimensioni. 
  • Richiede più impegno rispetto ai metodi precedenti.

Tra tutte le imputazioni, è possibile identificare quella più vicina alla distribuzione dei dati originali.

La media (in giallo) e la mediana (in rosso) sono lontane dalla distribuzione originale della colonna “Charge amount” e quindi non sono considerate ideali per l’imputazione.

mean_imputation["Charge Amount Mean Imp"] = mean_imputation["Charge Amount"]
median_imputation["Charge Amount Median Imp"] = median_imputation["Charge Amount"]
random_sample_imp_df["Charge Amount Random Imp"] = random_sample_imp_df["Charge Amount"]

Con le nuove colonne create per ciascun tipo di imputazione, possiamo ora tracciare la distribuzione.

import matplotlib.pyplot as plt
plt.figure(figsize=(12,8))

sample_customer_data["Charge Amount"].plot(kind='kde',color='blue')
mean_imputation["Charge Amount Mean Imp"].plot(kind='kde',color='yellow')
median_imputation["Charge Amount Median Imp"].plot(kind='kde',color='red')

Dati originali vs media vs mediana

Distribuzione di “Charge Amount”: dati originali vs media vs mediana.

Tracciando qui sotto l’imputazione multipla e quella casuale, queste distribuzioni si sovrappongono perfettamente ai dati originali. Significa che tali imputazioni sono migliori rispetto a media e mediana.

random_sample_imp_df["Charge Amount Random Imp"] = random_sample_imp_df["Charge Amount"]
mice_imputation["Charge Amount MICE Imp"] = mice_imputation["Charge Amount"]

mice_imputation["Charge Amount MICE Imp"].plot(kind='kde',color='black')
random_sample_imp_df["Charge Amount Random Imp"].plot(kind='kde',color='purple')

plt.legend()

dati originali vs media vs mediana vs MICE vs casuale

Distribuzione di “Charge Amount”: dati originali vs media vs mediana vs MICE vs casuale

Il corso Handling Missing Data with Imputations in R è un’ottima risorsa per approfondire le strategie di gestione dei valori mancanti. Copre come applicare visualizzazioni e test statistici per riconoscere pattern di missingness e come imputarli con tecniche sia statistiche sia di machine learning.  

Nello stesso filone, il corso dealing with missing data in python spiega come identificare, analizzare, rimuovere e imputare i dati mancanti in Python.

Best practice

Scegliere il metodo di imputazione giusto in base al tipo di dato mancante

Le strategie di imputazione sono molte e non andrebbero usate alla cieca. Adottare l’approccio giusto può evitare di introdurre bias nei dati e prendere decisioni errate. 

La tabella seguente illustra quale metodo di imputazione usare in base al tipo di dato mancante. L’elenco dei metodi non è esaustivo, ma questi sono i più usati.

Tipo di dato mancante

Metodo di imputazione

Missing Completely At Random

Media, Mediana, Moda o qualsiasi altro metodo di imputazione

Missing At Random

Imputazione multipla, Imputazione tramite regressione

Missing Not At Random

Sostituzione per pattern, Stima di massima verosimiglianza

Valutare l’impatto dell’imputazione sull’analisi complessiva

È importante ricordare che i dati originali non possono essere recuperati, a prescindere dalla tecnica di imputazione. Tuttavia, è possibile usare tecniche che generino dataset imputati il più possibile vicini alla realtà. 

Di seguito alcuni passaggi chiave da considerare durante la valutazione.

  • Esegui più tecniche di imputazione per identificare la più robusta. Questo può aiutare a individuare bias e variazioni da una tecnica all’altra.
  • Confronta i dati finali imputati con i dati originali non imputati per valutare l’affidabilità del metodo usato. 
  • Includi il processo di imputazione nella pipeline di analisi complessiva, dalla pulizia dei dati alla costruzione di qualsiasi modello di machine learning. 

Comunicare i dati mancanti e i metodi di imputazione agli stakeholder

Avere dati di qualità è l’obiettivo di tutti gli stakeholder e dei professionisti dei dati. 

Onestà e trasparenza sono fondamentali quando si comunica la presenza di dati mancanti nell’analisi. Di seguito alcuni aspetti importanti da considerare. 

  • Conosci il contesto dei dati mancanti, che siano MCAR, MAR o MNAR.
  • Spiega e documenta chiaramente i metodi usati per affrontare i dati mancanti e discuti pro e contro di ciascun approccio.
  • Comunica i risultati in modo comprensibile per gli stakeholder.

Conclusione

Questo articolo ha spiegato cosa sono i dati mancanti e il loro impatto sul processo decisionale data-driven. Ha anche illustrato alcune strategie per gestirli, con relativi vantaggi e svantaggi per prendere decisioni concrete.

Speriamo ti fornisca strategie utili per affrontare in modo efficiente i problemi di dati mancanti.

Domande frequenti sui valori mancanti

Che cosa sono i dati mancanti?

Dati mancanti significa che alcune o tutte le variabili nei dati presentano valori mancanti.

Quali sono i diversi tipi di dati mancanti?

Esistono tre principali tipi di dati mancanti: Missing Completely at Random (MCAR), Missing At Random (MAR) e Missing Not At Random (MNAR)

Come gestire i dati mancanti?

Per gestire i valori mancanti si possono adottare questi approcci: imputazione con media, mediana, moda, imputazione a campione casuale e imputazione multipla. L’elenco non è esaustivo e ciascun metodo ha pro e contro.

Perché i dati mancanti sono importanti?

Sono importanti da considerare perché possono influenzare le prestazioni dei tuoi modelli di machine learning e distorcere le conclusioni tratte da tutte le analisi statistiche sui dati, portando così l’azienda a prendere decisioni sbagliate.

Argomenti
Analisi dei dati
Python

Corsi migliori

Corso

Gestire i dati mancanti in Python

4 ore
26.3K
Impara a capire, analizzare, togliere e sostituire i dati mancanti in Python.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro