Vorschläge für kostensensitives Lernen in einem sehr unausgewogenen Umfeld

15

Ich habe einen Datensatz mit einigen Millionen Zeilen und ~ 100 Spalten. Ich möchte ungefähr 1% der Beispiele im Datensatz erkennen, die zu einer gemeinsamen Klasse gehören. Ich habe eine minimale Genauigkeitsbeschränkung, aber aufgrund der sehr asymmetrischen Kosten bin ich nicht besonders an einem bestimmten Rückruf interessiert (solange mir nicht noch 10 positive Treffer verbleiben!)

Welche Ansätze würden Sie in dieser Einstellung empfehlen? (Links zu Beiträgen erwünscht, Links zu Implementierungen erwünscht)

em70
quelle

Antworten:

15

Ich habe festgestellt, dass He and Garcia (2009) eine hilfreiche Wiederholung des Lernens in unausgeglichenen Klassenproblemen ist. Hier sind ein paar auf jeden Fall nicht umfassende Dinge zu beachten:

Datenbasierte Ansätze:

Man kann die Mehrheitsklasse unter- oder die Minderheitsklasse überabtasten. (Breiman wies darauf hin, dass dies formal der Zuweisung von nicht einheitlichen Fehlklassifizierungskosten entspricht.) Dies kann zu Problemen führen: Unterabtastung kann dazu führen, dass der Lernende Aspekte der Mehrheitsklasse übersieht. Überabtastung erhöht das Risiko einer Überanpassung.

Es gibt "informierte Unterabtastungsmethoden", die diese Probleme reduzieren. Eines davon ist EasyEnsemble , das mehrere Teilmengen aus der Mehrheitsklasse unabhängig voneinander abtastet und mehrere Klassifikatoren erstellt, indem jede Teilmenge mit allen Daten der Minderheitenklasse kombiniert wird.

Mit SMOTE (Synthetic Minority Oversampling Technique) oder SMOTEBoost (SMOTE mit Boosten kombinieren) werden synthetische Instanzen der Minderheitsklasse erstellt, indem im Feature-Space die nächsten Nachbarn erstellt werden. SMOTE ist in R im DMwR-Paket implementiert (das Luis Torgos Buch „Data Mining mit R, Lernen mit Fallstudien“ CRC Press 2016 begleitet ).

Ansätze zur Modellanpassung

Wenden Sie in Ihrer Verlustfunktion klassenspezifische Gewichte an (größere Gewichte für Minderheitenfälle).

Für baumbasierte Ansätze können Sie die Hellinger-Distanz als Knotenverunreinigungsfunktion verwenden, wie in Cieslak et al. "Hellinger-Entfernungsentscheidungsbäume sind robust und schräglaufunempfindlich" ( Weka-Code hier .)

Verwenden Sie einen Ein-Klassen-Klassifikator , lernen Sie entweder (je nach Modell) eine Wahrscheinlichkeitsdichte oder eine Grenze für eine Klasse und behandeln Sie die andere Klasse als Ausreißer.

Verwenden Sie die Genauigkeit natürlich nicht als Metrik für die Modellbildung. Cohens Kappa ist eine vernünftige Alternative.

Modellbewertungsansätze

Wenn Ihr Modell vorhergesagte Wahrscheinlichkeiten oder andere Ergebnisse zurückgibt, wählen Sie einen Entscheidungsgrenzwert, der einen angemessenen Kompromiss zwischen Fehlern eingeht (unter Verwendung eines Datasets, das unabhängig von Training und Test ist). In R implementiert das Paket OptimalCutpoints eine Reihe von Algorithmen, einschließlich kostensensitiver, um einen Cutoff zu bestimmen.

MattBagg
quelle
Danke für die ausführliche Antwort. Ich habe versucht zu unterbemustern und bin kläglich gescheitert. Die Modelle zeigen eine hervorragende Leistung in der Stichprobe, aber das Ungleichgewicht ist immer noch im Testset vorhanden (und die realen Daten, die ich irgendwann verwenden werde), so dass die OOS-Präzision der Modelle fürchterlich ist. Ich habe auch klassenspezifische Gewichte ausprobiert, bei meiner Anwendung fallen jedoch leicht quantifizierbare höhere Kosten für falsch positive als für falsch negative an. Was die Klassifikatoren für eine Klasse betrifft, habe ich versucht, eine lineare SVM anzupassen (nichtlineare sind zu langsam), und diese hat sogar in der Stichprobe eine Genauigkeit von 0 ...
em70
1
Ich fühle für dich. Hohe Präzision ist schwierig, wenn die überwiegende Mehrheit Ihrer Fälle negativ ist. Ich würde klassenspezifische Gewichte (wie umgekehrt proportional zum Bruchteil der Fälle in der Klasse) zum Lernen verwenden und die fehlertypspezifischen Gewichte zur Bestimmung der Entscheidungsschwelle speichern. Hoffentlich verwenden Sie die Kreuzvalidierung mit Cohens Kappa und nicht die Genauigkeit für die Modellauswahl. Ich würde die Wahrscheinlichkeitsdichte für die Klassen in Kalibrierungsdaten zusammen mit der Präzision und Anreicherung (Präzision / Anteil positiver Fälle) bei allen Grenzwerten visualisieren, um die verfügbaren Kompromisse wirklich zu verstehen.
MattBagg
Tolle Antwort, danke. Ich verwende seit einiger Zeit eine ähnliche Technik wie das erwähnte EasyEnsemble, bezweifle dies jedoch (trotz vernünftiger Leistung bei simulierten Daten). Jetzt weiß ich, dass es Sinn macht.
Ayorgo
5

Ich verstehe, dass dies ein aktives Forschungsgebiet in der maschinellen Lerngemeinschaft ist und es keine guten Antworten gibt, sondern eine große und wachsende Anzahl möglicher Lösungen. Sie werden wahrscheinlich bessere Antworten erhalten, wenn Sie die spezifischen Algorithmen angeben, die Sie in Betracht ziehen.

Wenn Sie ein parametrisches Modell (logistische Regression) verwenden, sollte dies weniger problematisch sein, und Sie können den Schwellenwert einfach basierend auf Ihrer Verlustfunktion (Kosten für falsch negative zu falsch positiven) variieren.

Wenn Sie Algorithmen für maschinelles Lernen verwenden, ist dies möglicherweise schwieriger. Max Kuhn unternimmt einen fairen Versuch, das Thema in Kapitel 16 von "Applied Predictive Modeling" zusammenzufassen. Aber herausforderndes Thema, um es zusammenzufassen. Wenn Sie das Buch nicht kaufen möchten, ist der R-Code im AppliedPredictiveModeling-Paket für dieses Kapitel verfügbar und kann ausreichen, abhängig von Ihrer Kenntnis von R und den verwendeten Algorithmen.

Normalerweise dreht sich die Diskussion um Unterabtastung / Überabtastung +/- kostensensitive Algorithmen. Mit Variationen wie Jous-Boost auch möglich.
Ein Beispiel für diese Art von Diskussion: Chen et al. "Verwenden von Random Forest zum Erlernen unausgeglichener Daten" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf

Charles
quelle
Das Problem beim Variieren des Schwellenwerts ist, dass es so ist, als würde man den Achsenabschnitt eines Regressionsmodells ändern. In der Realität möchte ich möglicherweise den Gewichtungsvektor ändern, um die Kosten zu berücksichtigen. Aber wenn ich das tue, erhalte ich angesichts des ohnehin schon starken Ungleichgewichts eine Genauigkeit von 0! Ich habe mich für keinen Algorithmus entschieden und habe Ressourcen, um innovative Forschungsideen umzusetzen, wenn sie vielversprechend sind. Ich werde mir das von Ihnen vorgeschlagene Buch ansehen.
em70
Das Kapitel ist so lala. Solide Anstrengung, aber schwer zusammenzufassen. Viele nicht unterstützte Behauptungen zu verschiedenen Methoden veröffentlicht. Ich denke, geschichtete Unterabtastung in zufälligen Wäldern ist ein guter Anfang aus Sicht des maschinellen Lernens. Code ist im Lieferumfang des Buches enthalten.
Charles
0

Sie können einen Blick auf die Implementierung von scikit-learn werfen. Achten Sie auf das Argument class_ weight, das Werte eines Wörterbuchs mit Klassengewichten oder 'auto' enthalten kann:

klasse sklearn.svm.SVC (C = 1.0, kernel = 'rbf', grad = 3, gamma = 0.0, coef0 = 0.0, schrumpfen = True, wahrscheinlichkeit = False, tol = 0.001, cache_size = 200, class_weight = None, verbose = False, max_iter = -1, random_state = None)

Sie können mit dem Wert des class_weight-Arguments spielen, das ein Klassengewichtungswörterbuch oder 'auto' sein kann. Im 'Auto'-Modus weist der Lernalgorithmus jeder Klasse automatisch Gewichte zu, basierend auf der Anzahl der Proben in jeder Klasse.

scikit-learn verfügt über mehrere andere Klassifizierungsalgorithmen, von denen einige Klassengewichte akzeptieren.

Asche
quelle
Können Sie mehr darüber sagen, wie die Klassengewichte verwendet werden können, um die Ziele des OP zu erreichen? Ich denke, das ist implizit in Ihrem Beitrag enthalten, aber dies ist noch keine Antwort.
gung - Wiedereinsetzung von Monica
Ja, das Argument class_weight kann einen Wert 'auto' haben, wenn einige in der Dokumentation nachsehen, oder es kann einen Dictionary-Wert haben, der die Klassengewichtung hat. Im Falle von 'auto' ermittelt der Lernalgorithmus selbst das Gewicht jeder Klasse entsprechend der Anzahl der Proben in jeder.
Asche