Data Science Financiera

Predicción de Churn en Beta Bank

GitHub Repository Notebook
10 de Septiembre de 2025

Métrica de Éxito Alcanzada

0.611 F1
Predicción de Churn en Beta Bank

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).

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.csv y 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 Exited y cuantificación del desbalance.

3.2 Distribuciones univariadas de variables numéricas

  • Histogramas / KDE para CreditScore, Age, Balance, EstimatedSalary y lectura inicial de patrones.

3.2.1 Distribución del puntaje de crédito

  • Análisis de la distribución de CreditScore para identificar concentración de valores y posibles sesgos.

3.2.2 Distribución de la edad de los clientes

  • Exploración de Age para identificar rangos dominantes y presencia de edades extremas.

3.2.3 Distribución del saldo en cuenta

  • Revisión de Balance para detectar grupos diferenciados (por ejemplo, saldos en cero vs saldos altos).

3.2.4 Distribución del salario estimado

  • Exploración de EstimatedSalary para 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 = Exited y selección de features (excluyendo identificadores como RowNumber, CustomerId, Surname).

4.2 Codificación de variables categóricas

  • One-Hot Encoding para Geography y Gender.

4.3 Escalado de variables numéricas

  • Estandarización de variables numéricas con StandardScaler para 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_test y y_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.