Menu
CoddyTech

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 :

Barres montrant la part des résiliations selon le nombre de boîtes non récupérées au cours des 3 derniers mois : 15 % pour 0 boîte non récupérée, 36 % pour 1, 60 % pour 2, 61 % pour 3 et 86 % pour 4 ou plus

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.

challenge icon

Défi

Difficile

prep contient les étapes de prétraitement ; le programme lit les profondeurs des arbres dans depths.

  1. Réserve un quart des données pour le test, en préservant les proportions des classes, avec random_state=0.
  2. Effectue une recherche sur grille sur prep suivi d’une forêt de 100 arbres (random_state=0), en testant les valeurs de depths, avec 5 plis, sur les lignes d’entraînement. Affiche la meilleure profondeur et la précision en validation croisée.
  3. À 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.
  4. Trace la courbe ROC sous le nom forest, ajoute une diagonale en pointillés coin toss et 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 cancelled

Une courbe ROC intitulée « Qui va résilier ? », avec une courbe forestière pleine qui monte rapidement au-dessus d’une diagonale en pointillés représentant un tirage à pile ou face, et une légende

Ensuite, 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
quiz iconTestez-vous

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é

Entraînez-vous par vous-même : Compilateur Python en ligne