Menu
CoddyTech

Cancelamento de Clientes

Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 58 de 58.

Um serviço de kits de refeições envia caixas semanalmente. subscribers.csv acompanha 300 clientes e se cancelaram dentro de dois meses. Caixas puladas são um sinal de alerta:

Barras da proporção de clientes que cancelaram por número de caixas puladas nos últimos 3 meses: 15% para 0 puladas, 36% para 1, 60% para 2, 61% para 3 e 86% para 4 ou mais

A equipe quer ligar para os clientes em risco antes que eles vão embora. Um único sinal não basta, então uma floresta vai ponderar todos eles.

Sua profundidade precisa ser ajustada, e uma curva ROC mostrará o quão bem as pontuações de risco ordenam quem cancela.

challenge icon

Desafio

Difícil

prep contém as etapas; o programa lê as profundidades das árvores em depths.

  1. Separe um quarto dos dados para teste de forma estratificada, random_state=0.
  2. Faça uma busca em grade por prep mais uma floresta de 100 árvores (random_state=0) em depths, com 5 folds, usando as linhas de treino. Imprima a melhor profundidade e a acurácia de validação cruzada.
  3. Com base nas chances de cancelamento no conjunto de teste, imprima a AUC e a lista de ligações: chances de 0.5 ou mais.
  4. Plote a curva ROC como forest, uma diagonal tracejada de coin toss e uma legenda; exiba o gráfico.

Para outro serviço e profundidades 3, 5:

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

Uma curva ROC intitulada Who Will Cancel? com uma curva forest sólida subindo acentuadamente acima de uma diagonal tracejada de lançamento de moeda e uma legenda

Em seguida, Coddy descreve sua curva.

Experimente você mesmo

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

# As etapas, como em Prepare os Dados
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)])

# As profundidades da árvore a testar
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")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado supervisionado

Pratique por conta própria: Compilador de Python online