Test Data
I dati di test sono una suddivisione tenuta da parte, valutata una sola volta dopo tutto l’addestramento e la regolazione, per stimare le prestazioni su nuovi dati. Suddivisioni, dimensioni, insidie e codice.
I dati di test, chiamati anche set di test o set di holdout, sono la porzione di un dataset riservata alla misurazione delle prestazioni di un modello finito di apprendimento automatico (ML). Non intervengono nell'adattamento dei pesi del modello né in alcuna decisione di sviluppo, come l'architettura, gli iperparametri, il checkpoint o la soglia di confidenza, e vengono valutati una volta prese tutte le decisioni. Poiché né il modello né i suoi sviluppatori si sono mai adattati a questi dati, la sua accuratezza, il suo richiamo o la sua precisione media (mAP) costituiscono una stima imparziale delle prestazioni del modello su nuovi dati della stessa distribuzione: è il valore che i team usano per decidere se un modello è pronto per la distribuzione.
Suddivisioni in set di addestramento, convalida e test#
Un dataset viene solitamente diviso in tre partizioni disgiunte con funzioni diverse:
- Dati di addestramento: gli esempi da cui apprende l'ottimizzatore, regolando i pesi per ridurre la perdita.
- Dati di convalida: valutati ripetutamente durante lo sviluppo per confrontare gli iperparametri, interrompere anticipatamente l'addestramento e scegliere il checkpoint migliore.
- Dati di test: valutati una volta alla fine per riportare la metrica su cui si basa la valutazione del progetto.
Per i dataset con migliaia di esempi sono comuni suddivisioni 80/10/10 o 70/15/15, mentre per quelli con milioni di esempi si può riservare qualche punto percentuale. La dimensione necessaria del set di test dipende dalla precisione richiesta: l'errore standard di un'accuratezza p misurata su n esempi è la radice quadrata di p(1 − p)/n; quindi, con 1.000 immagini di test e un'accuratezza del 90%, l'intervallo di confidenza al 95% è di circa ±1,9 punti percentuali, mentre con 10.000 immagini si riduce a circa ±0,6. La terminologia varia da un settore all'altro e molti articoli riportano i risultati finali su ImageNet usando il set di convalida ufficiale, perché le etichette del set di test di ImageNet non sono pubbliche. In Ultralytics YOLO, un file YAML del dataset richiede i percorsi train e val e accetta un percorso opzionale test; l'addestramento valuta val dopo ogni epoca per selezionare best.pt, mentre model.val(data="data.yaml", split="test") valuta il modello finito sulle immagini escluse dall'addestramento in modalità di convalida.
Perché il set di test deve rimanere intatto#
Ogni decisione presa osservando un punteggio adatta un po' il modello a quei dati. Quando si confrontano molte configurazioni sul set di convalida, la vincitrice è in parte quella che ha avuto fortuna con quegli esempi specifici, quindi il suo punteggio di convalida sovrastima le prestazioni altrove. Il seguente esperimento con scikit-learn seleziona il numero migliore di vicini per un classificatore k-nearest neighbors su un piccolo dataset rumoroso e confronta l'accuratezza di convalida e test del modello vincitore su 30 dataset casuali:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
val_scores, test_scores = [], []
for seed in range(30):
# A small, noisy dataset split 60/20/20 into train, validation, and test
X, y = make_classification(n_samples=400, n_features=20, n_informative=4, flip_y=0.2, random_state=seed)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=seed)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=seed)
# Model selection: keep the neighbor count with the best validation accuracy
scores = {k: KNeighborsClassifier(k).fit(X_train, y_train).score(X_val, y_val) for k in range(1, 51)}
best_k = max(scores, key=scores.get)
val_scores.append(scores[best_k])
# The test set is scored once, after the choice is final
test_scores.append(KNeighborsClassifier(best_k).fit(X_train, y_train).score(X_test, y_test))
print(f"Chosen model, mean of 30 runs: validation {np.mean(val_scores):.3f}, test {np.mean(test_scores):.3f}")I modelli selezionati ottengono in media 0.805 in convalida e 0.758 sul test: scegliere tra 50 candidati ha quindi gonfiato di quasi cinque punti la stima di convalida. Ottimizzare sul set di test nasconderebbe questo divario e trasferirebbe la stessa distorsione ottimistica al risultato riportato, una forma di data leakage. I benchmark pubblici lo evitano non divulgando le etichette: i risultati di COCO test-dev si ottengono inviando le predizioni a un server di valutazione. Per i modelli linguistici di grandi dimensioni (LLM), le domande di test presenti nei dati di preaddestramento su scala web contaminano un benchmark; per questo LiveCodeBench aggiunge continuamente nuovi problemi di competizione e valuta ogni modello su problemi pubblicati dopo il termine del suo addestramento.
Creare un set di test affidabile#
Un punteggio di test predice le prestazioni nel mondo reale solo se il set di test somiglia ai dati che il modello incontrerà, che si tratti di scene stradali per i veicoli autonomi o di scansioni per l'analisi delle immagini mediche:
- Riprodurre le condizioni di distribuzione: le telecamere, l'illuminazione, le stagioni, l'area geografica e la distribuzione delle classi dovrebbero riflettere la produzione. Un rilevatore per la guida deve includere nel set di test scene notturne, di pioggia e di neve, anche se la maggior parte degli spostamenti avviene con tempo sereno.
- Mantieni la separazione: I fotogrammi dello stesso video, le scansioni dello stesso paziente e le foto della stessa scena devono restare nella stessa suddivisione. I dati ordinati nel tempo si suddividono per data, così il modello viene testato sul futuro.
- Testare fonti diverse: nell'imaging medico, la convalida esterna su scansioni provenienti da altri ospedali e modelli di scanner mostra se il modello ha appreso l'anatomia o le apparecchiature di una singola struttura.
- Pulire le etichette: gli errori nelle etichette di test limitano l'accuratezza misurabile e possono cambiare l'ordine dei modelli, quindi le etichette di test meritano la revisione più accurata.
- Riportare i risultati per sottoinsiemi: le metriche per classe e per condizione rivelano problemi che una singola media nasconde.
Anche ricostruire con cura un set di test può cambiare i risultati: quando i ricercatori hanno ricreato il set di test di ImageNet seguendo il processo di raccolta originale, l'accuratezza è calata di 11-14 punti percentuali su un'ampia gamma di modelli, sebbene i miglioramenti ottenuti sul set di test originale si siano mantenuti; gli autori hanno attribuito il calo a immagini leggermente più difficili, non agli anni di riutilizzo del set di test.
Dati di test e termini correlati#
- Convalida incrociata: alterna la porzione dei dati di sviluppo usata per la convalida, offrendo una stima più stabile per la selezione del modello. Un set di test separato fornisce comunque il risultato finale.
- Dataset di benchmark: un set di test pubblico condiviso da un settore di ricerca. Poiché ogni team lo usa per anni per le proprie valutazioni, col tempo smette di essere un insieme di dati mai visti.
- Dataset di riferimento: un set di riferimento curato e di alta qualità, con risposte verificate, spesso usato come set di test fisso per i test di regressione delle applicazioni LLM.










