[PYTHON] LightGBM-Score in Beta-Distribution eingepasst

Vorwort

LightGBM ist heutzutage eine Option zum Erlernen von binären Klassifizierungsmodellen. Ich war jedoch immer besorgt, dass die dort ausgespuckte Punktzahl nicht unbedingt einen Wahrscheinlichkeitswert anzeigt. Wenn ich etwas dagegen tun wollte, kam ich auf eine Methode, die gut zu sein schien.

Was ist eine binäre Klassifikation?

Die Binar-Klassifizierung ist eine maschinelle Lernaufgabe, bei der erraten wird, ob sie null oder eins ist. Als Begriff denke ich, dass der Begriff positiv oder negativ eher maschinellem Lernen ähnelt, daher werde ich ihn weiter unten so schreiben.

Eine häufige Aufgabe ist die Diagnose einer Krankheit. Dies ist die Art der Aufgabe, anhand der Testergebnisse zu bestimmen, ob ein Patient betroffen ist (positiv) oder nicht (negativ). Wenn das Geschlecht und das Alter des Prüflings und verschiedene Tests zum binären Klassifizierungsmodell hinzugefügt werden, besteht die vom Modell geforderte Funktion darin, die Möglichkeit zu zeigen, dass die Person als Punktzahl betroffen ist, es gibt jedoch zwei Funktionen, positiv oder negativ. Um nach eins zu urteilen, ist es notwendig, die Punktzahl durch einen geeigneten Schwellenwert zu teilen. Die "Möglichkeit, betroffen zu sein" muss kein Wahrscheinlichkeitswert sein, da sie in der Reihenfolge der Bewertungen angeordnet und durch einen geeigneten Schwellenwert getrennt werden kann.

Es gibt jedoch Situationen, in denen der Wahrscheinlichkeitswert mit der "Möglichkeit einer Beeinträchtigung" übereinstimmen soll. Wenn es beispielsweise Dienst A und Dienst B gibt, ist es besser, nicht nur einen an den Benutzer zu wenden. Dies ist auch eine Anwendung der binären Klassifikation, aber wenn es darum geht, diejenigen mit einer hohen Beteiligungswahrscheinlichkeit anzusprechen, müssen die binären Klassifikationswerte von A und B vergleichbar sein. Dies bedeutet, dass der Maßstab und die Vorspannung gleich sein müssen.

Verteilung der vorhergesagten Werte

Lernen mit LightGBM

Ich habe ein Modell erstellt, indem ich die Daten von Santander von Kaggle in LightGBM geworfen habe. Dies ist ein Datensatz darüber, ob Finanzprodukte gekauft werden sollen oder nicht, und der positive Prozentsatz beträgt 10%, was ein moderates Ungleichgewicht darstellt. Die Zielvariable ist 1 oder 0, aber zur Vereinfachung des Schreibens wird 1 als positiv und 0 als negativ geschrieben.

Die Parameter sehen so aus. Wenn is_unbalance für unsymmetrische Daten enthalten ist, wird sich der vorhergesagte Wert moderat ausbreiten, da er abgetastet und gelernt wird, sodass das Positive und das Negative in zwei Hälften geteilt werden.

Parameter Wert
objective binary
num_leaves 15
is_unbalane True
num_boost_round 100

Punktzahl und Prozentsatz der Fälle

Fassen wir die Bewertungen für jeden Datenpunkt in Schritten von 0,01 zusammen und nehmen den Prozentsatz der positiven Beispiele. Anschließend können Sie ein Korrelationsdiagramm zwischen der Punktzahl und dem Prozentsatz der regulären Fälle zeichnen. Übrigens ist rmse der Fehler von der diagonalen Linie.

pr_plot_min.png

Wenn sich dies mit den diagonalen Linien von (0,0) und (1,1) überschneidet, sagt der erwartete Wert direkt den Prozentsatz der regulären Fälle voraus, was mich in verschiedenen Anwendungen glücklich macht.

Punkteverteilung

Wenn man die Verteilung getrennt nach positiv und negativ betrachtet, sieht es so aus.

score_hist_train_min.png

Der Prozentsatz positiver Fälle beträgt 0 im Bereich der vorhergesagten Werte, in denen sich positive und negative Fälle überschneiden. Wird von 1 sein. Im nicht überlappenden Bereich ist das positive Fallverhältnis 0, wenn es nur negative Fälle gibt, und das positive Fallverhältnis ist 1, wenn die Verteilung nur positive Fälle ist. Aus diesem Grund wird es zu einem sigmoidartigen Korrelationsdiagramm wie oben.

Beta-Distribution

Diese Form ähnelt übrigens der Beta-Distribution. Wenn die Form einer Beta-Verteilung entspricht, ist die Wahrscheinlichkeitsvariable 0 zu 1 sowie die Beta-Verteilung. Finden wir also Alpha und Beta aus Mittelwert und Varianz.

e = \frac{a}{a+b}
v = \frac{ab}{ (a+b)^2 (a+b+1)}

Wenn Sie dies lösen,

a = \frac{e^2 (1-e)}{v}-e
b = \frac{(1-e)}{e}a

Wenn Sie eine zufällige Stichprobe der Beta-Verteilung mit den oben genannten Parametern ziehen, sieht dies folgendermaßen aus.

beta_random_hist_min.png

Die Form ist um 0,1 und 0,9 etwas anders, aber es ist okay.

Vorhersage der positiven Rate

Wenn es Alpha und Beta für jedes der positiven und negativen gibt, kann die Wahrscheinlichkeitsdichte für jedes der positiven und negativen aus jeder Wahrscheinlichkeitsvariablen von 0 bis 1 berechnet werden. Wenn die ursprünglichen Daten positive und negative Zahlen enthalten, kann das Verhältnis von positiv und negativ in einer beliebigen Wahrscheinlichkeitsvariablen berechnet werden.

Y = \frac{N_p\times Beta_p}{N_p\times Beta_p + N_n\times Beta_n}

Wenn Sie den vorhergesagten Wert aus der Verteilung gegen den ursprünglichen vorhergesagten Wert von LightGBM zeichnen, sieht es so aus.

score_cal_score_plot_min.png

Darüber hinaus sieht das Korrelationsdiagramm zwischen dem vorhergesagten Wert aus der Beta-Verteilung und dem zuvor erwähnten positiven Beispielverhältnis so aus.

cal_score_ratio_plot_min.png

Sie können sehen, dass es ziemlich nahe an der Diagonale liegt.

Mit dem zweistufigen Ansatz von LightGBM und Beta-Verteilung konnten wir den vorhergesagten Wert und den Prozentsatz der regulären Fälle diagonal näher zusammenrücken.

Zusammenfassung

Nachwort

Ich hatte vor, am 1. März ein Buch in Technical Book 8 zu veröffentlichen, aber es wurde aufgrund des Virus im Beispiel abgebrochen.

Recommended Posts

LightGBM-Score in Beta-Distribution eingepasst
Schreiben Sie die Beta-Distribution in Python
Logistische Verteilung in Python
Generieren Sie eine U-Verteilung in Python