Menu
CoddyTech

Rezygnacja klientów

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 58 z 58.

Usługa zestawów posiłków wysyła cotygodniowe pudełka. Plik subscribers.csv obejmuje 300 klientów i informację, czy zrezygnowali w ciągu dwóch miesięcy. Pominięte pudełka to jeden z sygnałów ostrzegawczych:

Słupki przedstawiające odsetek osób, które zrezygnowały, według liczby pominiętych pudełek w ciągu ostatnich 3 miesięcy: 15% dla 0 pominiętych, 36% dla 1, 60% dla 2, 61% dla 3 i 86% dla 4 lub więcej

Zespół chce dzwonić do klientów zagrożonych odejściem, zanim odejdą. Jeden sygnał to za mało, więc las uwzględni je wszystkie.

Jej głębokość wymaga dostrojenia, a krzywa ROC pokaże, jak dobrze wyniki ryzyka porządkują osoby, które rezygnują.

challenge icon

Wyzwanie

Trudny

prep przechowuje ścieżki; program odczytuje głębokości drzew do depths.

  1. Wydziel stratyfikowaną ćwiartkę danych testowych, random_state=0.
  2. Przeprowadź wyszukiwanie siatkowe dla prep i lasu składającego się ze 100 drzew (random_state=0), sprawdzając wartości z depths w 5 foldach na wierszach treningowych. Wypisz najlepszą głębokość i dokładność walidacji krzyżowej.
  3. Na podstawie testowych prawdopodobieństw rezygnacji wypisz AUC i listę do kontaktu: prawdopodobieństwa wynoszące co najmniej 0.5.
  4. Narysuj krzywą ROC jako forest, przerywaną przekątną coin toss i legendą; wyświetl wykres.

Dla innej usługi i głębokości 3, 5:

Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelled

Krzywa ROC zatytułowana Kto zrezygnuje? z ciągłą krzywą forest wznoszącą się stromo ponad przerywaną przekątną coin toss i legendą

Potem Coddy opisuje twoją krzywą.

Spróbuj swoich sił

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"]

# Ścieżki, tak jak w 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)])

# Głębokości drzew do wypróbowania
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")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online