Attrition des clients
Fait partie de la section Apprentissage supervisé du Journey Machine Learning de Coddy. Leçon 58 sur 58.
Un service de kits-repas livre des boîtes chaque semaine. subscribers.csv suit 300 clients et indique s’ils ont résilié dans les deux mois. Les boîtes non récupérées sont un signe avant-coureur :
L’équipe veut appeler les clients à risque avant qu’ils ne partent. Un seul signe ne suffit pas, alors une forêt les prendra tous en compte.
Sa profondeur doit être ajustée, et une courbe ROC montrera dans quelle mesure les scores de risque classent les personnes qui résilient leur abonnement.
Défi
Difficileprep contient les étapes de prétraitement ; le programme lit les profondeurs des arbres dans depths.
- Réserve un quart des données pour le test, en préservant les proportions des classes, avec
random_state=0. - Effectue une recherche sur grille sur
prepsuivi d’une forêt de 100 arbres (random_state=0), en testant les valeurs dedepths, avec 5 plis, sur les lignes d’entraînement. Affiche la meilleure profondeur et la précision en validation croisée. - À partir des probabilités de résiliation sur les données de test, affiche l’AUC et la liste d’appels : probabilités de 0.5 ou plus.
- Trace la courbe ROC sous le nom
forest, ajoute une diagonale en pointilléscoin tosset une légende ; affiche le graphique.
Pour un autre service et les profondeurs 3, 5 :
Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelledEnsuite, Coddy décrit ta courbe.
Essayez vous-même
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"]
# Les branches, comme dans Préparer les données
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)])
# Les profondeurs d’arbre à essayer
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")
# Écrivez votre code ci-dessous
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Apprentissage supervisé
1Votre premier modèle
Apprendre à partir d’exemplesJeux d’entraînement et de testAjuster et prédireÉvaluer un modèleRécapitulatif : trieur de graines4Régression logistique
Prédictions oui ou nonLe seuil de décisionLes poids comme indicesPlusieurs classesRécapitulatif : filtre anti-spam2Plus proches voisins
Comment k-NN prend ses décisionsChoisir kFrontières de décisionMettre les voisins à l’échelleRécapitulatif : voisins et vin5Évaluer les classificateurs
La matrice de confusionPrécision et rappelLe score F1Classes déséquilibréesCourbes ROCRécapitulatif : test de dépistage8Validation croisée
Validation K-foldComparer les modèles équitablementRecherche par grilleRécapitulatif : réparations de skateboard11Projet : espèces de manchots
À la rencontre des manchotsPréparer les donnéesChoisir un modèleOptimiser le modèle gagnantDéployer le modèle3Régression linéaire
Prédire des nombresPlusieurs caractéristiquesMesurer les erreursGraphiques des résidusRécapitulatif : locations de vélos6Arbres de décision
Les arbres posent des questionsLire un arbreProfondeur de l’arbreImportance des caractéristiquesRécapitulatif : décisions de prêtEntraînez-vous par vous-même : Compilateur Python en ligne