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:
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.
Desafio
Difícilprep contém as etapas; o programa lê as profundidades das árvores em depths.
- Separe um quarto dos dados para teste de forma estratificada,
random_state=0. - Faça uma busca em grade por
prepmais uma floresta de 100 árvores (random_state=0) emdepths, com 5 folds, usando as linhas de treino. Imprima a melhor profundidade e a acurácia de validação cruzada. - 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.
- Plote a curva ROC como
forest, uma diagonal tracejada decoin tosse 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 cancelledEm 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
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
1Seu primeiro modelo
Aprendendo com exemplosConjuntos de treino e testeAjustar e preverAvaliar um modeloRecapitulação: classificador de sementes4Regressão logística
Previsões de sim ou nãoO limiar de decisãoPesos como evidênciasVárias classesRevisão: filtro de spam2Vizinhos Mais Próximos
Como o k-NN DecideEscolhendo kLimites de DecisãoEscalonamento para VizinhosRevisão: Vizinhos do Vinho5Avaliando Classificadores
A Matriz de ConfusãoPrecisão e RevocaçãoA Pontuação F1Classes DesbalanceadasCurvas ROCRecapitulação: Teste de Triagem8Validação Cruzada
Validação K-FoldComparando Modelos de Forma JustaBusca em GradeRevisão: Consertos de Skate11Projeto: Espécies de Pinguins
Conheça os PinguinsPrepare os DadosEscolha um ModeloAjuste o VencedorColoque o Modelo em Produção3Regressão Linear
Prevendo númerosVárias característicasMedindo errosGráficos de resíduosRevisão: aluguel de bicicletas6Árvores de Decisão
Árvores fazem perguntasLendo uma árvoreProfundidade da árvoreImportância das característicasRevisão: decisões de empréstimo9Métodos ensemble
Florestas aleatóriasPor que as florestas funcionamBoosting de gradienteRevisão: Guarda-florestal12Desafios Finais
Evolução do DiabetesAprovação de CréditoDígitos ManuscritosCancelamento de ClientesPratique por conta própria: Compilador de Python online