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.
Questo approccio è accettabile. Dopotutto, esegui l'addestramento sul set di addestramento e la valutazione su un set di test separato.
Questo approccio è inefficiente dal punto di vista computazionale. Non modificare iperparametri o set di funzionalità dopo ogni ciclo di test.

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.

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?
Per caso, il set di test conteneva esempi su cui il modello ha ottenuto buoni risultati.
Molti degli esempi nel set di test sono duplicati di esempi nel set di addestramento.
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.

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 esamini 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 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?
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 test deve essere maggiore del numero di esempi nel set di convalida.
Ogni esempio utilizzato per testare il modello è un esempio in meno utilizzato per l'addestramento del modello.
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?
Ripeti il test sullo stesso set di test. I risultati del test potrebbero essere stati un'anomalia.
Determina in che modo il set di dati originale è diverso dai dati reali.
Quanti esempi deve contenere l'insieme di test?
Almeno il 15% del set di dati originale.
Esempi sufficienti per generare un test statisticamente significativo.