Data Leakage
La fuga di dati introduce nell'addestramento o nella valutazione informazioni non disponibili al momento della previsione, gonfiando punteggi che non reggono in produzione. Cause e soluzioni.
La fuga di dati nell'apprendimento automatico (ML) si verifica quando i dati di addestramento o la valutazione di un modello includono informazioni che non saranno disponibili al momento delle previsioni reali, come esempi del set di test, valori futuri o caratteristiche che codificano la risposta. Durante lo sviluppo e il test del modello, il modello sembra accurato; poi, in produzione, le sue prestazioni peggiorano perché la scorciatoia su cui faceva affidamento non è più disponibile. La fuga di dati è una delle principali cause di risultati non riproducibili: un'analisi della ricerca basata sull'apprendimento automatico ha contato 294 articoli interessati in 17 campi e, nelle previsioni di guerre civili, una volta corretta la fuga di dati, i modelli complessi hanno perso il vantaggio dichiarato rispetto alla regressione logistica, utilizzata da decenni.
Come si verifica la fuga di dati#
La fuga di dati può derivare dal modo in cui i dati vengono suddivisi, elaborati o scelti come input; gli stessi errori si ripetono nei modelli tabellari, nell'analisi di serie temporali e in attività di visione come il riconoscimento delle azioni:
- Contaminazione tra training e test: le operazioni che apprendono dai dati, come il calcolo delle statistiche di normalizzazione, l'imputazione o la selezione delle caratteristiche, vengono eseguite sull'intero dataset prima della suddivisione, perciò i dati di addestramento contengono informazioni sul set di valutazione. Le immagini duplicate e le copie aumentate create prima della suddivisione hanno lo stesso effetto.
- Fuga tra gruppi: campioni correlati vengono separati, per esempio fotogrammi consecutivi dello stesso video, più scansioni dello stesso paziente o foto della stessa scena. Il modello può quindi ottenere un buon punteggio riconoscendo la scena o la persona invece di apprendere l'attività.
- Fuga temporale: suddividere casualmente dati ordinati nel tempo, o calcolare caratteristiche usando valori successivi al momento della previsione, consente al modello di guardare al futuro.
- Fuga dell'obiettivo: un input è una conseguenza o un indicatore dell'etichetta, per esempio un campo «trattamento ricevuto» in un modello che prevede una malattia.
- Riutilizzo della valutazione: ottimizzare il modello sul set di test o trovare le domande di benchmark nei dati di pre-addestramento su scala web di un modello linguistico di grandi dimensioni trasforma la valutazione in un segnale di addestramento.
Anche le immagini possono contenere fughe dell'obiettivo. Nel dataset ChestX-ray14, l'80% delle radiografie del torace con pneumotorace nel set di test mostrava anche un drenaggio toracico, il tubo usato per trattare la condizione. Un classificatore addestrato sul dataset ha raggiunto un'AUC della ROC pari a 0,94 sulle immagini con drenaggio e solo 0,77 su quelle senza drenaggio, cioè i casi non trattati che il rilevatore dovrebbe individuare.
Dimostrare la fuga di dati nel codice#
Adattare una fase dipendente dai dati prima della convalida incrociata è l'errore da manuale, e i suoi effetti sono facili da misurare. L'esempio seguente genera rumore puro, quindi nessun modello può superare il 50% di accuratezza su dati nuovi; poi seleziona le 20 caratteristiche che separano meglio le etichette ed esegue due volte la convalida incrociata di una regressione logistica: una volta adattando la selezione su tutti i campioni e una volta eseguendola all'interno di una pipeline scikit-learn che la riadatta a ogni fold di addestramento.
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
# Pure noise: 100 samples, 5,000 random features, random labels (true accuracy is 50%)
rng = np.random.default_rng(0)
X = rng.normal(size=(100, 5000))
y = rng.integers(0, 2, size=100)
# Leaky: pick the 20 features that best separate the labels using every sample, then cross-validate
X_selected = SelectKBest(k=20).fit_transform(X, y)
leaky = cross_val_score(LogisticRegression(), X_selected, y, cv=5).mean()
# Correct: feature selection is refit inside each training fold
pipeline = make_pipeline(SelectKBest(k=20), LogisticRegression())
clean = cross_val_score(pipeline, X, y, cv=5).mean()
print(f"Leaky CV accuracy: {leaky:.2f}, correct CV accuracy: {clean:.2f}")La versione con fuga di dati riporta un'accuratezza dell'85% su etichette casuali, mentre la pipeline ne riporta il 48%, cioè un risultato dovuto al caso. Con 5.000 caratteristiche e 100 campioni, alcune caratteristiche risultano correlate alle etichette per pura fortuna; selezionarle includendo i fold di convalida incorpora quella fortuna nel punteggio di ogni fold.
Prevenire la fuga di dati#
La prevenzione inizia dalla suddivisione, che deve precedere qualsiasi fase che apprenda dai dati, così i set di convalida e di test restano esclusi dall'addestramento:
- Suddividi prima di fare feature engineering: adatta scaler, imputatori, encoder e selettori di caratteristiche solo sul set di addestramento, quindi applicali senza modifiche agli altri set.
- Suddividi per gruppo o per tempo: mantieni tutti i campioni di un paziente, video o scena nello stesso set e addestra sui dati passati per testare su quelli futuri.
- Rimuovi i duplicati con hash e embedding: confronta gli hash dei file per individuare copie esatte e la similarità degli embedding per trovare duplicati quasi identici tra i set, prima dell'addestramento.
- Verifica gli input: chiediti se ogni caratteristica esiste al momento della previsione e considera una caratteristica dominante o un punteggio sospettosamente alto un bug da indagare.
Anche la fuga di dati distorce la selezione dei checkpoint. Ultralytics YOLO apprende dalle immagini train indicate nel file YAML del dataset e salva best.pt dall'epoca con il fitness di convalida più alto, pari a mAP50-95 per il rilevamento; di conseguenza, fotogrammi quasi duplicati condivisi tra train e val gonfiano sia il punteggio usato per scegliere il checkpoint sia quello riportato.
Fuga di dati e termini correlati#
- Overfitting: il modello memorizza il rumore dei dati di addestramento legittimi e ottiene risultati scarsi su un set di convalida pulito. La fuga di dati rende errato il punteggio di convalida stesso, perciò un modello in overfitting può sembrare efficace.
- Apprendimento di scorciatoie: il modello si affida a un indizio spurio, come una filigrana o lo sfondo, correlato all'etichetta. Si parla di fuga di dati quando l'indizio arriva all'addestramento o alla valutazione da informazioni non disponibili in fase di distribuzione.
- Sicurezza dei dati: nella cybersicurezza, la fuga di dati indica l'esposizione di dati sensibili a soggetti non autorizzati, a cui si fa fronte con controlli degli accessi, crittografia e strumenti di prevenzione della perdita di dati. I due significati condividono solo il nome.










