Metodi dell'ensemble: il campione di Kaggle Machine Learning

Pubblicato: 2022-03-11

Il proverbio "Due teste sono meglio di una" assume un nuovo significato quando si tratta di gruppi di apprendimento automatico. I metodi dell'ensemble sono alcune delle famiglie di ML più decorate alle competizioni di Kaggle, dove spesso vincono i concorsi con i loro risultati impressionanti.

Ma è passato un secolo prima di Kaggle quando lo statistico Sir Francis Galton ha notato la potenza dell'intelligenza aggregata. Si è imbattuto in una competizione in una fiera del bestiame in cui i partecipanti dovevano indovinare il peso di un bue. Ottocento persone hanno presentato ipotesi, ma i loro livelli di abilità variavano: agricoltori e macellai hanno indovinato insieme agli abitanti delle città che non avevano mai visto un bue da vicino, quindi Galton ha pensato che l'ipotesi media sarebbe stata piuttosto sbagliata.

Si è scoperto che la media delle ipotesi della folla era inferiore a una sterlina (< 0,1%). Tuttavia, anche le migliori previsioni individuali sono andate bene.

Come potrebbe essere? Cosa ha reso possibile un risultato così inaspettato?

Ciò che rende gli ensemble di macchine così efficaci

L'evento che ha costretto Galton a mettere in discussione le sue convinzioni illustra anche ciò che rende gli ensemble così potenti: se hai modelli diversi e indipendenti, addestrati utilizzando parti diverse di dati per lo stesso problema, funzioneranno meglio insieme che individualmente. La ragione? Ogni modello imparerà una parte diversa del concetto. Pertanto, ogni modello produrrà risultati ed errori validi in base alla sua "conoscenza".

Ma la cosa più interessante è che ogni parte vera completerà le altre mentre gli errori si annullano a vicenda:

Un'immagine che descrive il concetto di otto diversi modelli, ognuno dei quali apprende un diverso insieme di fatti che possono sovrapporsi o meno. Il risultato combina ciò che ogni modello ha imparato ed elimina alcuni dei suoi errori.

È necessario addestrare modelli con varianza elevata (come alberi decisionali) su sottoinsiemi distinti di dati. Questa varianza aggiunta significa che ogni modello si adatta a dati diversi, ma quando combinati, la varianza scompare, come per magia. Questo crea un nuovo modello più robusto.

Proprio come nel caso di Galton, quando tutti i dati provenienti da tutte le fonti vengono combinati, il risultato è "più intelligente" dei punti dati isolati.

Uno sguardo più da vicino all'apprendimento dell'ensemble nelle competizioni Kaggle

All'Otto Group Product Classification Challenge, i partecipanti hanno dovuto costruire un modello predittivo in grado di distinguere tra le principali categorie di prodotti.

Qui puoi vedere come è stato costruito il modello vincente. Era uno stacking di tre livelli: il primo aveva 33 modelli, il secondo ne aggiungeva altri tre (XGBoost, una rete neurale e AdaBoost) e il terzo era la media ponderata degli output del livello precedente. Era sia un modello molto complesso che un insieme.

Un altro successo di Kaggle è il modello creato da Chenglong Chen al concorso Crowdflower Search Results Relevance. La sfida consisteva nel creare un predittore che potesse essere utilizzato per misurare la pertinenza dei risultati di ricerca. Puoi leggere la spiegazione completa del suo metodo, ma poiché il nostro punto di interesse sono gli ensemble, la parte critica della storia è che la soluzione vincente ha utilizzato un insieme di 35 modelli, molti dei quali erano anche ensemble: un meta-insieme, quindi parlare.

Metodi d'insieme

Esistono molti modi per implementare metodi di insieme nell'apprendimento automatico. Esploreremo alcuni dei metodi più popolari:

  • Insaccamento
    • Foresta casuale
  • Potenziamento
    • AdaBoost
    • Gradient Boosting e XGBoost
  • Metodi di ensemble ibridi
    • Voto
    • Impilamento
    • a cascata

Insaccamento

Come accennato, è necessario addestrare molti modelli su diversi sottoinsiemi di dati. In pratica, questo non è facile perché avrai bisogno di molti più dati per molti modelli di quanti ne avresti per un singolo modello e, a volte, non è facile ottenere set di dati di alta qualità. Questo è il momento in cui il bagging (aggregazione bootstrap) torna utile, poiché suddivide i dati tramite bootstrap: un campione casuale con una sostituzione, risultando in diversi sottoinsiemi che si sovrappongono.

Dopo aver addestrato i tuoi modelli di insieme, costruisci la tua previsione finale aggregando ogni previsione del modello attraverso qualsiasi metrica che preferisci: media, mediana, moda e così via. Puoi anche utilizzare le probabilità di previsione del modello per creare una metrica ponderata:

Il diagramma che mostra l'uso della tecnica di bagging per dividere i dati tramite Bootstrap, ha aggregato ciascuna previsione del modello da vari sottoinsiemi per produrre l'output finale.

Se vogliamo utilizzare gli alberi decisionali come modelli ma abbiamo pochi attributi predittivi forti nei nostri dati, tutti gli alberi saranno simili. Questo perché gli stessi attributi tenderanno a trovarsi nel nodo radice, producendo risultati simili in ogni ramo dell'albero.

Foresta casuale

Una tecnica per affrontare questo problema è la foresta casuale . Crea un insieme di bagging usando alberi ma ogni nodo vincola i suoi possibili attributi a un sottoinsieme casuale. Ciò costringe i modelli a essere diversi, risolvendo il problema precedente. Inoltre, rende la foresta casuale un ottimo modello per la selezione delle funzionalità.

Random Forest è uno dei modelli ML più popolari perché offre buone prestazioni con bassa varianza e tempo di addestramento.

Potenziamento

Boosting utilizza anche il bootstrap per addestrare i modelli, con la differenza principale che aggiunge pesi a ciascuna istanza in base agli errori di previsione del modello. Mentre il bagging è un processo parallelo, il boosting è sequenziale, in cui ogni modello ha più probabilità. Ciò consente di accedere ad alcune istanze di precedenti previsioni del modello.

Con questa modifica, boosting cerca di aumentare l'attenzione sulle istanze classificate erroneamente per ottenere prestazioni globali migliori:

Un diagramma che illustra i diversi approcci utilizzati dal bagging e dal boosting, che illustra la natura parallela del bagging e la natura sequenziale del boosting.

Aggiunge pesi anche ai modelli. I predittori con prestazioni migliori durante l'allenamento avranno un peso maggiore nella fase di previsione.

Diamo un'occhiata più da vicino ad alcuni dei modelli di potenziamento più popolari:

AdaBoost

AdaBoost è stata una delle prime implementazioni del potenziamento. Fa quasi esattamente ciò che abbiamo delineato sul potenziamento in generale e utilizza gli alberi decisionali come modelli. Spieghiamo la fase di training con qualche pseudo codifica:

 For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors

Al momento della previsione, pesa ogni previsione in base al tasso di errore e[t] calcolato per ciascuna. I risultati con un alto tasso di errore avranno meno peso rispetto ad altri con una migliore precisione.

Gradient Boosting e XGBoost

Uno dei problemi principali durante l'addestramento di così tanti modelli e il loro funzionamento insieme è trovare la migliore configurazione di iperparametri. È difficile trovare la configurazione migliore per un singolo modello; trovare la migliore configurazione per n modelli aumenta esponenzialmente la complessità. La configurazione ideale per un modello isolato probabilmente non è la stessa della configurazione per un modello che deve funzionare con altri. Pertanto, dovresti cercare la configurazione di tutti i modelli contemporaneamente, ma come?

L'aumento del gradiente offre una soluzione elegante a questo problema. Crea una funzione di perdita che ha come input tutti i valori degli iperparametri di tutti i modelli e, come output, l'errore dell'intero insieme. Attraverso la discesa del gradiente, trova il valore minimo della funzione (cioè l'errore più basso) e quindi la migliore configurazione dell'iperparametro per ciascun modello.

Questo approccio introduce un problema di ridimensionamento. Entra nel re dell'apprendimento automatico per i dati strutturati: incremento del gradiente estremo, XGBoost in breve. È un'implementazione incredibilmente efficiente dell'aumento del gradiente, grazie a varie tecniche, come l'elaborazione parallela, la funzionalità di convalida incrociata integrata, la regolarizzazione per evitare l'overfitting e l'ottimizzazione dell'hardware. XGBoost offre prestazioni eccezionali.

XGBoost è diventato popolare quando il suo creatore lo ha usato per una sfida Kaggle e ha vinto con un ampio margine. Ha pubblicato il risultato e ha creato un wrapper Python per consentire a più persone di usarlo. Quando molte persone ne hanno riconosciuto il potenziale, XGBoost è diventato rapidamente un campione di ML.

Metodi di ensemble ibridi

Ma la storia non finisce qui. Abbiamo visto molti tipi di ensemble che utilizzano tutti lo stesso tipo di modello, perché non provare combinazioni di modelli diversi? Se lo fai bene, puoi creare un metodo ML ancora più potente: un insieme ibrido .

Voto

Il voto è uno degli approcci più semplici per creare un insieme ibrido. Allena molti algoritmi di modello diversi e li fa "votare" nella fase di previsione:

Diagramma che mostra il flusso di dati in tre modelli addestrati: Support Vector Machine, Logistic Regression e KNN. L'output per il primo e il secondo è 1, mentre l'output per la regressione logistica è 0. Il risultato finale è 1.

Puoi aggiungere pesi a ciascun modello in base alle sue prestazioni o prevedere le probabilità e generare un voto ponderato.

Impilamento

Lo stacking fa avanzare l'idea di votare aggiungendo un nuovo livello sui modelli di base per fare la previsione finale invece di calcolare semplicemente la media o la maggioranza. Aggiunge il concetto di meta-apprendimento, poiché il nuovo livello impara non dai dati ma dalle previsioni del modello:

Diagramma che mostra il flusso di dati in tre modelli di base addestrati, combinando il loro output in un modello impilato prima di visualizzare l'output finale.

Puoi impilare tutti i meta-layer che ti piacciono, ottenendo un modello con molti livelli. Per i modelli impilati, consiglio di utilizzare alberi decisionali, SVM o perceptron. Per i modelli di base, puoi utilizzare qualsiasi metodo desideri, anche un altro insieme, creando un insieme di insiemi. Lo stacking funziona ancora meglio con modelli di base come alberi decisionali che generano non solo una previsione del valore, ma anche la probabilità che sia corretta.

Lo stacking è meno popolare del bagging o boosting perché è più difficile interpretare ciò che i modelli impilati stanno imparando e perché esiste un numero molto maggiore di varianti: puoi giocare con molte combinazioni di algoritmi di modello, configurazioni di iperparametri e livelli di stacking. Tuttavia, con la giusta combinazione di modelli, l'impilamento può essere persino più forte del boosting e del bagging.

a cascata

La cascata viene utilizzata quando si desidera avere un alto grado di certezza nella previsione. Utilizza un approccio di impilamento ma ha un solo modello in ogni livello. Ad ogni livello, i modelli scartano le istanze che ritengono non appartenere alla classe desiderata.

Con la cascata, i modelli semplici valutano i dati prima che lo facciano i modelli complessi. Nella fase di previsione, il primo modello riceve i dati. Se la certezza non è maggiore di x (il valore deve essere alto, qualcosa di maggiore di 0,9), passa l'istanza al modello successivo. In caso contrario, la cascata restituisce l'output previsto di quel modello. Se nessun livello può prevedere la classe desiderata con un alto grado di certezza, l'insieme restituisce la classe negativa.

Un caso d'uso classico per questo modello è prevedere quando è probabile che una transazione sia fraudolenta. Supponiamo che un sistema calcoli milioni di transazioni al giorno e che sia impossibile controllarle manualmente. L'uso di un insieme a cascata può scartare le transazioni che non sono fraudolente con una probabilità molto alta, lasciando solo un piccolo sottoinsieme di transazioni da controllare manualmente:

Diagramma che illustra l'uso della cascata per rilevare transazioni fraudolente. Due modelli scartano la possibilità di frode con una certezza superiore a 0,9, mentre uno dei modelli successivi rileva una certezza inferiore, richiedendo un controllo manuale.

Questi modelli sono buone opzioni quando hai bisogno di un'eccellente metrica di richiamo.

A differenza del voto e dello stacking, un insieme a cascata utilizza un approccio multistato piuttosto che un approccio multiesperto. È importante essere cauti in caso di cascata molto profonda perché potrebbe produrre un overfitting.

Il valore dei metodi di insieme

La combinazione di molti modelli ci consente di creare predittori migliori e più potenti, come accade quando gli esseri umani lavorano insieme. Abbiamo delineato tre famiglie di ensemble - insacco, boosting e ibridi - e abbiamo visto come si allenano e prevedono.

Un albero decisionale potrebbe essere un modello molto debole e instabile (con una varianza elevata), ma una moltitudine di alberi diversi (foresta casuale) può essere un predittore molto preciso e stabile. Uno dei principali vantaggi degli ensemble è che costruiscono modelli con bassa varianza e bassa distorsione, uno dei maggiori compromessi nell'apprendimento automatico. Nella maggior parte dei casi, superano altri metodi e talvolta sono anche migliori del deep learning. Tendono ad essere più deboli delle reti neurali profonde solo quando operano su dati non strutturati.

Se continuiamo il confronto con le reti neurali profonde, possiamo anche dire che gli ensemble tendono ad essere più leggeri e veloci nelle fasi di training e testing. Inoltre, non richiedono hardware costoso per l'esecuzione, come GPU potenti e discrete.

È vero che gli insiemi non hanno la possibilità di essere compresi intuitivamente dagli esseri umani perché avere decine o centinaia di modelli che lavorano contemporaneamente crea uno strumento enorme e complesso. Per fortuna, alcune tecniche ci permettono di capire come questi metodi prendono le loro decisioni. Uno dei più popolari è LIME, un metodo che crea spiegazioni interpretabili per un'istanza particolare su qualsiasi modello di machine learning.

Le competizioni Kaggle non esistono solo per consentire agli sviluppatori di divertirsi, apprendere nuove abilità o vincere premi. L'obiettivo finale è creare modelli forti e rilasciarli in natura, per consentire loro di fare la loro magia in scenari del mondo reale. Questi tipi di modelli vengono utilizzati dalle organizzazioni che gestiscono problemi critici. Ad esempio, il rilevamento delle frodi è un caso d'uso comune in settori come quello bancario e dei viaggi, che si occupano di grandi quantità di denaro spostate in singole transazioni.

Gli insiemi producono previsioni migliori con una varianza e una distorsione inferiori rispetto ad altri modelli. Tuttavia, è difficile interpretare ciò che stanno imparando e ciò può essere di fondamentale importanza in alcune applicazioni sensibili. Un esempio di ciò è il settore dei prestiti personali: un modello di riciclaggio potrebbe determinare se un individuo è idoneo o meno per un prestito. Tuttavia, se il cliente chiede perché l'istituto finanziario ha negato il prestito, dovrebbe esserci una spiegazione dettagliata, non solo "Perché il nostro modello di riciclaggio lo ha detto".

In definitiva, sia che tu voglia creare potenti modelli ML per applicazioni aziendali, grandi banche o piccole imprese, o semplicemente partecipare a concorsi per aumentare la tua reputazione professionale, gli ensemble dovrebbero essere il tuo strumento preferito.