Menu
CoddyTech

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:

Anteil der Kündigungen nach übersprungenen Boxen in den letzten 3 Monaten: 15% bei 0 übersprungenen Boxen, 36% bei 1, 60% bei 2, 61% bei 3 und 86% bei 4 oder mehr

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.

challenge icon

Aufgabe

Schwer

prep enthält die Verarbeitungsschritte; das Programm liest Baumtiefen in depths ein.

  1. Teile ein stratifiziertes Testviertel ab, random_state=0.
  2. Führe auf den Trainingszeilen eine Grid-Suche mit prep und einem Wald aus 100 Bäumen (random_state=0) über depths und mit 5 Folds durch. Gib die beste Tiefe und die CV-Genauigkeit aus.
  3. Gib anhand der Testwahrscheinlichkeiten für eine Kündigung den AUC-Wert und die Anrufliste aus: Wahrscheinlichkeiten von 0.5 oder höher.
  4. Zeichne die ROC-Kurve als forest, eine gestrichelte coin 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 cancelled

Eine ROC-Kurve mit dem Titel „Who Will Cancel?“. Die durchgezogene Waldkurve steigt steil über die gestrichelte Diagonale des Münzwurfs; dazu eine Legende.

Dann 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
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler