Insaccamento con sovracampionamento per modelli predittivi di eventi rari


13

Qualcuno sa se è stato descritto quanto segue e (in entrambi i casi) se sembra un metodo plausibile per l'apprendimento di un modello predittivo con una variabile target molto sbilanciata?

Spesso nelle applicazioni CRM di data mining, cercheremo un modello in cui l'evento positivo (successo) è molto raro rispetto alla maggioranza (classe negativa). Ad esempio, potrei avere 500.000 casi in cui solo lo 0,1% appartiene alla classe di interesse positiva (ad es. Il cliente ha acquistato). Quindi, al fine di creare un modello predittivo, un metodo è quello di campionare i dati per cui si mantengono tutte le istanze di classe positive e solo un campione delle istanze di classe negativa in modo che il rapporto tra classe positiva e negativa sia più vicino a 1 (forse il 25% al 75% da positivo a negativo). Sopra campionamento, sottocampionamento, SMOTE ecc. Sono tutti i metodi in letteratura.

Ciò di cui sono curioso è combinare la strategia di campionamento di base sopra ma con l'inserimento della classe negativa. Qualcosa semplicemente come:

  • Mantieni tutte le istanze di classe positive (ad es. 1.000)
  • Campionare le istanze di classe negative per creare un campione bilanciato (ad es. 1.000).
  • Montare il modello
  • Ripetere

Qualcuno ha sentito parlare di questo prima? Il problema che sembra senza insaccare è che campionare solo 1.000 istanze della classe negativa quando ci sono 500.000 è che lo spazio del predittore sarà scarso e potresti non avere una rappresentazione di possibili valori / modelli di predittore. Il bagging sembra aiutare questo.

Ho osservato rpart e nulla "si interrompe" quando uno dei campioni non ha tutti i valori per un predittore (non si interrompe quando si predicono quindi le istanze con quei valori del predittore:

library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))

qualche idea?

AGGIORNAMENTO: ho preso un set di dati del mondo reale (marketing dei dati di risposta alla posta diretta) e l'ho suddiviso casualmente in formazione e convalida. Ci sono 618 predittori e 1 obiettivo binario (molto raro).

Training:
Total Cases: 167,923
Cases with Y=1: 521

Validation:
Total Cases: 141,755
Cases with Y=1: 410

Ho preso tutti gli esempi positivi (521) dal set di addestramento e un campione casuale di esempi negativi della stessa dimensione per un campione bilanciato. Mi adatto ad un albero rpart:

models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")

Ho ripetuto questo processo 100 volte. Quindi ha previsto la probabilità di Y = 1 sui casi del campione di validazione per ciascuno di questi 100 modelli. Ho semplicemente calcolato la media delle 100 probabilità per una stima finale. Ho decilato le probabilità sul set di validazione e in ogni decile ho calcolato la percentuale di casi in cui Y = 1 (il metodo tradizionale per stimare la capacità di classificazione del modello).

Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10)) 

Ecco la performance: inserisci qui la descrizione dell'immagine

Per vedere come questo rispetto a nessun insaccamento, ho previsto il campione di convalida solo con il primo campione (tutti i casi positivi e un campione casuale della stessa dimensione). Chiaramente, i dati campionati erano troppo scarsi o troppo adatti per essere efficaci sul campione di validazione.

Suggerendo l'efficacia della routine di insaccamento quando si verifica un evento raro e n e p di grandi dimensioni.

inserisci qui la descrizione dell'immagine

Risposte:


7

Fatta eccezione per l'inclusione degli stessi esempi di classe positiva in ciascun sacchetto, questo è S ^ 3Bagging come descritto in S ^ 3Bagging: metodo di induzione del classificatore veloce con sottocampionamento e insaccamento . (Non ho esaminato a fondo questo documento, l'ho appena sfogliato.)

Non vedo nulla di teoricamente sbagliato nel tuo approccio, anche se ho visto molto più frequentemente un sottocampionamento combinato con un potenziamento piuttosto che un insaccamento.

Questo potrebbe non rispondere esattamente alla tua domanda, ma un eccellente documento su diversi modi di trattare i dati sbilanciati è l' apprendimento dai dati sbilanciati . Sembra che l'apprendimento sensibile ai costi possa essere più appropriato nel tuo caso. Dato che stai usando le foreste decisionali, la Sezione 3.2.3 Alberi decisionali sensibili ai costi sarebbe probabilmente utile. Afferma

Per quanto riguarda gli alberi delle decisioni, l'adattamento sensibile ai costi può assumere tre forme: in primo luogo, gli adeguamenti sensibili ai costi possono essere applicati alla soglia di decisione; secondo, considerazioni sensibili ai costi possono essere date ai criteri di divisione in ciascun nodo; infine, è possibile applicare all'albero schemi di potatura sensibili ai costi

Adeguamenti sensibili in termini di costi alla soglia di decisione significano sostanzialmente scegliere la soglia di decisione in base alle prestazioni del ROC o della curva di richiamo di precisione. In particolare, le prestazioni della RPC sono robuste rispetto ai dati sbilanciati.

I criteri di suddivisione in base al costo si riducono alla modifica della funzione di impurità per gestire i dati squilibrati. Il documento sopra citato afferma,

In [63], tre funzioni di impurità specifiche, Gini, Entropy e DKM, hanno mostrato di avere una migliore insensibilità ai costi rispetto alla baseline di accuratezza / tasso di errore. Inoltre, questi esperimenti empirici hanno anche mostrato che l'uso della funzione DKM produceva generalmente alberi decisionali non potati più piccoli che nel peggiore dei casi fornivano precisioni paragonabili a Gini ed Entropy. Una base teorica dettagliata che spiega le conclusioni di questi risultati empirici è stata successivamente stabilita in [49], che generalizza gli effetti della crescita dell'albero decisionale per qualsiasi scelta di criteri di sputo.

Per quanto riguarda la potatura,

Tuttavia, in presenza di dati squilibrati, le procedure di potatura tendono a rimuovere le foglie che descrivono il concetto di minoranza. È stato dimostrato che sebbene gli alberi di potatura indotti da dati sbilanciati possano ostacolare le prestazioni, l'utilizzo di alberi non potati in tali casi non migliora le prestazioni [23]. Di conseguenza, è stata prestata attenzione al miglioramento della stima della probabilità di classe in ciascun nodo per sviluppare strutture ad albero delle decisioni più rappresentative in modo tale che la potatura possa essere applicata con effetti positivi. Alcuni lavori rappresentativi includono il metodo di livellamento di Laplace della stima di probabilità e la tecnica di potatura di Laplace [49].

[23] N. Japkowicz e S. Stephen, "Il problema dello squilibrio di classe: uno studio sistematico", Analisi intelligente dei dati, vol. 6, n. 5, pagg. 429-449, 2002.

[49] C. Elkan, "Le basi dell'apprendimento sensibile ai costi", Proc. Conf. Int. Internazionale Intelligenza artificiale, pagg. 973-978, 2001.

[63] C. Drummond e RC Holte, "Sfruttare la sensibilità al costo (in) dei criteri di scissione dell'albero decisionale", proc. Conf. Internazionale Apprendimento automatico, pagg. 239-246, 2000.


0

Questo è molto interessante. Di recente ho un progetto che ha una situazione simile in cui la convalida su eventi rari si comporta bene mentre la convalida di non eventi nell'intervallo previsto più basso (come 0,0 - 0,1) è stata eseguita in modo instabile mese su mese. Le ragioni dietro, come hai detto, a causa della grande popolazione di non eventi, è meglio includere più campioni nei set di addestramento in modo che ci siano abbastanza campioni per coprire varie combinazioni di variabili.

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.