Capstone resuelto: el predictor de abandono, de la pregunta al despliegue
Este es el proyecto que ata TODA la carrera: un caso completo de abandono de clientes resuelto en siete etapas, con los numeros, las decisiones y los errores que se cometen de verdad. Cada etapa muestra su entregable concreto y el codigo que la ejecuta, citando el OA especifico donde se fundo la tecnica. Correr este capstone entero (una tarde con un dataset tuyo) es la mejor preparacion para una defensa de proyecto que cualquier rubrica.

Etapa 1 · La pregunta (la que nadie quiere trabajar)
Pedido vago: "queremos predecir churn". Buenas preguntas tienen cuatro componentes — decision, sujeto, horizonte y metrica: "Que clientes con suscripcion mensual cancelaran en los proximos 30 dias, para que el equipo de retencion les ofrezca una llamada ANTES, priorizando llamadas donde el costo de la llamada (3 USD) es menor que el margen recuperado (25 USD)". Ese numero de margenes NO es decoracion: define el umbral operativo de la etapa 6 y se acuerda CON el negocio en la etapa 1. Entregable: una pagina escrita y firmada: pregunta, metrica de exito, costos de error, limite temporal.
Etapa 2 · Datos y primera mirada
EDA de 20 minutos que cambia el proyecto
Paso 1 · Panoramica
Dataset: 10.000 filas de clientes (antiguedad_meses, uso_semanal, ticket_medio, soporte_llamadas, plan, churn). describe() y value_counts() primero: los extremos imposibles (antiguedad −3) se ven en la primera pasada si MIRAS.import pandas as pd df = pd.read_csv('clientes.csv') print(df.describe()); print(df['churn'].value_counts(normalize=True))Paso 2 · Base rate
Hallazgo 1: churn global 22%. Un clasificador que prediga SIEMPRE "no churn" saca 78% de accuracy: esa es la linea base que todo modelo debe batir con holgura. Anotala: es tu primer numero de negocio.Paso 3 · Sospechas
Hallazgo 2: soporte_llamadas es cero en el 40% de filas del plan Basico y altisimo en Premium: no es missing a imputar tontamente, es ESTRUCTURA del plan. La mediana global los fundiria. Entregable: 5 hallazgos con grafico cada uno y decision de limpieza etiquetada.
Paso 1 de 3
Etapa 3 · Limpieza con decision
Cuatro movidas, cuatro justificaciones
Paso 1 · Faltantes
Missing: media/mediana SOLO en numericos sin estructura; para soporte_llamadas, imputar por MEDIANA DENTRO de plan (agrupar primero) + flag was_missing: la ausencia informa.Paso 2 · Extremos
Outliers: antiguedad −3 → error de captura: corrige a NULL si no hay forma de recuperarlo. No borres filas sin diagnosticar la causa del 41 vs 4.1.Paso 3 · Escalado
Codificacion: plan (nominal) → one-hot; ticket_medio y uso_semanal → estandarizar con z-score (recuerda estd) solo despues del split. Regla anti-fuga: el scaler aprende SOLO del train.Paso 4 · Split
Split: 80/20 estratificado por churn (si no, el 20% puede salir desbalanceado y la evaluacion sera ruido). Con tiempo en el dataset (fechas de suscripcion): corte temporal, nunca split aleatorio — el futuro no se mezcla con el pasado.
Paso 1 de 4
Etapa 4 · Baseline y modelo
La humilde regresion logistica primero
Paso 1 · Filosofia
Por que baseline logistica y no XGBoost de inicio: porque sin el numero del modelo simple no sabras si la complejidad PAGA. Regla: si predecir la mayoria de clase ya da 0.78, el modelo complejo tiene que justificarlo en costo.Paso 2 · Ajuste
Entrena logistica con C=1 por defecto y guarda matriz de confusion en el test:from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix model = LogisticRegression(max_iter=1000).fit(X_tr, y_tr) y_hat = model.predict(X_te)Paso 3 · Cuenta
Resultado: confusion = [[620, 80], [120, 180]] (no-churn/no, no-churn/churn, churn/no, churn/churn). Accuracy 0.80 frente al 0.78 del constante: apenas la bate. Los recall de churn: 180/300 = 0.60: 4 de cada 10 abandonadores se escapan.
Paso 1 de 3
Etapa 5 · Metrica de NEGOCIO (el giro de timon)
Traducir la confusion a dolares
Paso 1 · Precios
Costos de la etapa 1: llamada de retencion 3 USD, margen recuperado por saved customer 25 USD. Cada churn NO detectado cuesta 25; cada falso positivo cuesta 3.Paso 2 · Costo
Estado actual: FN = 120 → costo 120·25 = 3000; FP = 80 → 80·3 = 240. Total 3240 USD por ciclo de 30 dias.Paso 3 · Nuevo objetivo
El objetivo del proyecto NO es accuracy: es minimizar ese numero. A partir de aqui cada modelo o umbral se evalua en esa moneda, y el dashboard lo reporta asi. Entregable: matriz de confusion con costos al lado.
Paso 1 de 3
Etapa 6 · Mejora: modelo y umbral
Donde el trabajo fino paga
Paso 1 · Curva costo-umbral
Arbol de boosting con class_weight y barrido de umbral de decision sobre la probabilidad: al umbral 0.30, recall 0.80 y precision 0.49 — mas llamadas (136 FP, 408 USD) pero FN cae a 60 (1500 USD): costo total 1908, una rebaja del 41%.probas = gb.predict_proba(X_te)[:, 1] for t in [0.3, 0.4, 0.5, 0.6]: y = (probas >= t) print(t, costo_de(y, y_te))Paso 2 · Explicar
Valida con cross-validation del train (no tuneando sobre el test!) y mira la SHAP global: uso_semanal y soporte_llamadas dominan; la variable de plan es mas importante que el ingreso: accion de negocio directa (retencion proactiva dirigida al plan Basico).Paso 3 · Equidad
Chequea equidad: tasa de falsos negativos por segmento (plan, region). Si el modelo abandona MAS a un segmento, eso es dano operativo, no metrica bonita (OA de etica y sesgo).
Paso 1 de 3
Etapa 7 · Desplegar y no irse
- Artefactos: modelo serializado + requirements.txt + version DVC/git del dataset exacto (el OA de Git te dice por que).
- Servir: un microservicio Flask con /predict que reciba el perfil y devuelva probabilidad; el negocio consume la LISTA priorizada diaria, no el endpoint crudo.
- Monitoreo: drift de entradas (KS o PSI por columna) y caida del recall real (el ground truth llega 30 dias despues): alertas antes del desastre silencioso.
- Feedback loop: cada llamada de retencion registrada (salvo/perdido) alimenta la siguiente version con etiqueta real — el proyecto vive en ciclo, no termina en el informe.
El capstone en un vistazo
- Churn end-to-end
- Etapa 1
- Pregunta con costos acordados
- Etapas 2-3
- EDA con decisiones etiquetadas
- Etapas 4-5
- Baseline batido y metrica en dolares
- Etapas 6-7
- Umbral optimo, SHAP, equidad
- Servir, monitorear, realimentar
- Etapa 1
Autoexamen cronometrado (20 minutos)
Del baseline: confusion [[620,80],[120,180]]. Calcula el RECALL de churn (180 entre 300), en decimal.
Con costos 25 USD por FN y 3 USD por FP, el costo del estado baseline (120 FN, 80 FP) es de cuantos USD.
La clase mayoritaria da accuracy 0.78. Un modelo nuevo saca 0.79 y recall de churn 0.55. ¿Lo despliegas?
El escalado con z-score se ajusta (fit) sobre todo el dataset antes del split para aprovechar mas datos.
El de decision (p. ej. 0.30 en vez de 0.50) se elige minimizando el costo del negocio, no la accuracy.
Etapa con su entregable.
Para profundizar
MLOps: pipelines de ML de Google CloudGuia gratuita; ordena por niveles de madurez todo lo que acabas de recorrer.
MLflow: ciclo de vida del experimentoRegistro de experimentos, versiones de modelo y linea de promocion a produccion: el inventario del capstone desplegado.
Recorre tus ultimos 3 proyectos con las siete etapas: ¿en cual faltaron las etapas 1 (pregunta con costo) o 5 (metrica de negocio)? ¿Cual fue el numero que no preguntaste al negocio? Ese es el parrafo que mas impresionara en una defensa: "mi metrica de exito es X porque su costo es Y".
Tu texto se guarda sólo en este dispositivo.
Comentarios
Inicia sesión para comentar.
Todavía no hay comentarios. Sé la primera persona en opinar.