Menu
CoddyTech

Abbandono dei clienti

Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 58 di 58.

Un servizio di kit per i pasti spedisce scatole ogni settimana. subscribers.csv segue 300 clienti e indica se hanno annullato l’abbonamento entro due mesi. Le scatole saltate sono un segnale d’allarme:

Percentuale di chi ha annullato l’abbonamento in base alle scatole saltate negli ultimi 3 mesi: 15% per 0 scatole saltate, 36% per 1, 60% per 2, 61% per 3 e 86% per 4 o più

Il team vuole chiamare i clienti a rischio prima che se ne vadano. Un solo segnale non basta, quindi una foresta li peserà tutti.

La sua profondità deve essere regolata e una curva ROC mostrerà quanto bene i punteggi di rischio ordinano chi annulla.

challenge icon

Sfida

Difficile

prep contiene i percorsi; il programma legge le profondità degli alberi in depths.

  1. Separa un quarto dei dati per il test, stratificandolo, con random_state=0.
  2. Esegui una ricerca a griglia su prep e una foresta di 100 alberi (random_state=0) usando depths, con 5 fold, sulle righe di training. Stampa la profondità migliore e l'accuratezza CV.
  3. Tra le probabilità di disdetta del test, stampa l'AUC e la lista di chiamata: probabilità pari o superiori a 0.5.
  4. Traccia la curva ROC con etichetta forest, la diagonale tratteggiata coin toss e una legenda; visualizzala.

Per un altro servizio e con profondità 3, 5:

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

Una curva ROC intitolata Who Will Cancel? con una curva forest continua che sale ripidamente sopra una diagonale tratteggiata coin toss e una legenda

Poi Coddy descrive la tua curva.

Provalo tu

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

# I percorsi, come in Preparare i dati
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)])

# Le profondità dell'albero da provare
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")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento supervisionato

Esercitati da solo: Compilatore Python online