CD_38 Original + Derivados

CD_38: Bank Customer Churn: Predicción de Abandono

Registro bancario para la predicción de retención de clientes (Exited). Integra perfiles financieros (CreditScore, Balance, salario estimado), demográficos y de relación con la entidad.

📈 Eficacia Predictiva Detallada

Comparación detallada de las métricas de clasificación para los modelos entrenados con el conjunto de datos original y el conjunto sintético generado.

📊 Conjunto Original

Clase Precisión Recall F1-Score Soporte
Clase 0 0.80 1.00 0.89 159
Clase 1 0.00 0.00 0.00 41
Accuracy 0.80
Macro Avg 0.40 0.50 0.44 200
Weighted Avg 0.63 0.80 0.70 200
AUC-ROC: 0.37
F1-Score (weighted): 0.70
Accuracy: 0.80
➡️ Mejora
⬆ +0.41 AUC ⬆ +0.07 F1 ⬇ -0.05 Acc
🏆 MEJOR RENDIMIENTO

🔮 Conjunto Sintético

Clase Precisión Recall F1-Score Soporte
Clase 0 0.89 0.79 0.83 159
Clase 1 0.42 ⬆ +0.42 0.61 ⬆ +0.61 0.50 ⬆ +0.50 41
Accuracy 0.75 ⬇ -0.05
Macro Avg 0.66 ⬆ +0.26 0.70 ⬆ +0.20 0.67 ⬆ +0.23 200
Weighted Avg 0.79 ⬆ +0.16 0.75 ⬇ -0.05 0.77 ⬆ +0.07 200
AUC-ROC: 0.77 ⬆ +0.41
F1-Score (weighted): 0.77 ⬆ +0.07
Accuracy: 0.75 ⬇ -0.05

📊 Resumen de Mejoras en Clase Minoritaria (Clase 1)

🎯
Precisión
Original: 0.00
Sintético: 0.42
⬆ +0.42
📈
Recall
Original: 0.00
Sintético: 0.61
⬆ +0.61
⚖️
F1-Score
Original: 0.00
Sintético: 0.50
⬆ +0.50

📚 Fuente Original del Conjunto

Bank Customer Churn Prediction Dataset

v1.0
Datos de clientes bancarios
Disponible en repositorios públicos

📄 Resumen (Abstract)

El conjunto de datos de Predicción de Abandono de Clientes Bancarios (Bank Customer Churn Prediction) contiene información detallada de los clientes de un banco. La variable objetivo es una variable binaria que refleja si el cliente abandonó el banco (cerró su cuenta) o si continúa siendo cliente. El objetivo es predecir el abandono de clientes (churn) utilizando características demográficas, financieras y de comportamiento, permitiendo al banco identificar clientes en riesgo y tomar medidas preventivas para retenerlos.

🩺 Contexto y Motivación

La predicción de abandono (churn prediction) es un problema crítico en la industria bancaria y de servicios financieros. El costo de adquirir un nuevo cliente es significativamente mayor que el costo de retener a un cliente existente. Por lo tanto, identificar a los clientes con alto riesgo de abandono permite a las instituciones:

  • Implementar estrategias de retención personalizadas (ofertas especiales, descuentos, mejor servicio)
  • Optimizar el gasto en marketing enfocándose en clientes de alto valor
  • Mejorar la satisfacción y experiencia del cliente
  • Reducir la pérdida de ingresos asociada al abandono de clientes

Este dataset es ampliamente utilizado en cursos de aprendizaje automático y deep learning para enseñar conceptos de clasificación, ingeniería de características y evaluación de modelos.

📊 Descripción de Datos

El dataset contiene información de clientes bancarios con variables que incluyen datos demográficos, información financiera y comportamiento del cliente. Las características típicas en este tipo de dataset incluyen:

📋 Variables del Dataset
Variable Tipo Descripción Ejemplo / Categorías
A. Identificadores (A excluir del modelo)
RowNumber Entero Número de fila en el dataset Sin valor predictivo
CustomerId Entero Identificador único del cliente Sin valor predictivo
Surname Categórica Apellido del cliente Sin valor predictivo
B. Datos Demográficos
CreditScore Entero Puntuación crediticia del cliente 350 - 850
Geography Categórica País de residencia del cliente France, Spain, Germany
Gender Categórica Género del cliente Male, Female
Age Entero Edad del cliente 18 - 100
C. Información Financiera
Tenure Entero Años de antigüedad como cliente 0 - 10
Balance Decimal Saldo de la cuenta del cliente 0 - 250,898.09
NumOfProducts Entero Número de productos contratados con el banco 1 - 4
HasCrCard Binaria ¿Tiene tarjeta de crédito? 1 = Sí, 0 = No
IsActiveMember Binaria ¿Es miembro activo? 1 = Sí, 0 = No
EstimatedSalary Decimal Salario estimado del cliente 0 - 199,992.48
D. Variable Objetivo
Exited Binaria (Target) Indica si el cliente abandonó el banco 1 = Abandonó (Churn)
0 = Continúa (No Churn)

📋 Características del Dataset

  • Tipo de problema: Clasificación binaria (Churn vs. No Churn)
  • Dimensión: Multivariante
  • Tipo de características: Mixtas (Numéricas, Categóricas, Binarias)
  • Valores faltantes: No reportados
  • Área de aplicación: Banca, Marketing, Retención de Clientes, CRM
  • Contexto: Ampliamente utilizado en cursos de Deep Learning y Machine Learning

🙏 Agradecimientos

Este conjunto de datos es ampliamente utilizado en la comunidad de ciencia de datos y aprendizaje automático. Se agradece especialmente a:

  • SuperDataScience por proporcionar y difundir este dataset para fines educativos
  • La comunidad de Kaggle por hacer disponible el dataset y fomentar la investigación
  • Los contribuyentes y usuarios que han utilizado este dataset para aprender y enseñar conceptos de machine learning

Foto de banner por Sharon McCutcheon en Unsplash.

⚖️ Ética y Privacidad

El conjunto de datos ha sido anonimizado para proteger la privacidad de los clientes. Las variables CustomerId y Surname son identificadores sin relación con información personal identificable. Restricción de confidencialidad: En cumplimiento de los protocolos de privacidad, el uso de los datos está restringido a fines académicos y de investigación. La publicación de resultados debe limitarse a métricas de evaluación, resultados agregados y metodología del modelo, sin divulgación de información que permita la reidentificación de clientes.

📋 Notas de Uso

Este conjunto de datos es ideal para problemas de clasificación y predicción de abandono. Se recomienda:

  • Excluir las variables identificadoras (RowNumber, CustomerId, Surname) del modelado
  • La variable objetivo Exited está codificada como 1 = Churn (Abandonó) y 0 = No Churn (Continúa)
  • Codificar variables categóricas:
    • Geography: One-Hot Encoding (France, Spain, Germany)
    • Gender: Label Encoding (Male/Female → 1/0)
  • Estandarizar/normalizar variables numéricas (CreditScore, Age, Balance, EstimatedSalary)
  • Considerar el desbalanceo de clases en la variable objetivo (generalmente más clientes continúan que abandonan)
  • Utilizar validación cruzada estratificada para evaluar el rendimiento del modelo
  • El dataset es adecuado para modelos de clasificación como Regresión Logística, Random Forest, XGBoost, y Redes Neuronales (especialmente Deep Learning)
  • Las variables Tenure (antigüedad), NumOfProducts y IsActiveMember suelen ser predictores importantes del churn
  • El Balance y EstimatedSalary pueden ayudar a identificar clientes de alto valor en riesgo de abandono

💡 Importancia en la Industria Bancaria

La predicción de abandono (churn prediction) es una de las aplicaciones más importantes del aprendizaje automático en la industria bancaria y de servicios financieros. Las instituciones bancarias invierten millones de dólares en estrategias de retención de clientes porque:

  • El costo de adquirir un nuevo cliente es 5 a 7 veces mayor que retener a uno existente
  • Un aumento del 5% en la retención de clientes puede incrementar las ganancias entre un 25% y un 95%
  • Los clientes leales tienden a comprar más productos y son más rentables a largo plazo
  • La predicción temprana del abandono permite intervenciones proactivas que mejoran la satisfacción y la lealtad

Este dataset es ampliamente utilizado en cursos de Deep Learning (como los de SuperDataScience) para enseñar conceptos de redes neuronales, feature engineering y evaluación de modelos en un contexto empresarial realista.

📖 Cómo citar la fuente original

Bank Customer Churn Prediction Dataset. SuperDataScience / Kaggle. https://www.kaggle.com/datasets/shrutimechlearn/churn-modelling

📚 Referencias Adicionales

🔄 Transformaciones Aplicadas

Modificaciones realizadas al conjunto original (Bank Customer Churn)

  • Limpieza inicial y eliminación de variables no predictivas:
    • Eliminación de columnas identificadoras: RowNumber (índice de fila), CustomerId (identificador de cliente), y Surname (apellido) — variables sin valor predictivo que pueden causar sobreajuste.
    • Reducción de la dimensionalidad del dataset para mejorar la eficiencia del modelo.
  • Codificación específica de variables categóricas:
    • Gender: Mapeo manual ('Female' → 0, 'Male' → 1) para codificación binaria estándar.
    • Geography: Mapeo nominal ('France' → 0, 'Spain' → 1, 'Germany' → 2) mediante codificación ordinal.
    • Documentación completa de los mapeos en la leyenda para trazabilidad.
  • Estandarización y optimización de tipos de datos:
    • Conversión forzada de variables categóricas codificadas y variables enteras a tipo int: CreditScore, Age, Tenure, NumOfProducts, HasCrCard, IsActiveMember, Exited, Gender, Geography.
    • Preservación de variables continuas como float: Balance, EstimatedSalary.
    • Eliminación de decimales espurios (ej. 1.0 → 1) para optimizar memoria y mejorar legibilidad.
  • Verificación y tratamiento de valores faltantes:
    • Confirmación de ausencia de valores nulos en el dataset.
    • Implementación de imputación con mediana como medida preventiva para garantizar integridad.
  • Submuestreo estratificado para reducción del dataset:
    • Reducción del dataset a 1,000 ejemplos representativos mediante muestreo estratificado.
    • Uso de train_test_split con parámetro stratify para preservar exactamente la proporción original de clases (desbalance de abandono).
    • Semilla fija (random_state=42) para garantizar reproducibilidad científica de la muestra.
    • Verificación de integridad con diferencia máxima < 1% en proporción de clases.
  • Generación de documentación completa:
    • Creación del archivo leyenda_bank_churn.txt con semántica completa de la variable objetivo y todas las variables predictoras.
    • Documentación de variables demográficas (Gender, Age, Geography, Tenure).
    • Documentación de variables financieras (CreditScore, Balance, NumOfProducts, HasCrCard, IsActiveMember, EstimatedSalary).
    • Contextualización del dataset: clientes bancarios para predicción de abandono (churn).
  • Preservación de la estructura y calidad de datos:
    • Mantenimiento de las 10,000 instancias (clientes) originales para el dataset completo.
    • Dataset reducido de 1,000 ejemplos estratificados para experimentación eficiente.
    • Dataset final con 9 variables predictoras (mixtas: categóricas codificadas, binarias y numéricas) y 1 variable objetivo binaria.
    • Guardado en formato CSV con separador punto y coma (;) para compatibilidad internacional.

📊 Resultado: Dataset de 10,000 clientes bancarios (con versión reducida estratificada de 1,000 ejemplos) con 9 variables predictoras (demográficas, financieras y de comportamiento) y 1 variable objetivo binaria (Exited). Desbalance moderado (~80% clientes permanecen / ~20% abandonaron) — escenario ideal para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos de análisis de retención de clientes y predicción de abandono (churn), donde factores demográficos y financieros son determinantes.

🏦 Fuente: Bank Customer Churn Dataset (Kaggle) - Datos de clientes bancarios para predicción de abandono.

👤 Variables demográficas: Gender (0=Femenino, 1=Masculino), Age (edad), Geography (0=Francia, 1=España, 2=Alemania), Tenure (años en el banco).

💰 Variables financieras: CreditScore (puntuación de crédito), Balance (saldo en cuenta), NumOfProducts (número de productos contratados), HasCrCard (tiene tarjeta de crédito), IsActiveMember (miembro activo), EstimatedSalary (salario estimado).

📁 Leyenda disponible: Archivo leyenda_bank_churn.txt con descripción completa de la variable objetivo y todas las variables predictoras.

🎯 Variable objetivo: Exited (1 = Cliente abandonó el banco, 0 = Cliente permanece).

🧹 Limpieza aplicada: Eliminación de IDs (RowNumber, CustomerId, Surname), codificación de Gender y Geography, estandarización de tipos, reducción estratificada a 1,000 ejemplos.

📋 Diccionario de Datos Detallado

Variable Descripción Financiera Tipo Rango / Categorías Unidad ¿Objetivo?
Geography País de residencia del cliente Categórico 0: Francia, 1: España, 2: Alemania N/A No
CreditScore Puntuación crediticia (probabilidad de impago) Numérico 376 - 850 puntos No
Age Edad del cliente Numérico 18 - 92 años No
Tenure Antigüedad del cliente en el banco Numérico 0 - 10 años No
Balance Saldo disponible en la cuenta bancaria Numérico 0 - 209,490.21 moneda No
NumOfProducts Número de productos bancarios contratados Numérico 1 - 4 productos No
EstimatedSalary Ingresos anuales estimados del cliente Numérico 143.34 - 199,805.63 moneda No
Gender Género del cliente Binario 0: Femenino, 1: Masculino N/A No
HasCrCard Tenencia de tarjeta de crédito Binario 0: No, 1: Sí N/A No
IsActiveMember Cliente activo (realiza transacciones) Binario 0: Inactivo, 1: Activo N/A No
Exited Abandono del banco (Churn) - OBJETIVO Binario 0: Permanece, 1: Abandonó N/A
11 Variables totales
6 Numéricas
1 Categóricas
4 Binarias
Objetivo: Abandono (Exited)
Datos ausentes: 0%

📈 Distribución de la variable objetivo en el conjunto original

📖 Leyenda de Variables Categóricas

Esta sección detalla los códigos y significados de las variables categóricas y binarias presentes en el conjunto de datos de Abandono de Clientes Bancarios. Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados de retención de clientes.

Geography Categórica
Código Significado
0Francia (France)
1España (Spain)
2Alemania (Germany)
🚨

Importancia: Los clientes en Alemania (2) tienen una tasa de abandono más alta que en Francia o España.

Exited 🎯 Objetivo
Código Significado
0 Permanece (Leal) - Cliente continúa con el banco (~79.6%)
1 Abandonó (Churn) - Cliente cerró su cuenta (~20.4%)
🎯

Variable Objetivo: El modelo debe predecir el abandono de clientes para implementar estrategias de retención.

Variables Binarias Binario

Formato común: 0 = No / Ausencia, 1 = Sí / Presencia

Gender Género (0: Femenino, 1: Masculino)
HasCrCard Tarjeta de crédito (0: No, 1: Sí)
IsActiveMember Miembro activo (0: Inactivo, 1: Activo)
Exited 🎯 Variable Objetivo: Abandono (0: Permanece, 1: Abandonó)
ℹ️

Nota: Todas las variables binarias están codificadas como 0 = No y 1 = Sí.

📊
Variables categóricas: 1
  • Geography (3 países: Francia, España, Alemania)
🎯
Variables binarias: 4
  • Gender (Género)
  • HasCrCard (Tarjeta de crédito)
  • IsActiveMember (Membresía activa)
  • 🎯 Exited (Objetivo - Abandono)
📈
Variables numéricas: 6
  • CreditScore (Puntuación crediticia)
  • Age (Edad en años)
  • Tenure (Antigüedad en años)
  • Balance (Saldo en cuenta)
  • NumOfProducts (Productos contratados)
  • EstimatedSalary (Salario estimado)
⚠️
Recomendaciones de Retención:
  • Edad: Clientes mayores de 50 años tienen mayor probabilidad de abandono
  • Saldo: Balance = 0 (cuenta inactiva) es un fuerte predictor de churn
  • Actividad: IsActiveMember = 0 (inactivo) requiere campañas de reactivación
  • Productos: Clientes con 1 producto son más propensos a abandonar que con 2+
  • País: Alemania tiene la tasa de abandono más alta. Considerar estrategias específicas.
  • Género: Las mujeres (Gender = 0) tienen ligeramente mayor tendencia al abandono
  • Tarjeta de crédito: HasCrCard = 1 es un factor de retención (mayor engagement)
  • Target: El objetivo es predecir el abandono para actuar antes de que ocurra

🔬 Metodología de Generación (Reproducibilidad Científica)

📐 Método Principal

SMOTE RSB* Adaptado

Versión: 2.0

DOI: 10.1007/s42979-026-04896-8

📏 Reglas de restricción

  • Tenure == 10 → Age ≥ 28 (Antigüedad máxima → edad adulta)
  • Geography == 2 (Alemania) → Balance > 10
  • Balance > 220000 → Geography = 2 (Alemania) (Balance alto → Alemania)
  • NumOfProducts == 4 → Exited = 1 (4 productos → abandono)
  • NumOfProducts ≥ 3 → Balance > 0 (Múltiples productos → saldo positivo)
  • CreditScore == 850 → Age > 22 (Score perfecto → edad adulta)
  • CreditScore < 400 → Exited = 1 (Score bajo → abandono)
  • Age > 70 → Exited = 0 (Mayores de 70 → no abandonan)
  • IsActiveMember == 1 → Exited = 0 (Miembro activo → no abandona)
  • HasCrCard == 1 → NumOfProducts ≥ 1 (Tarjeta → al menos 1 producto)
  • Balance > 200000 → (EstimatedSalary > 100000) OR (Tenure > 5)
  • Age < 25 → IsActiveMember = 1 (Jóvenes → activos)
  • Balance > 0 → NumOfProducts ≥ 1 (Saldo positivo → al menos 1 producto)
  • Balance == 0 → NumOfProducts ≤ 2 (Francia sin saldo → productos limitados)
  • EstimatedSalary < 1000 → NumOfProducts ≤ 2 (Salario bajo → productos limitados)

⚙️ Hiperparámetros SMOTE RSB* Adaptado

Valor escala0.03
Probabilidad Base0.1

🔄 Hiperparámetros CTGAN

epochs500
batch_size50
generator_lr0.0002
discriminator_lr0.0002
pac10
generator_dim(256, 256)
discriminator_dim(256, 256)
embedding_dim128
l2scale1e-05

📊 Hiperparámetros TVAE

epochs 500
batch_size 50
embedding_dim 128
compress_dims (128, 128)
decompress_dims (128, 128)
l2scale 1e-5
loss_factor 2

🔐 Reproducibilidad

Random Seed42
Python3.12.12

Librerías utilizadas:

  • pandas: 2.3.3
  • numpy: 2.4.4
  • scikit-learn: 1.7.2
  • imbalanced-learn: 0.14.0
  • ctgan: 0.11.1
  • torch: 2.9.0
  • sdv: 1.28.0
  • scipy: 1.16.3
  • matplotlib: 3.10.9
📝

Para reproducir exactamente este conjunto de datos, ejecute el script de generación con la semilla aleatoria 42. Los resultados pueden variar ligeramente según la versión de las librerías.

📊 Conjuntos de Datos Derivados

El conjunto original ha sido sometido a un proceso de balanceo de clases y generación sintética para mejorar la representación de clases minoritarias. Nota: se ha empleado un conjunto de validación para evaluar el índice de fidelidad. Se han generado tres familias de conjuntos:

  • 📊 Balanceados: Conjuntos creados mediante técnicas de sobremuestreo
  • 🔮 Sintéticos Puros: Conjuntos generados completamente con modelos generativos
  • ✨ Aumentados: Combinación del conjunto original + datos sintéticos

El mejor conjunto de cada etapa fue seleccionado mediante el índice TabDSFidelity.

📊 Conjuntos Balanceados 8 conjuntos

Algoritmo Ratio N° Ejemplos AUC-ROC F1 Accuracy TabDSFidelity Jensen-Shannon Kolmogorov-Smirnov Kullback-Leibler Correlación Tiempo Total (s) Dist. Promedio Copias Exactas Ataque MIA Mejor
Random Oversampling 1 956 0.804 0.817 0.825 6.723 0.147 0.395 0.041 0.973 48.944 0 956 0.511
Smote 1 956 0.821 0.808 0.800 5.765 0.197 0.256 0.056 0.951 47.462 0.023 600 0.492
Borderline SMOTE 1 956 0.825 0.833 0.830 7.980 0.199 0.225 0.058 0.951 47.218 0.021 600 0.513 🏆
ADASYN 1.004 958 0.828 0.824 0.820 7.590 0.197 0.379 0.055 0.957 46.626 0.022 600 0.501
SMOTE RSB* Adaptado 1.306 844 0.791 0.792 0.790 4.177 0.167 0.610 0.026 0.980 46.185 0.018 600 0.513
SMOTE RSB* Adaptado + Reglas 1.306 844 0.786 0.809 0.805 5.253 0.164 0.666 0.027 0.980 45.178 0.018 600 0.527
OOF PSO para Balanceo 1 956 0.825 0.840 0.850 5.901 0.356 0.000 0.093 0.625 57.229 0.071 600 0.510
OOF PSO para Balanceo + Reglas 1.223 956 0.782 0.827 0.850 3.844 0.334 0.000 0.089 0.652 56.863 0.086 545 0.560
Mejor seleccionado: Borderline SMOTE (TabDSFidelity: 7.980, AUC: 0.825, F1: 0.833, MIA: 0.513). Nota: Ratio <= 1.5 = Conjunto Balanceado.

🔮 Conjuntos Sintéticos Puros 10 conjuntos

Algoritmo Ratio N° Ejemplos AUC-ROC F1 Accuracy TabDSFidelity Jensen-Shannon Kolmogorov-Smirnov Kullback-Leibler Correlación Tiempo Total (s) Dist. Promedio Copias Exactas Ataque MIA Mejor
SMOTE RSB* + Ruido Gaussiano 1.023 8954 0.791 0.794 0.795 8.797 0.321 0.140 0.060 0.953 72.469 0.466 0 0.552
SMOTE RSB* + Ruido Gaussiano + Reglas 1.471 8954 0.718 0.827 0.835 8.201 0.321 0.140 0.038 0.948 198.636 0.466 0 0.524
CTGAN 1.143 10000 0.708 0.656 0.620 3.143 0.338 0.070 0.091 0.924 404.632 0.078 0 0.501
CTGAN + Reglas del Dominio 1.472 10000 0.699 0.709 0.680 4.106 0.338 0.070 0.063 0.921 548.355 0.073 0 0.545
TVAE 1.110 10000 0.795 0.739 0.715 6.724 0.374 0.109 0.079 0.846 208.528 0.059 0 0.495
TVAE + Reglas del Dominio 1.029 10000 0.754 0.764 0.745 6.542 0.374 0.109 0.071 0.848 346.329 0.059 0 0.523
OOF PSO para Aumento 1 10000 0.737 0.724 0.700 2.165 0.655 0.000 0.258 0.683 135.729 0.162 0 0.514
OOF PSO para Aumento + Reglas 20.834 10000 0.706 0.703 0.675 1.346 0.655 0.000 0.252 0.735 269.676 0.182 0 0.518
SMOTE RSB* Refinado 1.007 8819 0.810 0.838 0.835 9.246 0.323 0.038 0.058 0.947 71.315 0.378 0 0.501 🏆
SMOTE RSB* Refinado + Reglas 1.438 8819 0.743 0.812 0.820 7.611 0.323 0.038 0.038 0.945 199.498 0.379 0 0.514
Mejor seleccionado: SMOTE RSB* Refinado (TabDSFidelity: 9.246, AUC: 0.810, F1: 0.838, MIA: 0.501). Nota: Ratio <= 1.5 = Conjunto Balanceado.

✨ Conjuntos Aumentados 10 conjuntos

Algoritmo Ratio N° Ejemplos AUC-ROC F1 Accuracy TabDSFidelity Jensen-Shannon Kolmogorov-Smirnov Kullback-Leibler Correlación Tiempo Total (s) Dist. Promedio Copias Exactas Ataque MIA Mejor
SMOTE RSB* + Ruido Gaussiano 1.020 9910 0.818 0.823 0.820 9.184 0.306 0.142 0.060 0.953 138.185 0.466 0 0.529
SMOTE RSB* + Ruido Gaussiano + Reglas 1.416 9910 0.756 0.815 0.820 7.664 0.306 0.142 0.040 0.948 263.666 0.466 0 0.526
CTGAN 1.129 10956 0.767 0.710 0.680 3.880 0.313 0.079 0.086 0.928 476.265 0.074 121 0.498
CTGAN + Reglas del Dominio 1.422 10956 0.733 0.760 0.740 4.552 0.313 0.079 0.060 0.925 623.261 0.069 121 0.507
TVAE 1.100 10956 0.821 0.778 0.760 7.170 0.348 0.115 0.076 0.857 280.061 0.056 121 0.494
TVAE + Reglas del Dominio 1.027 10956 0.810 0.796 0.785 7.498 0.348 0.115 0.068 0.858 418.158 0.056 121 0.496
OOF PSO para Aumento 1 10956 0.810 0.813 0.810 4.749 0.603 0.000 0.219 0.700 203.978 0.151 121 0.511
OOF PSO para Aumento + Reglas 10.705 10956 0.805 0.803 0.800 4.547 0.603 0.000 0.194 0.743 337.567 0.169 121 0.540
SMOTE RSB* Refinado 1.006 9775 0.823 0.847 0.845 9.236 0.308 0.046 0.058 0.948 138.755 0.377 0 0.501 🏆
SMOTE RSB* Refinado + Reglas 1.386 9775 0.773 0.842 0.850 8.095 0.308 0.046 0.040 0.946 266.455 0.379 0 0.498
Mejor seleccionado: SMOTE RSB* Refinado (TabDSFidelity: 9.236, AUC: 0.823, F1: 0.847, MIA: 0.501). Nota: Ratio <= 1.5 = Conjunto Balanceado.

📈 Diagrama del Proceso de Generación

Conjunto Original
CD_38
Balanceo
(8 métodos)
↓ Selección por TabDSFidelity
⭐ Mejor Balanceado
Borderline SMOTE
Generación Sintética
(10 métodos)
↓ Evaluación TabDSFidelity
⭐ Mejor Sintético
SMOTE RSB* Refinado
⭐ Mejor Aumentado
SMOTE RSB* Refinado
Conjunto Sintético Final
Seleccionado por calidad

📊 Guía de Métricas de Evaluación

Para interpretar correctamente los resultados de los conjuntos de datos generados, es fundamental comprender qué mide cada métrica y cómo se relacionan entre sí. A continuación, se detalla cada una de las métricas utilizadas en la evaluación:

🎯 Métricas de Rendimiento Predictivo

AUC-ROC (0.5 - 1.0)

¿Qué mide? Capacidad del modelo para distinguir entre clases (Ej: mortalidad vs supervivencia).

Interpretación:

  • 0.5: Sin capacidad predictiva (aleatorio)
  • 0.7-0.8: Aceptable
  • 0.8-0.9: Excelente
  • >0.9: Sobresaliente

Ejemplo: AUC-ROC = 0.82 significa que hay un 82% de probabilidad de que el modelo clasifique correctamente un paciente fallecido frente a uno superviviente.

F1-Score (0 - 1.0)

¿Qué mide? Media armónica entre precisión y sensibilidad (recall).

Interpretación:

  • 0.7-0.8: Buen equilibrio entre precisión y sensibilidad
  • 0.8-0.9: Muy buen equilibrio
  • >0.9: Excelente equilibrio

Ejemplo: F1 = 0.76 indica que el modelo mantiene un buen balance entre identificar correctamente a los pacientes que fallecen (sensibilidad) y no etiquetar erróneamente a los que sobreviven (precisión).

Accuracy (0 - 1.0)

¿Qué mide? Proporción de predicciones correctas sobre el total.

Interpretación:

  • 0.7-0.8: Buen rendimiento general
  • 0.8-0.9: Muy buen rendimiento
  • >0.9: Excelente rendimiento

Ejemplo: Accuracy = 0.75 significa que el 75% de las predicciones del modelo son correctas.

⚠️ Nota: En conjuntos desbalanceados, esta métrica puede ser engañosa. Es mejor usar F1-Score o AUC-ROC.

🔬 Índice de Fidelidad del Conjunto

TabDSFidelity (0 - 10+)

¿Qué mide? Calidad global del conjunto sintético comparado con el original.

Interpretación:

  • < 3.0: Baja fidelidad (poca similitud con el original)
  • 3.0 - 6.0: Fidelidad moderada
  • 6.0 - 8.0: Alta fidelidad
  • > 8.0: Muy alta fidelidad (excelente representación)

Ejemplo: TabDSFidelity = 8.08 indica que el conjunto sintético mantiene una alta similitud con el original, preservando las relaciones y distribuciones de los datos reales, además de maximizar su eficacia predictiva.

💡 Importante: Este es el índice para seleccionar el mejor conjunto de datos sintéticos. Para este caso, el peso empleado para las métricas "AUC-ROC", "F1-Score" y "Accuracy" fue (2) y para el resto de las métricas fue (1).

📊 Métricas de Similitud de Distribuciones

Jensen-Shannon (Promedio) (0 - 1.0)

¿Qué mide? Similitud entre las distribuciones de variables numéricas del conjunto sintético y el original.

Interpretación:

  • Cerca de 0: Distribuciones muy similares (ideal)
  • 0.1 - 0.3: Diferencias moderadas
  • > 0.3: Diferencias significativas

Ejemplo: JS = 0.118 indica que las distribuciones de las variables numéricas (edad, presión arterial, etc.) son bastante similares a las del conjunto original.

📌 Nota: Es el promedio de la divergencia de Jensen-Shannon calculada para todas las variables numéricas.

Kolmogorov-Smirnov (p-valor promedio) (0 - 1.0)

¿Qué mide? Probabilidad estadística de que las muestras numéricas del conjunto sintético provengan de la misma distribución continua que el original.

Interpretación:

  • Cerca de 1.0: Altísima probabilidad de que sean la misma distribución (ideal)
  • > 0.05: Similitud aceptable (no se rechaza que sean iguales)
  • < 0.05: Diferencias estadísticamente significativas

Ejemplo: KS p-valor = 0.753 indica que hay evidencia fuerte a favor de que las distribuciones acumulativas de la variable sintética y la original son equivalentes.

📌 Nota: Se reporta el promedio de los p-valores obtenidos mediante la prueba de Kolmogorov-Smirnov de dos muestras para las variables numéricas.

Kullback-Leibler (Promedio) (0 - ∞)

¿Qué mide? Divergencia entre las distribuciones de variables categóricas del conjunto sintético y el original.

Interpretación:

  • Cerca de 0: Distribuciones muy similares (ideal)
  • 0.01 - 0.1: Diferencias pequeñas
  • > 0.1: Diferencias notables

Ejemplo: KL = 0.014 indica que la distribución de las variables categóricas (género, mortalidad) es muy similar a la del conjunto original.

📌 Nota: Es el promedio de la divergencia de Kullback-Leibler para todas las variables categóricas. A diferencia de JS y KS, esta métrica se aplica solo a variables categóricas.

📊 Métricas de Estructura

Similitud de Correlación (0 - 1.0)

¿Qué mide? Preservación de las relaciones entre variables del conjunto original.

Interpretación:

  • Cerca de 1.0: Las relaciones entre variables se mantienen casi idénticas
  • > 0.9: Excelente preservación de relaciones
  • 0.7 - 0.9: Buena preservación
  • < 0.7: Pérdida significativa de relaciones

Ejemplo: Correlación = 0.976 significa que las relaciones entre variables (ej. edad y mortalidad) se mantienen en un 97.6% respecto al conjunto original.

⏱️ Métricas de Rendimiento Temporal

Tiempo Total (s) (segundos)

¿Qué mide? Tiempo total de ejecución del proceso de generación del conjunto.

Interpretación:

  • < 100s: Generación rápida
  • 100-300s: Tiempo moderado
  • > 300s: Proceso lento (puede ser aceptable para conjuntos grandes)

Ejemplo: Tiempo total = 69.45s significa que el proceso completo de generación del conjunto balanceado tomó aproximadamente 1.16 minutos.

⏱️ Nota: Incluye el tiempo de generación sintética + cálculo de métricas.

🔒 Métricas de Privacidad

Estas métricas evalúan el riesgo de exposición de información sensible y la capacidad de un atacante para inferir datos de los pacientes a partir del conjunto de datos sintéticos.

Distancia al Registro Más Cercano (≥ 0)

¿Qué mide? La distancia promedio entre cada registro sintético y su registro más cercano en el conjunto de datos original.

Interpretación:

  • Cerca de 0: Los datos sintéticos son muy similares a los originales → ⚠️ ALTO RIESGO de privacidad
  • 0.01 - 0.05: Similaridad moderada → Riesgo moderado
  • > 0.05: Buena separación de los datos originales → ✅ BAJO RIESGO de privacidad

Ejemplo: Distancia promedio = 0.015 en SMOTE indica que los registros sintéticos están relativamente cerca de los originales, lo que podría implicar un riesgo de privacidad moderado.

🔬

Metodología: Calculada utilizando la Distancia de Gower, la cual maneja internamente tipos de datos mixtos, normalizando las variables numéricas y penalizando diferencias categóricas para devolver un índice estandarizado entre 0 y 1.

💡

Recomendación: Valores < 0.01 deben ser evaluados con precaución. Idealmente, buscar valores > 0.02 para garantizar la privacidad.

Copias Exactas (≥ 0)

¿Qué mide? Número de registros sintéticos que son copias idénticas de registros en el conjunto de datos original.

Interpretación:

  • 0: Ninguna copia exacta → ✅ SEGURO
  • 1 - 10: Pocas copias → Riesgo bajo
  • 11 - 50: Copias moderadas → ⚠️ RIESGO MODERADO
  • > 50: Muchas copias → 🔴 ALTO RIESGO de reidentificación

Ejemplo: SMOTE RSB* Refinado genera 76 copias exactas de 8817 registros (0.86%), lo que representa un riesgo de privacidad que debe ser evaluado.

⚠️

Importante: La presencia de copias exactas es uno de los indicadores más críticos de fuga de datos. Idealmente, este valor debe ser 0.

Ataque de Inferencia de Membresía (MIA) (0 - 1.0)

¿Qué mide? Tasa de éxito (medida en AUC-ROC) de un atacante para determinar si un registro específico pertenece al conjunto de datos original.

Interpretación:

  • 0.5: Aleatorio (ideal) → ✅ PRIVACIDAD ÓPTIMA
  • 0.5 - 0.55: Riesgo bajo
  • 0.55 - 0.6: Riesgo moderado → ⚠️ PRIVACIDAD CUESTIONABLE
  • > 0.6: Riesgo alto → 🔴 PRIVACIDAD COMPROMETIDA

Ejemplo: MIA = 0.553 significa que el atacante tiene un éxito ligeramente superior al 50% aleatorio, lo que indica un riesgo de privacidad bajo/moderado.

🎯

Objetivo: Buscar valores lo más cercanos a 0.5. Valores > 0.6 indican que el conjunto sintético no protege adecuadamente la privacidad.

📝 Resumen Rápido para Selección

🏆
Para seleccionar el mejor conjunto:
  • Priorizar TabDSFidelity más alto
  • Buscar AUC-ROC y F1 altos
  • Valores de divergencia JS y KL cercanos a 0
  • P-valor de KS lo más cercano a 1.0 posible (>0.05)
  • Correlación > 0.9
⚖️
Balance entre calidad y tiempo:
  • Un TabDSFidelity > 8.0 indica excelente calidad
  • Tiempos de generación < 200s son aceptables
  • La Correlación > 0.95 asegura buena preservación de relaciones
🔒
Para garantizar la privacidad:
  • MIA lo más cercano a 0.5 (ideal)
  • Copias exactas = 0 (ideal) o lo más bajo posible
  • Distancia promedio > 0.02 para buena separación
  • Evaluar balance entre calidad (TabDSFidelity) y privacidad (MIA)

📥 Descargar conjuntos y código Python

Formatos incluidos: CSV.

📚 Cómo citar este conjunto

Díaz Bastida, M., Pérez Vázquez, R. A., & Bello Pérez, R. (2026). High-Fidelity Synthetic Dataset for Bank Customer Churn Prediction (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32945975.v1