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:
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.
Sfida
Difficileprep contiene i percorsi; il programma legge le profondità degli alberi in depths.
- Separa un quarto dei dati per il test, stratificandolo, con
random_state=0. - Esegui una ricerca a griglia su
prepe una foresta di 100 alberi (random_state=0) usandodepths, con 5 fold, sulle righe di training. Stampa la profondità migliore e l'accuratezza CV. - Tra le probabilità di disdetta del test, stampa l'AUC e la lista di chiamata: probabilità pari o superiori a 0.5.
- Traccia la curva ROC con etichetta
forest, la diagonale tratteggiatacoin tosse 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 cancelledPoi 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
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento supervisionato
1Il tuo primo modello
Imparare dagli esempiInsiemi di addestramento e testAdattare e prevedereValutare un modelloRiepilogo: Ordinatore di semi4Regressione logistica
Previsioni sì o noLa soglia decisionaleI pesi come evidenzePiù classiRiepilogo: filtro antispam2Vicini più prossimi
Come decide k-NNScegliere kConfini decisionaliNormalizzare le scale per i viciniRiepilogo: vicini del vino5Misurare i classificatori
La matrice di confusionePrecisione e richiamoIl punteggio F1Classi sbilanciateCurve ROCRiepilogo: test di screening8Convalida incrociata
Validazione K-foldConfronto equo tra modelliRicerca a grigliaRiepilogo: riparazioni di skateboard11Progetto: specie di pinguini
Incontra i pinguiniPrepara i datiScegli un modelloOttimizza il miglioreDistribuisci il modello3Regressione lineare
Prevedere numeriPiù caratteristicheMisurare gli erroriGrafici dei residuiRiepilogo: noleggio di biciclette6Alberi decisionali
Gli alberi fanno domandeLeggere un alberoProfondità dell’alberoImportanza delle caratteristicheRiepilogo: decisioni sui prestiti9Insiemi
Foreste casualiPerché funzionano le foresteGradient BoostingRiepilogo: il guardiano della foresta12Sfide finali
Progressi del diabeteApprovazione del creditoCifre scritte a manoAbbandono dei clientiEsercitati da solo: Compilatore Python online