Predicción de Churn en Beta Bank
Métrica de Éxito Alcanzada
Descripción del Proyecto
Resumen del proyecto
Contexto
Proyecto del Sprint 10 en TripleTen. Desarrollo de un modelo de Machine Learning para predecir la salida de clientes (churn) en Beta Bank.
Problema de negocio
Detectar clientes con riesgo de abandono para habilitar estrategias de retención. El proyecto exige un desempeño mínimo de F1 ≥ 0.59 y se evalúa también con AUC-ROC.
Objetivos (qué se busca demostrar con datos)
- Analizar y preparar los datos de clientes de Beta Bank.
- Explorar el desbalance de clases en la variable objetivo
Exited. - Entrenar modelos de clasificación sin corrección de desbalance.
- Aplicar al menos dos técnicas de balanceo (oversampling, undersampling,
class_weight). - Comparar y seleccionar el mejor modelo en validación.
- Evaluar resultados en conjunto de prueba.
Dataset(s) / tablas y atributos clave
- Churn.csv
- Ruta / fuente:
/datasets/Churn.csv - Atributos (descripción de columnas):
RowNumber: índice/posición de la fila en el dataset.CustomerId: identificador único del cliente.Surname: apellido del cliente.CreditScore: puntaje de crédito del cliente.Geography: país/región de residencia.Gender: género.Age: edad.Tenure: años de relación con el banco.Balance: saldo en cuenta.NumOfProducts: número de productos bancarios contratados.HasCrCard: indicador de tarjeta de crédito (1 = sí, 0 = no).IsActiveMember: indicador de actividad del cliente (1 = sí, 0 = no).EstimatedSalary: salario estimado.Exited: variable objetivo (1 = churn/abandonó, 0 = permanece).
- Ruta / fuente:
Alcance temporal y población
- Ventana temporal: N/A (no especificado).
- Población / muestra: clientes de Beta Bank incluidos en
Churn.csv.
Unidad de análisis
Cliente.
Métricas
- Métrica principal: F1-score.
- Métrica complementaria: AUC-ROC.
- Umbral de éxito: F1 ≥ 0.59.
Entregables
Herramientas utilizadas
- Python 3.11+: ejecución del pipeline de análisis/modelado.
- Pandas: carga, limpieza y preparación de datos.
- NumPy: operaciones numéricas.
- scikit-learn: preprocesamiento, modelos (árboles/ensambles/regresión logística), métricas (F1, AUC-ROC) y particiones.
- Jupyter Notebook: reporte reproducible.
- Conda: gestión de entorno y dependencias.
Proceso (clasificado por fases)
Sección 0 — Encabezado y configuración
- Configuración del entorno de trabajo (librerías, versiones y estilo de visualización) para asegurar reproducibilidad y consistencia del análisis.
0.1 Importación y verificación de librerías
- Carga de librerías (Pandas, NumPy, Matplotlib/Seaborn, scikit-learn) y verificación de versiones.
0.2 Configuración general de visualización
- Ajustes de estilo/tamaño de gráficos para el EDA.
1 Carga del dataset y vista rápida
- Carga del archivo fuente y revisión inicial de estructura para entender dimensiones, tipos de datos y una muestra de registros.
1.1 Carga del dataset
- Lectura de
Churn.csvy revisión de dimensiones.
1.2 Exploración rápida
head()/info()para inspección de tipos y estructura.
2 Calidad de datos y estadística descriptiva
- Evaluación de calidad del dataset (duplicados, valores faltantes) y estadísticas descriptivas para identificar problemas y rangos atípicos antes del modelado.
2.1 Revisión de datos duplicados, valores nulos y estadísticas descriptivas
- Identificación de duplicados, conteo de nulos y análisis descriptivo de variables numéricas.
2.2 Tratamiento de valores nulos en Tenure
- Imputación de nulos en
Tenure(reemplazo por 0) y verificación posterior.
3 Análisis exploratorio de datos (EDA)
- Exploración de la distribución de la variable objetivo y de patrones en variables numéricas/categóricas para detectar señales asociadas al churn y entender el desbalance.
3.1 Balance de clases (variable objetivo)
- Distribución de
Exitedy cuantificación del desbalance.
3.2 Distribuciones univariadas de variables numéricas
- Histogramas / KDE para
CreditScore,Age,Balance,EstimatedSalaryy lectura inicial de patrones.
3.2.1 Distribución del puntaje de crédito
- Análisis de la distribución de
CreditScorepara identificar concentración de valores y posibles sesgos.
3.2.2 Distribución de la edad de los clientes
- Exploración de
Agepara identificar rangos dominantes y presencia de edades extremas.
3.2.3 Distribución del saldo en cuenta
- Revisión de
Balancepara detectar grupos diferenciados (por ejemplo, saldos en cero vs saldos altos).
3.2.4 Distribución del salario estimado
- Exploración de
EstimatedSalarypara observar dispersión y forma de la distribución.
3.3 Análisis de variables categóricas (Geography y Gender)
- Evaluación de churn por país y género (tablas de contingencia y visualizaciones) para identificar segmentos con mayor riesgo.
3.3.1 Relación entre país de residencia y salida de clientes
- Comparación de proporción de churn por
Geography.
3.3.2 Relación entre género y salida de clientes
- Comparación de proporción de churn por
Gender.
3.4 Detección de valores extremos en variables numéricas
- Uso de boxplots para detectar posibles valores atípicos (p. ej.,
Age,Balance,EstimatedSalary) que puedan impactar análisis y rendimiento.
4 Preprocesamiento de datos
- Preparación del dataset para modelado: definición de variables, transformación de categóricas y escalado de numéricas para habilitar entrenamiento consistente de modelos.
4.1 Selección de variables
- Definición de
target = Exitedy selección defeatures(excluyendo identificadores comoRowNumber,CustomerId,Surname).
4.2 Codificación de variables categóricas
- One-Hot Encoding para
GeographyyGender.
4.3 Escalado de variables numéricas
- Estandarización de variables numéricas con
StandardScalerpara modelos sensibles a escala (p. ej. logística).
5 Partición de datos
- Separación estratificada del dataset en conjuntos de entrenamiento, validación y prueba para evaluar desempeño y generalización sin fuga de información.
- División estratificada (60/20/20) para preservar proporción de
Exited. - Construcción de
X_train,X_valid,X_testyy_train,y_valid,y_test.
6 Entrenamiento de modelos base (sin balanceo)
- Entrenamiento de modelos iniciales sobre los datos originales para establecer una línea base (baseline) y cuantificar el impacto del desbalance.
6.1 DecisionTreeClassifier
- Entrenamiento y evaluación inicial con F1 y AUC-ROC.
6.2 RandomForestClassifier
- Entrenamiento y evaluación inicial con F1 y AUC-ROC.
6.3 LogisticRegression
- Entrenamiento y evaluación inicial con F1 y AUC-ROC.
7 Aplicación de técnicas de balanceo
- Corrección del desbalance de clases para mejorar la sensibilidad a la clase minoritaria (churn) y elevar F1 sin perder demasiada capacidad discriminativa.
7.1 Oversampling (sobremuestreo)
- Aumento de la clase minoritaria en el conjunto de entrenamiento.
7.2 Undersampling (submuestreo)
- Reducción de la clase mayoritaria en el conjunto de entrenamiento.
8 Entrenamiento de modelos con balanceo
- Re-entrenamiento de modelos usando datos balanceados (over/under) para comparar mejoras en F1 y AUC-ROC y seleccionar la mejor estrategia.
8.1 Árbol con oversampling
- Entrenamiento del árbol usando datos balanceados por sobremuestreo.
8.2 Random Forest con oversampling
- Entrenamiento del bosque usando datos balanceados por sobremuestreo.
8.3 Regresión logística con oversampling
- Entrenamiento de logística usando datos balanceados por sobremuestreo.
8.4 Árbol con undersampling
- Entrenamiento del árbol usando datos balanceados por submuestreo.
8.5 Random Forest con undersampling
- Entrenamiento del bosque usando datos balanceados por submuestreo.
8.6 Regresión logística con undersampling
- Entrenamiento de logística usando datos balanceados por submuestreo.
9 Evaluación final en conjunto de prueba
- Selección del mejor modelo a partir de validación y medición final en test para estimar desempeño real de generalización.
- Comparación final por F1 (principal) y AUC-ROC (complementaria) en validación.
- Evaluación del modelo elegido sobre
X_test/y_test.
10 Conclusiones y recomendaciones finales
- Integración de aprendizajes y resultados del pipeline, destacando el modelo final y recomendaciones para implementación y mejoras futuras.
- Síntesis de hallazgos del EDA, baseline vs balanceo y desempeño alcanzado.
- Recomendaciones técnicas/negocio para uso del modelo y siguientes pasos.
Resultados e impacto técnico
Preparación e integración de datos
- Dataset con desbalance aproximado:
- ~80% permanece (Exited=0)
- ~20% churn (Exited=1)
Tenure: imputación de nulos con 0 para representar clientes con < 1 año.
Transformación / metodología
- Pipeline: EDA → OHE + escalado → split estratificado → baseline y modelos → balanceo (over/under) → selección → test.
Resultados principales (con evidencia)
Resultado 1 — Modelos base (sin balanceo)
- Árbol de Decisión: F1 = 0.588, AUC-ROC = 0.843
- Random Forest: F1 = 0.586, AUC-ROC = 0.876
- Regresión Logística: F1 = 0.327, AUC-ROC = 0.791
✅ Conclusión — Modelos base (sin balanceo)
Los modelos base muestran que los algoritmos basados en árboles (Árbol de Decisión y Random Forest) superan a la Regresión Logística. Sin embargo, el desempeño en F1 aún es limitado sin corregir el desbalance de clases, por lo que se justifica aplicar técnicas de balanceo antes de seleccionar un modelo final.
Resultado 2 — Modelos con balanceo
- Árbol + Oversampling: F1 = 0.572, AUC-ROC = 0.855
- Random Forest + Oversampling: F1 = 0.630, AUC-ROC = 0.876
- LogReg + Oversampling: F1 = 0.521, AUC-ROC = 0.794
- Árbol + Undersampling: F1 = 0.568, AUC-ROC = 0.858
- Random Forest + Undersampling: F1 = 0.601, AUC-ROC = 0.870
- LogReg + Undersampling: F1 = 0.518, AUC-ROC = 0.793
✅ Conclusión — Modelos con balanceo
El balanceo mejora de forma consistente la métrica F1 respecto a los modelos base. La mejor combinación en validación es Random Forest con Oversampling (F1 = 0.630; AUC-ROC = 0.876), seguida por Random Forest con Undersampling (F1 = 0.601; AUC-ROC = 0.870). Esto confirma que el enfoque de ensambles con datos balanceados es la alternativa más robusta para este problema.
Resultado 3 — Modelo final (test)
- Modelo elegido: Random Forest con Oversampling
- F1 (test): 0.611
- AUC-ROC (test): 0.860
- Cumple el criterio del proyecto (F1 ≥ 0.59).
✅ Conclusión — Evaluación final en conjunto de prueba
El modelo final Random Forest con Oversampling mantuvo un desempeño sólido en datos no vistos (F1 = 0.611; AUC-ROC = 0.860), superando el umbral requerido (F1 ≥ 0.59). Esto sugiere buena capacidad de generalización y un equilibrio adecuado entre precisión y recall para identificar clientes con riesgo de churn.
Implicaciones técnicas y de negocio
- El modelo permite identificar clientes con alta probabilidad de churn, habilitando acciones de retención y optimización de campañas.