Set di dati: suddivisione del set di dati originale

Tutti i progetti di ingegneria del software di qualità dedicano molta energia al test delle app. Analogamente, ti consigliamo vivamente di testare il tuo modello ML per determinare la correttezza delle sue previsioni.

Set di addestramento, convalida e test

Dovresti testare un modello su un insieme di esempi diverso rispetto a quelli utilizzati per addestrarlo. Come scoprirai un po' più avanti, i test su esempi diversi sono una prova più solida dell'idoneità del modello rispetto ai test sullo stesso insieme di esempi. Da dove prendi questi diversi esempi? Tradizionalmente, nel machine learning, si ottengono questi diversi esempi dividendo il set di dati originale. Potresti quindi assumere che sia necessario suddividere il set di dati originale in due sottoinsiemi:

Immagine 8. Una barra orizzontale divisa in due parti: circa l'80% è il set di addestramento e circa il 20% è il set di test.
Figura 8. Non è una suddivisione ottimale.

 

Esercizio: controlla il tuo intuito

Supponiamo che tu addestri il modello sul set di addestramento e lo valuti sul set di test in più round. In ogni round, utilizzi i risultati del set di test per stabilire come aggiornare gli iperparametri e l'insieme di funzionalità. Rilevi qualcosa che non va in questo approccio? Scegli una sola risposta.
Eseguire molti cicli di questa procedura potrebbe causare un adattamento implicito del modello alle peculiarità del set di test.
Sì. Più spesso utilizzi lo stesso set di test, più è probabile che il modello si adatti perfettamente al set di test. Come un insegnante che "insegna per il test", il modello si adatta inavvertitamente al set di test, il che potrebbe rendere più difficile per il modello adattarsi ai dati reali.
Questo approccio è accettabile. Dopotutto, esegui l'addestramento sul set di addestramento e la valutazione su un set di test separato.
In realtà, c'è un problema sottile. Pensa a cosa potrebbe andare storto gradualmente.
Questo approccio è inefficiente dal punto di vista computazionale. Non modificare iperparametri o set di funzionalità dopo ogni ciclo di test.
I test frequenti sono costosi, ma fondamentali. Tuttavia, i test frequenti sono molto meno costosi della formazione aggiuntiva. L'ottimizzazione degli iperparametri e dell'insieme di funzionalità può migliorare notevolmente la qualità del modello, quindi pianifica sempre il tempo e le risorse di calcolo per lavorare su questi aspetti.

Suddividere il set di dati in due insiemi è una buona idea, ma un approccio migliore è suddividerlo in tre sottoinsiemi. Oltre al set di addestramento e al set di test, il terzo sottoinsieme è:

  • Un set di convalida esegue i test iniziali sul modello durante l'addestramento.
Figura 9. Una barra orizzontale divisa in tre parti: il 70% è il set di addestramento, il 15% il set di convalida e il 15% il set di test
Figura 9. Una suddivisione molto migliore.

Utilizza il set di convalida per valutare i risultati del set di addestramento. Se l'uso ripetuto del set di convalida suggerisce che il modello fa buone previsioni, utilizza il set di test per ricontrollare il modello.

La figura seguente suggerisce questo flusso di lavoro. Nella figura, "Modifica modello" indica la modifica di qualsiasi aspetto del modello, dalla modifica della frequenza di apprendimento all'aggiunta o alla rimozione di funzionalità, fino alla progettazione di un modello completamente nuovo da zero. Al termine di questo flusso di lavoro, scegli il modello con il rendimento migliore nel set di test.

Figura 10. Un diagramma di flusso costituito dalle seguenti fasi:
            1. Addestrare il modello sul set di addestramento.
            2. Valutare il modello sul set di convalida.
            3. Modifica il modello in base ai risultati del set di validazione.
            4. Esegui l'iterazione su 1, 2 e 3, scegliendo infine il modello migliore sul set di validazione.
            5. Conferma i risultati nel set di test.
Figura 10. Un buon flusso di lavoro per lo sviluppo e i test.

Il flusso di lavoro mostrato nella Figura 10 è ottimale, ma anche con questo flusso di lavoro, i set di test e di convalida si "usurano" con l'uso ripetuto. In altre parole, più utilizzi gli stessi dati per prendere decisioni su impostazioni degli iperparametri o altri miglioramenti del modello, meno è probabile che il modello faccia buone previsioni sui nuovi dati. Per questo motivo, è buona norma raccogliere più dati per "aggiornare" il set di test e il set di convalida. Ricominciare da capo è un ottimo modo per resettarsi.

Esercizio: controlla il tuo intuito

Hai mescolato tutti gli esempi nel set di dati e li hai suddivisi in set di addestramento, convalida e test. Tuttavia, il valore della perdita nel set di test è così incredibilmente basso da farti sospettare un errore. Che cosa potrebbe essere andato storto?
Molti degli esempi nel set di test sono duplicati di esempi nel set di addestramento.
Sì. Questo può essere un problema in un set di dati con molti esempi ridondanti. Ti consigliamo vivamente di eliminare gli esempi duplicati dal set di test prima del test.
L'addestramento e i test non sono deterministici. A volte, per caso, la perdita del test è incredibilmente bassa. Esegui di nuovo il test per confermare il risultato.
Sebbene la perdita vari leggermente a ogni esecuzione, non dovrebbe variare così tanto da farti pensare di aver vinto la lotteria del machine learning.
Per caso, il set di test conteneva esempi su cui il modello ha ottenuto buoni risultati.
Gli esempi sono stati mescolati bene, quindi è estremamente improbabile.

Altri problemi con i set di test

Come illustrato nella domanda precedente, gli esempi duplicati possono influire sulla valutazione del modello. Dopo aver suddiviso un set di dati in set di addestramento, convalida e test, elimina gli esempi nel set di convalida o nel set di test che sono duplicati di esempi nel set di addestramento. L'unico test equo di un modello è quello con nuovi esempi, non con duplicati.

Ad esempio, prendi in considerazione un modello che prevede se un'email è spam utilizzando come funzionalità la riga dell'oggetto, il corpo dell'email e l'indirizzo email del mittente. Supponiamo di suddividere i dati in set di addestramento e di test, con una suddivisione 80-20. Dopo l'addestramento, il modello raggiunge una precisione del 99% sia sul set di addestramento sia sul set di test. Probabilmente ti aspetti una precisione inferiore nel set di test, quindi esamina di nuovo i dati e scopri che molti degli esempi nel set di test sono duplicati di esempi nel set di addestramento. Il problema è che hai trascurato di rimuovere le voci duplicate per la stessa email di spam dal database di input prima di suddividere i dati. Hai eseguito l'addestramento inavvertitamente su alcuni degli tuoi dati di test.

In sintesi, un buon set di test o di convalida soddisfa tutti i seguenti criteri:

  • Abbastanza grande da produrre risultati di test statisticamente significativi.
  • Rappresentativo del set di dati nel suo complesso. In altre parole, non scegliere un set di test con caratteristiche diverse rispetto al set di addestramento.
  • Rappresentativo dei dati reali che il modello incontrerà nel contesto della sua finalità commerciale.
  • Nessun esempio duplicato nel set di addestramento.

Esercizi: verifica la comprensione

Dato un singolo set di dati con un numero fisso di esempi, quale delle seguenti affermazioni è vera?
Ogni esempio utilizzato per testare il modello è un esempio in meno utilizzato nell'addestramento del modello.
La suddivisione degli esempi in set di addestramento, test e convalida è un gioco a somma zero. Questo è il compromesso principale.
Il numero di esempi nel set di test deve essere maggiore del numero di esempi nel set di convalida.
In teoria, il set di convalida e il set di test dovrebbero contenere lo stesso numero di esempi o quasi.
Il numero di esempi nel set di test deve essere maggiore del numero di esempi nel set di convalida o nel set di addestramento.
Il numero di esempi nel set di addestramento è in genere maggiore del numero di esempi nel set di convalida o nel set di test. Tuttavia, non sono previsti requisiti percentuali per i diversi set.
Supponiamo che il set di test contenga esempi sufficienti per eseguire un test statisticamente significativo. Inoltre, i test eseguiti sul set di test generano una perdita ridotta. Tuttavia, il modello ha avuto un rendimento mediocre nel mondo reale. Cosa dovresti fare?
Determina in che modo il set di dati originale è diverso dai dati reali.
Sì. Anche i set di dati migliori sono solo uno snapshot dei dati reali. I valori di ground truth sottostanti tendono a cambiare nel tempo. Anche se il set di test corrispondeva abbastanza bene al set di addestramento da suggerire una buona qualità del modello, il set di dati probabilmente non corrisponde adeguatamente ai dati reali. Potresti dover eseguire nuovamente l'addestramento e il test su un nuovo set di dati.
Ripeti il test sullo stesso set di test. I risultati del test potrebbero essere stati un'anomalia.
Anche se il nuovo test potrebbe produrre risultati leggermente diversi, questa tattica probabilmente non è molto utile.
Quanti esempi deve contenere l'insieme di test?
Esempi sufficienti per generare un test statisticamente significativo.
Sì. Quanti esempi sono? Dovrai fare esperimenti.
Almeno il 15% del set di dati originale.
Il 15% potrebbe essere un numero sufficiente di esempi o meno.