Kundenabwanderung
Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 58 von 58.
Ein Mahlzeiten-Lieferservice verschickt jede Woche Boxen. subscribers.csv erfasst 300 Kunden und ob sie innerhalb von zwei Monaten gekündigt haben. Übersprungene Boxen sind ein Warnzeichen:
Das Team möchte gefährdete Kundinnen und Kunden anrufen, bevor sie abwandern. Ein einzelnes Anzeichen reicht nicht aus, deshalb wird ein Wald sie alle gewichten.
Seine Tiefe muss abgestimmt werden, und eine ROC-Kurve zeigt, wie gut die Risikowerte diejenigen einordnen, die kündigen.
Aufgabe
Schwerprep enthält die Verarbeitungsschritte; das Programm liest Baumtiefen in depths ein.
- Teile ein stratifiziertes Testviertel ab,
random_state=0. - Führe auf den Trainingszeilen eine Grid-Suche mit
prepund einem Wald aus 100 Bäumen (random_state=0) überdepthsund mit 5 Folds durch. Gib die beste Tiefe und die CV-Genauigkeit aus. - Gib anhand der Testwahrscheinlichkeiten für eine Kündigung den AUC-Wert und die Anrufliste aus: Wahrscheinlichkeiten von 0.5 oder höher.
- Zeichne die ROC-Kurve als
forest, eine gestricheltecoin toss-Diagonale und eine Legende; zeige den Plot an.
Für einen anderen Dienst und die Tiefen 3, 5:
Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelledDann beschreibt Coddy deine Kurve.
Probier es selbst
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, roc_auc_score
subscribers = pd.read_csv("subscribers.csv")
numbers = ["months_subscribed", "boxes_skipped", "complaints", "monthly_price", "delivery_rating"]
text = ["plan", "channel"]
X = subscribers[numbers + text]
y = subscribers["churned"]
# Die Verarbeitungspfade, wie in Prepare the Data
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# Die zu testenden Baumtiefen
n = int(input())
depths = []
for i in range(n):
depths.append(int(input()))
fig, ax = plt.subplots()
ax.set_title("Who Will Cancel?")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")
# 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