Insegnare a un albero a smettere di chiedere

Insegnare a un albero a smettere di chiedere

Un albero decisionale che non smette mai di fare domande finisce per imparare a memoria i suoi dati. Come gli diciamo quando fermarsi?

Nell'articolo precedente di questo percorso abbiamo fatto crescere un albero decisionale che stima quanti coni vende un chiosco di gelati basandosi soltanto sulla temperatura del giorno. Ecco cosa abbiamo costruito lungo la strada:

  • Misuriamo quanto sbaglia una stima con l'errore quadratico medio (MSE): la media degli scarti di ogni giorno, elevati al quadrato.

  • Una domanda sì o no sulla temperatura divide i giorni in due foglie, ciascuna con la propria media come stima. Il suo miglioramento, comunemente chiamato gain, è quanto si riduce lo scarto quadratico totale: n×(MSEprima−MSEdopo)n \times (\text{MSE}_\text{prima} - \text{MSE}_\text{dopo}), dove nn è il numero di giorni nel gruppo che viene diviso.

  • L'albero è avido: a ogni passo sceglie la singola domanda con il miglioramento più grande, in qualunque foglia si trovi.

  • Impara da 210 giorni di training e viene giudicato su 90 giorni di test che non vede mai. Man mano che cresce, l'errore sui dati di training può solo scendere, mentre l'errore sui dati di test scende, tocca il fondo e poi risale.

Quell'ultima curva che torna a salire è il problema che risolviamo oggi: lasciato a sé stesso, un albero fa troppe domande. Vediamo come farlo fermare.

Quattro modi per dire basta

Lasciato a sé stesso, un albero avido continua a fare domande finché ogni foglia contiene un solo giorno: un ricordo perfetto dei giorni di training, che non descrive nient'altro. Questo si chiama overfitting, o sovradattamento. C'è più di un modo onesto per fermare questo processo.

  1. Concedergli un budget di foglie: si ferma quando le ha spese tutte, lì dove servivano di più;

  2. Impedirgli di separare una foglia con troppo pochi giorni: una domanda a cui rispondono tre o quattro giorni non è affidabile, per quanto sembri aiutare;

  3. Negargli le domande che portano a catene lunghe e intricate: quante domande separano una foglia dalla primissima è la profondità di quella foglia. Un albero tenuto abbastanza basso non può allontanarsi troppo inseguendo una manciata di giorni strani;

  4. Oppure rifiutare del tutto una domanda quando il miglioramento che porta, sommato su tutti i giorni che tocca, è troppo piccolo per valerne la pena.

A pensarci bene, queste quattro regole diverse nascono tutte dallo stesso sospetto: di una manciata di punti non ci si può fidare.

Prova
  1. Con i valori predefiniti, leggi l'etichetta "giorni per foglia" sulle foglie, poi porta il cursore "giorni per foglia ≥" fino a 1. Le etichette diventano "nessuna domanda rimasta": tutti i giorni al loro interno hanno la stessa temperatura, quindi non resta niente da chiedere.

  2. Abbassa "profondità ≤" a 3 e guarda le etichette accanto alle foglie diventare "profondità". Riporta su la profondità e alza invece "miglioramento ≥": vedrai le etichette diventare, poche alla volta, "miglioramento".

  3. Fai scorrere "foglie ≤" fino a 8 e poi fino a 40 mentre "giorni per foglia ≥" resta a 30 o più, e controlla che l'albero e i valori non cambino.

  4. Prova a portare l'errore sui dati di test vicino al suo minimo muovendo un solo controllo alla volta: prima solo "foglie ≤", poi solo "miglioramento ≥", poi solo "giorni per foglia ≥" fino a 11, l'unico che ci riesce davvero.

Notato?
  • Tre dei quattro controlli (giorni per foglia, profondità, miglioramento) possono essere, ciascuno, la regola indicata accanto a una foglia, a seconda di quale stringi; "foglie ≤" non compare mai accanto a una foglia: ferma semplicemente l'albero mentre restano inutilizzate foglie che si potrebbero ancora dividere.

  • Con il rimescolamento iniziale, lasciando gli altri tre ai valori predefiniti, solo "giorni per foglia ≥" riesce da solo a migliorare l'errore sui dati di test.

  • "foglie ≤ 8" e "foglie ≤ 40" fanno crescere lo stesso albero quando "giorni per foglia ≥" arriva a 30, perché 210 giorni di training permettono solo una manciata di foglie così grandi.

Quale foglia dopo?

Quando ci sono più foglie che potrebbero essere divise, quale tocca per prima?

Finora ogni albero di questa pagina ha scelto la foglia la cui prossima domanda migliora di più la stima, ovunque si trovi nell'albero. Chiamiamola crescita per foglia. Un'alternativa altrettanto onesta è la crescita per livello: dare a ogni foglia della profondità attuale la sua domanda prima di scendere più a fondo in una qualsiasi di esse, così l'albero si allarga in modo uniforme su tutti i lati prima di crescere verso il basso. Quale di questi due ordini segue un albero, a parità di budget di foglie, è il suo ordine di crescita, e nessuno dei due è l'unica risposta ragionevole.

Prova
  1. Riporta "passo" a 0, poi fai avanzare entrambi gli alberi una divisione alla volta e nota che coincidono a ogni passo: con 8 foglie non c'è ancora nulla su cui essere in disaccordo.

  2. Porta "foglie" a 16 e confronta la forma dei due alberi, anche se ora entrambi hanno 16 foglie.

  3. A 16 foglie, confronta la profondità indicata per ciascun lato: l'albero cresciuto per foglia di solito scende una o due domande più in profondità di quello cresciuto per livello (a volte sono pari).

  4. Rimescola qualche volta a 16 foglie e guarda quale lato ha l'errore sui dati di test più basso: non è sempre lo stesso.

Notato?
  • Stesso numero di foglie, forme diverse: la crescita per foglia e quella per livello possono divergere quando ci sono abbastanza foglie tra cui scegliere.

  • La crescita per foglia è sbilanciata: continua a scavare ovunque pochi giorni sparsi promettano ancora il miglioramento singolo più grande, così alcuni rami finiscono due o tre domande più in profondità di altri.

  • La crescita per livello è bilanciata: ogni ramo cresce fin quasi alla stessa profondità prima di passare al successivo.

  • Su questi dati nessuno dei due ordini è sempre migliore: quello che vince sui giorni di test cambia a ogni rimescolamento del chiosco.

Cos'è un albero, e cosa non è

Togliamo le nostre visualizzazioni e un albero non è altro che una catena di domande sì o no sulla temperatura, che termina in un unico numero. Può disegnare solo scalinate, segmenti piatti uniti alle soglie che ha scelto, e mai una curva morbida. La sua stima è esattamente costante per tutti i giorni che finiscono nella stessa foglia, per quanto diversamente quei giorni sarebbero potuti andare.

Un albero abbastanza profondo può imparare a memoria alla perfezione i giorni di training ed essere comunque quasi inutile sui giorni di test, esattamente come abbiamo visto succedere nella prima parte.

Quello che abbiamo fatto crescere in queste due parti, una domanda alla volta, è ciò che LightGBM chiama albero di regressione: un albero le cui foglie contengono numeri, non risposte sì/no o categorie. Da solo, un singolo albero è uno strumento grossolano, ma ci sono due modi onesti per far lavorare insieme molti alberi. Far crescere tanti piccoli alberi, uno dopo l'altro, ciascuno a correggere gli errori del precedente. Oppure far crescere tanti grandi alberi indipendenti, ciascuno con la propria visione dei giorni, e fare la media delle loro stime. Ora la strada si divide.

La strada si divide · scegline una
Non ancora scrittaParte 03 · strada BoostingTanti piccoli alberiIn arrivo
Non ancora scrittaParte 03 · strada Foreste casualiBagging e mediaIn arrivo