Kreditgenehmigung
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 56 von 58.
Eine Genossenschaftsbank gibt eine Kundenkarte heraus. In cards.csv gerieten 79 von 320 Karteninhabern in ihrem ersten Jahr mit Zahlungen in Rückstand:
Schulden helfen, aber die Gruppen überschneiden sich. Die Bank bewertet das Risiko jedes Antragstellers und leitet alle Personen, deren Risiko über einem Schwellenwert liegt, zur Überprüfung an einen Menschen weiter.
Die Regel: Erfasse einen festgelegten Anteil der zukünftigen Spätzahler. Wähle den Schwellenwert anhand der Validierungszeilen und bewerte ihn anschließend einmal anhand der Testzeilen.
Aufgabe
SchwerDas Programm liest den Recall ein, den die Bank erreichen möchte: target. Der Ausgangscode listet die Spalten und thresholds in absteigender Reihenfolge auf.
- Teile ein stratifiziertes Testviertel ab und danach ein stratifiziertes Validierungsviertel der verbleibenden Daten; verwende für beide
random_state=0. - Trainiere eine Pipeline mit den verbleibenden Trainingszeilen: Ersetze fehlende Werte in den Zahlen durch den Median und skaliere sie, wende One-Hot-Encoding auf
homean und verwende logistische Regression. - Wähle bei der Validierung den ersten Schwellenwert, dessen Recall
targeterreicht. - Gib ihn aus und danach, wie die Testergebnisse damit ausfallen, wie unten gezeigt (3 Dezimalstellen).
Für eine andere Bank und 0.7:
Threshold: 0.3 (validation recall 0.733)
Test: caught 15 of 21 late payers, 12 false alarms
Precision: 0.556Probier es selbst
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score, precision_score, confusion_matrix
cards = pd.read_csv("cards.csv")
numbers = ["age", "income_k", "debt_ratio", "years_at_job", "late_payments", "card_limit_k"]
text = ["home"]
X = cards[numbers + text]
y = cards["fell_behind"]
target = float(input())
thresholds = [0.5, 0.45, 0.4, 0.35, 0.3, 0.25, 0.2, 0.15, 0.1]
# Schreibe deinen Code unten
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler