Le uscite XGBoost tendono verso gli estremi


15

Attualmente sto usando XGBoost per la previsione del rischio, sembra che stia facendo un buon lavoro nel dipartimento di classificazione binaria, ma le uscite di probabilità sono molto lontane, cioè cambiare il valore di una caratteristica in un'osservazione di una quantità molto piccola può fare la probabilità salto in uscita da 0,5 a 0,99.

Riesco a malapena a vedere le uscite nell'intervallo 0,6-0,8. In tutti i casi, la probabilità è inferiore a 0,99 o 1.

Sono a conoscenza dei metodi di calibrazione post training come Platt Scaling e Logistic Correction, ma mi chiedevo se c'è qualcosa che posso modificare nel processo di formazione XGBoost.

Chiamo XGBoost da diverse lingue usando FFI, quindi sarebbe bello se posso risolvere questo problema senza introdurre altre librerie di calibrazione, ad esempio, cambiando la metrica eval da AUC per la perdita di registro.


Hai verificato che anche il ridimensionamento applicato al set di allenamento sia stato applicato correttamente al set di test?
Brad

Ho lo stesso problema. Potresti trovare qualcosa di utile? Come soluzione temporanea ho ordinato i puntelli e normalizzato sotto 0 a 1 in base alle occorrenze, ma non credo sia una buona soluzione.
Ilker Kurtulus,

Quante variabili categoriche hai nel tuo modello?
ngopal

In realtà XGBoostè abbastanza robusto contro i valori anomali, se confrontato con altri metodi di vaniglia come SVM.
Piotr Rarus - Ripristina Monica il

Risposte:


1

XGBoost non è naturalmente calibrato nelle probabilità. Devi usare qualcosa come:

objective = "binary:logistic"

per assicurarsi che l'output del modello possa essere interpretato come una probabilità. Altrimenti potresti ottenere solo punteggi, che possono essere utilizzati solo per classificare le istanze. Poiché la maggior parte delle metriche delle prestazioni può essere calcolata sui punteggi, è un errore comune utilizzare quelle che sembrano probabilità (associate a metriche delle prestazioni buone) anziché probabilità "reali".

Come per l'instabilità del modello (qui nel senso che un leggero cambiamento nella variabile esplicativa cambia molto la previsione), è necessario ricontrollare l'intero processo di calibrazione: selezione delle variabili, partizionamento treno / test, ottimizzazione dei parametri / messa a punto incrociata, prestazioni metriche utilizzate, per garantire che il modello non sia troppo adatto.


0

Sì, controlla la distribuzione delle perdite di log all'aumentare del numero di iterazioni. Se inizia a sparare prima della tua iterazione di potenziamento finale, allora è troppo adatto.


0

Il primo che vorrei chiedere sarebbe "Che cosa sono i rapporti positivi / negativi?". Solo perché ho avuto un problema simile più volte quando le lezioni erano molto squilibrate. In tal caso, puoi provare a bilanciare il set di dati o provare a giocare con il scale_pos_weightparametro di XGboost. Nel caso di rapporti di classi 50/50, le probabilità potrebbero essere più o meno normalizzate.

Inoltre, è molto probabile che tu abbia un overfitting allo stesso tempo. Prova a ottimizzare la frequenza di apprendimento, i parametri di campionamento e i parametri di regolarizzazione (reg_alpha, reg_lambda).


-1

Innanzitutto, dovresti essere sicuro che i tuoi dati siano abbastanza grandi quando lavori con algoritmi basati su alberi come XGBoost e LightGBM, tali cambiamenti improvvisi potrebbero indicare un eccesso di adattamento. (Almeno 10.000 campioni, regola empirica)

Secondo, com'è la tua cardinalità; se si dispone di 3-4 funzioni, è prevedibile che un cambiamento di funzionalità causi tale effetto.

Terzo, quali sono i tuoi iperparametri? I modelli basati su alberi sono molto sensibili alle modifiche dei parametri. Assicurati di implementare attentamente la sintonizzazione dell'iperparametro.

Infine, quando si tratta di classificazione binaria; le metriche di errore diventano davvero importanti. È possibile eseguire una combinazione di perdita del registro binario ed errore binario (XGBoost consente di scegliere più); assicurati anche di implementare l'arresto anticipato scegliendo early_stopping_rounds = N nel metodo train di XGBoost, dove N è la selezione delle iterazioni. Con ciò, il tuo algoritmo si fermerà presto in un punto ragionevole in cui la perdita smette di diminuire, evitando un eccesso di adattamento.

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.