Abandono de clientes
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 58 de 58.
Un servicio de kits de comida envía cajas semanalmente. subscribers.csv sigue a 300 clientes e indica si cancelaron en un plazo de dos meses. Las cajas omitidas son una señal de alerta:
El equipo quiere llamar a los clientes en riesgo antes de que se vayan. Una sola señal no es suficiente, así que un bosque las ponderará todas.
Es necesario ajustar su profundidad, y una curva ROC mostrará qué tan bien ordenan las puntuaciones de riesgo a quienes cancelan.
Desafío
Difícilprep contiene los procesos; el programa lee las profundidades de los árboles en depths.
- Separa una cuarta parte estratificada para la prueba, con
random_state=0. - Realiza una búsqueda en cuadrícula de
prepmás un bosque de 100 árboles (random_state=0) entre los valores dedepths, con 5 pliegues, usando las filas de entrenamiento. Imprime la mejor profundidad y la precisión de validación cruzada. - A partir de las probabilidades de cancelación del conjunto de prueba, imprime el AUC y la lista de llamadas: probabilidades de 0.5 o más.
- Traza la curva ROC como
forest, una diagonal discontinua decoin tossy una leyenda; muéstrala.
Para otro servicio y las profundidades 3, 5:
Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelledDespués, Coddy describe tu curva.
Pruébalo tú mismo
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"]
# Las rutas, como en Prepare the Data
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)])
# Las profundidades del árbol que se van a probar
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")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamos9Métodos de conjunto
Bosques aleatoriosPor qué funcionan los bosquesAumento de gradienteRepaso: guardabosques12Desafíos finales
Progreso de la diabetesAprobación de créditoDígitos escritos a manoAbandono de clientesPractica por tu cuenta: Compilador de Python online