Formazione di un albero decisionale contro dati non bilanciati


43

Sono nuovo del data mining e sto cercando di formare un albero decisionale su un set di dati che è altamente sbilanciato. Tuttavia, sto riscontrando problemi con scarsa precisione predittiva.

I dati sono costituiti dagli studenti che studiano i corsi e la variabile di classe è lo stato del corso che ha due valori: Ritirato o Corrente.

  • Età
  • Razza
  • Genere
  • Corso
    ...
  • Stato del corso

Nel set di dati ci sono molte più istanze correnti rispetto a quelle ritirate. Le istanze ritirate rappresentano solo il 2% delle istanze totali.

Voglio essere in grado di costruire un modello in grado di prevedere la probabilità che una persona si ritiri in futuro. Tuttavia, quando si testa il modello rispetto ai dati di addestramento, l'accuratezza del modello è terribile.

Ho avuto problemi simili con gli alberi delle decisioni in cui i dati sono dominati da una o due classi.

Quale approccio posso usare per risolvere questo problema e creare un classificatore più accurato?


4
Una cosa da considerare è cambiare i termini di penalità per diversi tipi di classificazione errata. Non dici quale software stai usando, ma credo che tutti i buoni software ad albero dovrebbero includere modi per farlo.
Peter Flom - Ripristina Monica

Risposte:


61

Questo è un problema interessante e molto frequente nella classificazione - non solo negli alberi delle decisioni ma praticamente in tutti gli algoritmi di classificazione.

Come hai scoperto empiricamente, un set di formazione composto da un numero diverso di rappresentanti di entrambe le classi può comportare un classificatore che è distorto verso la classe di maggioranza. Se applicato a un set di test similmente sbilanciato, questo classificatore fornisce una stima di precisione ottimistica. In un caso estremo, il classificatore potrebbe assegnare ogni singolo caso di test alla classe di maggioranza, ottenendo così un'accuratezza pari alla proporzione di casi di test appartenenti alla classe di maggioranza. Questo è un fenomeno ben noto nella classificazione binaria (e si estende naturalmente alle impostazioni multi-classe).

Questo è un problema importante, perché un set di dati sbilanciato può portare a stime delle prestazioni gonfiate. Questo a sua volta può portare a false conclusioni sul significato con cui l'algoritmo ha funzionato meglio del caso.

La letteratura sull'apprendimento automatico su questo argomento ha essenzialmente sviluppato tre strategie di soluzione.

  1. È possibile ripristinare l'equilibrio sul set di allenamento sottocampionando la classe grande o sovracampionando la classe piccola, per evitare che si verifichino distorsioni in primo luogo.

  2. In alternativa, è possibile modificare nuovamente i costi di classificazione errata, come indicato in una risposta precedente, per evitare distorsioni.

  3. Un'ulteriore salvaguardia è quella di sostituire l'accuratezza con la cosiddetta precisione bilanciata . È definita come media aritmetica delle accuratezze specifiche della classe, dove e rappresentano l'accuratezza ottenuta su esempi positivi e negativi, rispettivamente. Se il classificatore si comporta ugualmente bene su entrambe le classi, questo termine si riduce alla precisione convenzionale (cioè, il numero di previsioni corrette diviso per il numero totale di previsioni). Al contrario, se l'accuratezza convenzionale è al di sopra della probabilità solo perché il classificatore sfrutta un set di test sbilanciato, l'accuratezza bilanciata, come appropriato, scenderà al caso (vedere lo schizzo seguente).π+π-ϕ:=12(π++π),π+π

Precisione vs. precisione bilanciata

Consiglierei di prendere in considerazione almeno due dei suddetti approcci congiuntamente. Ad esempio, potresti sovracampionare la tua classe di minoranza per evitare che il tuo classificatore acquisisca un pregiudizio a favore della classe di maggioranza. In seguito, durante la valutazione delle prestazioni del classificatore, è possibile sostituire l'accuratezza con l'accuratezza bilanciata. I due approcci sono complementari. Se applicati insieme, dovrebbero aiutarti sia a prevenire il problema originale sia a evitare false conclusioni a seguito di esso.

Sarei felice di pubblicare alcuni riferimenti aggiuntivi alla letteratura se desideri dare seguito a questo.


3
Broder - grazie per le informazioni dettagliate. È stato davvero utile! Inizialmente ho provato a utilizzare la funzionalità di data mining in SQL Server, tuttavia, seguendo i tuoi consigli, sono passato all'utilizzo di R. Ho usato l'algoritmo SMOTE per riequilibrare il set di dati e ho provato a utilizzare sia gli alberi decisionali sia SVM. I DT offrono una precisione bilanciata dell'81%, e ancora meglio con SVM. Una domanda però: dovrei testare il modello con un set di dati che contiene anche dati di riequilibrio? O dovrebbe essere testato con dati più simili all'originale?
chrisb,

2
È bello sentirlo. Per quanto riguarda la tua domanda: non vuoi bilanciare i tuoi dati di test. Ciò pregiudicherebbe la tua valutazione delle prestazioni, dal momento che testeresti due esempi due volte (nel caso di sovracampionamento) o ometteresti alcuni esempi dai test (nel caso del sottocampionamento). In sintesi, si desidera bilanciare il set di allenamento (separatamente all'interno di ogni piega di convalida incrociata), ma quindi testare i dati di test non modificati (potenzialmente squilibrati).
Kay Brodersen

Grazie Broder. Fare ciò mette un quadro diverso sulle cose. La precisione bilanciata scende a circa il 56%. La sensibilità scende al 17% sul mio modello migliore (corrispondente alla classe di cui ho bisogno per ottenere previsioni migliori). Suppongo che abbia senso perché la classe sovracampionata è quella classe, quindi quegli esempi verranno conteggiati più volte. Proverò ad aumentare il bilanciamento del set di dati di allenamento per vedere se questo fa la differenza.
chrisb,

Dopo averlo testato con diverse proporzioni di dati bilanciati, la migliore precisione bilanciata che posso ottenere è con Ada Boost con il 60%. Sto lottando per determinare cosa sia "buono". Il mio obiettivo principale è prevedere gli studenti che potrebbero ritirarsi dal corso. Con il ritiro come la mia classe positiva, ho cercato di massimizzare il mio numero di veri positivi (cioè aumentare la sensibilità). Il riequilibrio dei dati fa ciò a scapito del numero di falsi negativi. Il 60% non mi sembra molto meglio che casuale, ma in questo caso non ho una base per ciò che è "buono".
chrisb,

2
@chrisb, questo è un commento in ritardo leggermente (!). Su una tangente, puoi provare la regressione dei rischi proporzionali di Cox ( cran.r-project.org/doc/contrib/Fox-Companion/… ) per modellare la sopravvivenza dei tuoi studenti. Potrebbe non essere necessario un down-sampling o un campionamento eccessivo.
Zhubarb,

8

Le seguenti quattro idee possono aiutarti ad affrontare questo problema.

  1. Selezionare una misura di prestazione appropriata e quindi ottimizzare gli iperparametri del modello - regolarizzazione eg - per ottenere risultati soddisfacenti sul set di dati di convalida incrociata e, una volta soddisfatti, testare il modello sul set di dati di test. A tal fine, imposta il 15% dei dati da utilizzare per la convalida incrociata e il 15% da utilizzare per i test finali. Una misura consolidata in Machine Learning, sostenuta da Andrews Ng è la statistica F1 definita come . Cerca di massimizzare questa cifra nel set di dati di convalida incrociata e assicurati che le prestazioni siano stabili anche nel set di dati di test.2PrecisionRecallPrecision+Recall

  2. Utilizzare il parametro "precedente" negli alberi delle decisioni per informare l'algoritmo della frequenza precedente delle classi nel set di dati, ovvero se ci sono 1.000 positivi in ​​un set di set di dati 1.000.000 prior = c(0.001, 0.999)(in R).

  3. Utilizzare l'argomento "pesi" nella funzione di classificazione utilizzata per penalizzare gravemente l'algoritmo per le classificazioni errate dei rari casi positivi

  4. Utilizzare l'argomento "costo" in alcuni algoritmi di classificazione, ad esempio rpartin R, per definire i costi relativi per le classificazioni errate di veri positivi e negativi reali. Dovresti naturalmente impostare un costo elevato per la classificazione errata della classe rara.

Non sono favorevole al sovracampionamento, poiché introduce osservazioni dipendenti nel set di dati e ciò viola le ipotesi di indipendenza fatte sia in Statistica che in Machine Learning.


2

Ho dato una risposta nell'argomento recente :

Quello che facciamo è scegliere un campione con proporzioni diverse. Nell'esempio di cui sopra, sarebbero 1000 casi di "SÌ" e, ad esempio, 9000 casi di "NO". Questo approccio offre modelli più stabili. Tuttavia, deve essere testato su un campione reale (quello con 1.000.000 di righe).

Non solo offre un approccio più stabile, ma i modelli sono generalmente migliori, per quanto riguarda le misure relative all'ascensore.

Puoi cercarlo come "sovracampionamento nelle statistiche", il primo risultato è abbastanza buono: http://www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf


1

Aggiungendo alla risposta di @Kay la prima strategia di soluzione: il sintetismo di minoranza sintetica ( SMOTE ) di solito fa meglio del campionamento sotto o sopra della mia esperienza, poiché penso che in qualche modo crei un compromesso tra i due. Crea campioni sintetici della classe di minoranza utilizzando i punti dati tracciati nello spazio predittore multivariato e impiega più o meno punti medi tra punti adiacenti su quello spazio per creare nuovi punti sintetici e quindi bilancia entrambe le dimensioni della classe. (non sono sicuro dei punti medi, dettagli dell'algoritmo qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.