Erörterte in früheren Blogs über Klassifizierungsmetriken wie ROC-AuC und Kolmogorov-Smirnov (KS) -Statistik.

In diesem Weblog werden wir eine andere wichtige Klassifizierungsmetrik namens The untersuchen Gini -Koeffizient.


Warum haben wir mehrere Klassifizierungsmetriken?

Jede Klassifizierungsmetrik zeigt uns die Modellleistung aus einem anderen Blickwinkel. Wir wissen, dass ROC-AuC uns die Gesamtranking-Fähigkeit eines Modells gibt, während die KS-Statistik uns zeigt, wo die maximale Lücke zwischen zwei Gruppen auftritt.

Wenn es um den Gini -Koeffizienten geht, zeigt es uns, wie viel besser unser Modell ist, als zufällige Erraten bei der Rangliste der positiven Aspekte als die Unfavourable.


Lassen Sie uns zunächst sehen, wie der Gini -Koeffizient berechnet wird.

Dafür verwenden wir wieder die Deutscher Kreditdatensatz.

Verwenden wir dieselben Beispieldaten, mit denen wir die Berechnung der Kolmogorov-Smirnov (KS) -Statistik verstanden haben.

Tabelle mit 10 Datenpunkten mit tatsächlichen Klassenbezeichnungen (1/2) und vorhergesagten Wahrscheinlichkeiten für die Klasse 2 (Ausfassungen), die zur Berechnung des Gini -Koeffizienten verwendet wurden.
Bild des Autors

Diese Stichprobendaten wurden erhalten, indem die logistische Regression auf den deutschen Kreditdatensatz angewendet wurde.

Da das Modell Wahrscheinlichkeiten ausgibt, haben wir eine Probe von 10 Punkten aus diesen Wahrscheinlichkeiten ausgewählt, um die Berechnung des Gini -Koeffizienten zu demonstrieren.

Berechnung

Schritt 1: Sortieren Sie die Daten nach vorhergesagten Wahrscheinlichkeiten.

Die Stichprobendaten werden bereits durch Vorhersage der Wahrscheinlichkeiten sortiert.

Schritt 2: Kumulative Bevölkerung und kumulative Optimistic berechnen.

Kumulative Bevölkerung: Die kumulative Anzahl von Aufzeichnungen, die bis zu dieser Zeile berücksichtigt werden.

Kumulative Bevölkerung (%): Der Prozentsatz der bisherigen Gesamtbevölkerung.

Kumulative Optimistic: Wie viele tatsächliche Optimistic (Klasse 2) haben wir bis zu diesem Punkt gesehen.

CUmulative Optimistic (%): Der Prozentsatz der bisherigen positiven positiven.

Bild des Autors

Schritt 3: Diagramm X- und Y -Werte

X = kumulative Bevölkerung (%)

Y = kumulative Optimistic (%)

Lassen Sie uns hier Python verwenden, um diese X- und Y -Werte zu zeichnen.

Code:

import matplotlib.pyplot as plt

X = (0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)
Y = (0.0, 0.25, 0.50, 0.75, 0.75, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00)

# Plot curve
plt.determine(figsize=(6,6))
plt.plot(X, Y, marker='o', shade="cornflowerblue", label="Mannequin Lorenz Curve")
plt.plot((0,1), (0,1), linestyle="--", shade="grey", label="Random Mannequin (Diagonal)")
plt.title("Lorenz Curve from Pattern Information", fontsize=14)
plt.xlabel("Cumulative Inhabitants % (X)", fontsize=12)
plt.ylabel("Cumulative Positives % (Y)", fontsize=12)
plt.legend()
plt.grid(True)
plt.present()

Handlung:

Bild des Autors

Die Kurve, die wir erhalten, wenn wir die kumulative Bevölkerung (%) und kumulative Optimistic (%) zeichnen Lorenz Kurve.

Schritt 4: Berechnen Sie die Fläche unter der Lorenz -Kurve.

Als wir über ROC-AuC diskutierten, fanden wir den Bereich unter der Kurve mit der Trapezformel.

Jede Area zwischen zwei Punkten wurde als Trapez behandelt, seine Fläche wurde berechnet und dann wurden alle Bereiche zusammengefügt, um den Endwert zu erhalten.

Die gleiche Methode wird hier angewendet, um die Fläche unter der Lorenz -Kurve zu berechnen.

Bereich unter der Lorenz -Kurve

Bereich der Trapez:

$$
textual content {space} = frac {1} {2} instances (y_1 + y_2) instances (x_2 – x_1)
$$

Von (0,0, 0,0) bis (0,1, 0,25):
(
A_1 = frac {1} {2} (0+0,25) (0,1-0,0) = 0,0125
)

Von (0,1, 0,25) bis (0,2, 0,50):
(
A_2 = frac {1} {2} (0,25+0,50) (0,2-0,1) = 0,0375
)

Von (0,2, 0,50) bis (0,3, 0,75):
(
A_3 = frac {1} {2} (0,50+0,75) (0,3-0,2) = 0,0625
)

Von (0,3, 0,75) bis (0,4, 0,75):
(
A_4 = frac {1} {2} (0,75+0,75) (0,4-0,3) = 0,075
)

Von (0,4, 0,75) bis (0,5, 1,00):
(
A_5 = frac {1} {2} (0,75+1,00) (0,5-0,4) = 0,0875
)

Von (0,5, 1,00) bis (0,6, 1,00):
(
A_6 = frac {1} {2} (1,00+1,00) (0,6-0,5) = 0,100
)

Von (0,6, 1,00) bis (0,7, 1,00):
(
A_7 = frac {1} {2} (1,00+1,00) (0,7-0,6) = 0,100
)

Von (0,7, 1,00) bis (0,8, 1,00):
(
A_8 = frac {1} {2} (1,00+1,00) (0,8-0,7) = 0,100
)

Von (0,8, 1,00) bis (0,9, 1,00):
(
A_9 = frac {1} {2} (1,00+1,00) (0,9-0,8) = 0,100
)

Von (0,9, 1,00) bis (1,0, 1,00):
(
A_ {10} = frac {1} {2} (1,00+1,00) (1.0-0.9) = 0,100
)

Gesamtfläche unter Lorenz Kurve:
(
A = 0,0125+0,0375+0,0625+0,075+0,0875+0,100+0,100+0,100+0,100+0,100 = 0,775
)

Wir haben die Fläche unter der Lorenz -Kurve mit 0,775 berechnet.

Hier haben wir die kumulative Bevölkerung (%) und kumulative Optimistic (%) aufgetragen, und wir können feststellen, dass der Bereich unter dieser Kurve zeigt, wie schnell die positiven (Klasse 2) erfasst werden, wenn wir die sortierte Liste hinunterziehen.

In unserem Beispieldatensatz haben wir 4 optimistic (Klasse 2) und 6 Unfavourable (Klasse 1).

Für ein perfektes Modell erfasst es zum Zeitpunkt der Erreichung von 40% der Bevölkerung 100% der positiven Aspekte.

Die Kurve sieht für ein perfektes Modell so aus.

Bild des Autors

Bereich unter der Lorenz -Kurve für das perfekte Modell.

(
start {ausgerichtet}
textual content {perfekter Bereich} & = textual content {Triangle (0,0 bis 0,4,1)} + textual content {Rechteck (0,4,1 bis 1,1)} (6PT)
& = frac {1} {2} Instances 0.4 Instances 1 ;+; 0,6 Instances 1 (6pt)
& = 0,2 + 0,6 (6pt)
& = 0,8
finish {ausgerichtet}
)

Wir haben auch eine andere Methode, um die Fläche unter der Kurve für das perfekte Modell zu berechnen.

(
textual content {let} pi textual content {sei der Anteil der Positiven im Datensatz.}
)

(
textual content {perfekter Bereich} = frac {1} {2} pi cdot 1 + (1- pi) cdot 1
) (
= frac { pi} {2} + (1- pi)
) (
= 1 – Frac { pi} {2}
)

Für unseren Datensatz:

Hier haben wir 4 Aspekte von 10 Datensätzen, additionally: π = 4/10 = 0,4.

(
textual content {perfekter Bereich} = 1 – frac {0,4} {2} = 1 – 0,2 = 0,8
)

Wir haben die Fläche unter der Lorenz -Kurve für unseren Beispieldatensatz und auch für das perfekte Modell mit der gleichen Anzahl von positiven und negativen Negativen berechnet.

Wenn wir jetzt den Datensatz ohne Sortierung durchgehen, sind die positiven Positiven gleichmäßig verteilt. Dies bedeutet, dass die Charge, mit der wir Optimistic sammeln, die gleiche wie die Charge, mit der wir uns durch die Bevölkerung bewegen.

Dies ist das Zufallsmodell, und es gibt immer einen Bereich unter der Kurve von 0,5.

Bild des Autors

Schritt 5: Berechnen Sie den Gini -Koeffizienten

(
A _ { textual content {Modell}} = 0,775
)

(
A _ { textual content {random}} = 0,5
) (
A _ { textual content {perfekt}} = 0,8
) (
textual content{Gini} = frac{A_{textual content{mannequin}} – A_{textual content{random}}}{A_{textual content{excellent}} – A_{textual content{random}}}
) (
= frac {0,775 – 0,5} {0,8 – 0,5}}
) (
= frac {0,275} {0,3}
) (
ca. 0,92
)

Wir haben Gini = 0,92, was bedeutet, dass quick alle positiven Positives ganz oben auf der sortierten Liste konzentriert sind. Dies zeigt, dass das Modell eine sehr gute Arbeit bei der Trennung von Positiven von Negativen leistet und perfekt annimmt.


Wenn wir gesehen haben, wie der Gini -Koeffizient berechnet wird, schauen wir uns an, was wir während der Berechnung tatsächlich getan haben.

Wir haben eine Stichprobe von 10 Punkten betrachtet, die aus Ausgangswahrscheinlichkeiten aus logistischer Regression bestand.

Wir haben die Wahrscheinlichkeiten in absteigender Reihenfolge sortiert.

Als nächstes berechneten wir die kumulative Bevölkerung (%) und kumulative Optimistic (%) und zeichneten sie dann auf.

Wir haben eine Kurve namens Lorenz Curve erhalten und die Fläche darunter berechnet, die 0,775 beträgt.

Lassen Sie uns nun verstehen, was 0,775 ist?

Unsere Stichprobe besteht aus 4 positiven (Klasse 2) und 6 Negativen (Klasse 1).

Die Ausgangswahrscheinlichkeiten sind für Klasse 2, was bedeutet, dass der Kunde der Wahrscheinlichkeit, je höher die Wahrscheinlichkeit ist, der Klasse 2 häufiger angehört.

In unseren Stichprobendaten werden die Positiven innerhalb von 50% der Bevölkerung erfasst, was bedeutet, dass alle positiven positiven Bestimmungen an der Spitze eingestuft werden.

Wenn das Modell perfekt ist, werden die Positiven in den ersten 4 Zeilen erfasst, dh innerhalb der ersten 40% der Bevölkerung und die Fläche unter der Kurve für das perfekte Modell 0,8.

Aber wir haben AUC = 0,775, was nahezu perfekt ist.

Hier versuchen wir, die Effizienz des Modells zu berechnen. Wenn mehr Optimistic oben konzentriert sind, bedeutet dies, dass das Modell intestine positiv und negativ klassifiziert.

Als nächstes berechneten wir den Gini -Koeffizienten, der 0,92 beträgt.

(
textual content{Gini} = frac{A_{textual content{mannequin}} – A_{textual content{random}}}{A_{textual content{excellent}} – A_{textual content{random}}}
)

Der Zähler erzählt uns, wie viel besser unser Modell ist als zufällige Vermutung.

Der Nenner teilt uns die maximal mögliche Verbesserung gegenüber zufällig aus.

Das Verhältnis setzt diese beiden zusammen, so dass der Gini -Koeffizient immer zwischen 0 (zufällig) und 1 (perfekt) liegt.

Gini wird verwendet, um zu messen, wie nahe das Modell an der Trennung positiver und negativer Klassen perfekt ist.

Aber wir können Zweifel daran haben, warum wir Gini berechnet haben und warum wir nach 0,775 nicht aufgehalten haben.

0,775 ist die Fläche unter der Lorenz -Kurve für unser Modell. Es sagt uns nicht, wie nahe das Modell ist, perfekt zu sein, ohne es mit 0,8 zu vergleichen, was der Bereich für das perfekte Modell ist.

Additionally berechnen wir Gini, um es so zu standardisieren, dass es zwischen 0 und 1 fällt, was es einfach macht, Modelle zu vergleichen.


Banken verwenden auch den Gini-Koeffizienten, um Kreditrisikomodelle neben der ROC-AuC- und KS-Statistik zu bewerten. Zusammen geben diese Maßnahmen ein vollständiges Bild der Modellleistung.


Berechnen wir nun ROC-AUC für unsere Stichprobendaten.

import pandas as pd
from sklearn.metrics import roc_auc_score

# Pattern knowledge
knowledge = {
    "Precise": (2, 2, 2, 1, 2, 1, 1, 1, 1, 1),
    "Pred_Prob_Class2": (0.92, 0.63, 0.51, 0.39, 0.29, 0.20, 0.13, 0.10, 0.05, 0.01)
}

df = pd.DataFrame(knowledge)

# Convert Precise: class 2 -> 1 (optimistic), class 1 -> 0 (unfavourable)
y_true = (df("Precise") == 2).astype(int)
y_score = df("Pred_Prob_Class2")

# Calculate ROC-AUC
roc_auc = roc_auc_score(y_true, y_score)
roc_auc

Wir haben AUC = 0,9583

Jetzt Gini = (2 * AUC) – 1 = (2 * 0,9583) – 1 = 0,92

Dies ist die Beziehung zwischen Gini und Roc-Auc.


Berechnen wir nun den Gini -Koeffizienten in einem vollständigen Datensatz.

Code:

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score

# Load dataset
file_path = "C:/german.knowledge"
knowledge = pd.read_csv(file_path, sep=" ", header=None)

# Rename columns
columns = (f"col_{i}" for i in vary(1, 21)) + ("goal")
knowledge.columns = columns

# Options and goal
X = pd.get_dummies(knowledge.drop(columns=("goal")), drop_first=True)
y = knowledge("goal")

# Convert goal: make it binary (1 = good, 0 = unhealthy)
y = (y == 2).astype(int)

# Practice-test break up
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# Practice logistic regression
mannequin = LogisticRegression(max_iter=10000)
mannequin.match(X_train, y_train)

# Predicted possibilities
y_pred_proba = mannequin.predict_proba(X_test)(:, 1)

# Calculate ROC-AUC
auc = roc_auc_score(y_test, y_pred_proba)

# Calculate Gini
gini = 2 * auc - 1

auc, gini

Wir haben Gini = 0,60

Interpretation:

Gini> 0,5: akzeptabel.

Gini = 0,6–0,7: gutes Modell.

Gini = 0,8+: ausgezeichnet, selten erreicht.


Datensatz

Der in diesem Weblog verwendete Datensatz ist der Deutscher Kreditdatensatzdas öffentlich im UCI -Repository für maschinelles Lernen verfügbar ist. Es wird unter dem bereitgestellt Artistic Commons Attribution 4.0 Worldwide (CC nach 4.0) Lizenz. Dies bedeutet, dass es frei verwendet und mit ordnungsgemäßer Zuordnung geteilt werden kann.


Ich hoffe, Sie haben diesen Weblog nützlich gefunden.

Wenn Sie gerne lesen, sollten Sie es mit Ihrem Netzwerk teilen und Ihre Gedanken teilen.

Wenn Sie meine früheren Blogs nicht gelesen haben Roc-auc Und Kolmogorov Smirnov StatistikSie können sie hier überprüfen.

Danke fürs Lesen!

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert