CD_42 Original + Derivados

CD_42: German Credit Data

Conjunto de datos financiero para la evaluación del riesgo crediticio (binario). Integra variables sociodemográficas y financieras procesadas numéricamente, manteniendo jerarquías en atributos ordinales (e.g., estado de cuenta, ahorros).

📈 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.76 0.88 0.81 140
Clase 1 0.55 0.35 0.43 60
Accuracy 0.72
Macro Avg 0.66 0.61 0.62 200
Weighted Avg 0.70 0.72 0.70 200
AUC-ROC: 0.76
F1-Score (weighted): 0.70
Accuracy: 0.72
➡️ Mejora
⬆ +0.02 AUC ⬆ +0.05 F1 ⬆ +0.02 Acc
🏆 MEJOR RENDIMIENTO

🔮 Conjunto Sintético

Clase Precisión Recall F1-Score Soporte
Clase 0 0.83 0.80 0.81 140
Clase 1 0.57 ⬆ +0.02 0.62 ⬆ +0.27 0.59 ⬆ +0.16 60
Accuracy 0.74 ⬆ +0.02
Macro Avg 0.70 ⬆ +0.04 0.71 ⬆ +0.10 0.70 ⬆ +0.08 200
Weighted Avg 0.75 ⬆ +0.05 0.74 ⬆ +0.02 0.75 ⬆ +0.05 200
AUC-ROC: 0.78 ⬆ +0.02
F1-Score (weighted): 0.75 ⬆ +0.05
Accuracy: 0.74 ⬆ +0.02

📊 Resumen de Mejoras en Clase Minoritaria (Clase 1)

🎯
Precisión
Original: 0.55
Sintético: 0.57
⬆ +0.02
📈
Recall
Original: 0.35
Sintético: 0.62
⬆ +0.27
⚖️
F1-Score
Original: 0.43
Sintético: 0.59
⬆ +0.16

📚 Fuente Original del Conjunto

German Credit Data (StatLog)

v1.0
Prof. Hofmann (Universidad de Hamburgo)
Disponible en repositorios públicos

📄 Resumen (Abstract)

El conjunto de datos de Crédito Alemán (German Credit Data) clasifica a personas descritas por un conjunto de atributos como buenos o malos riesgos crediticios. El dataset está disponible en dos formatos: el original con atributos categóricos/simbólicos (archivo german.data) y una versión numérica editada por la Universidad de Strathclyde (archivo german.data-numeric) para algoritmos que requieren atributos numéricos. Este dataset requiere el uso de una matriz de costos porque es peor clasificar a un cliente como bueno cuando es malo (costo 5) que clasificarlo como malo cuando es bueno (costo 1).

🔬 Contexto y Motivación

La evaluación de riesgos crediticios es un problema fundamental en la industria bancaria y financiera. Las instituciones financieras necesitan determinar si un solicitante de crédito es un buen o mal riesgo para minimizar pérdidas y maximizar ganancias. Este dataset fue utilizado en el proyecto StatLog para comparar diferentes algoritmos de aprendizaje automático en problemas de clasificación del mundo real.

💰 Matriz de Costos

El dataset requiere el uso de una matriz de costos para evaluar correctamente el rendimiento:

  Predicción: Bueno (1) Predicción: Malo (2)
Real: Bueno (1) 0 (Correcto) 1 (Falso negativo)
Real: Malo (2) 5 (Falso positivo - más costoso) 0 (Correcto)

⚠️ Es 5 veces más costoso clasificar a un cliente malo como bueno (conceder un préstamo que no se pagará) que clasificar a un cliente bueno como malo (rechazar un préstamo que sí se pagaría).

📊 Descripción de Datos

El dataset contiene 1,000 instancias con 20 atributos (19 variables predictoras y 1 variable objetivo). Las características son de tipo categórico y entero. No presenta valores faltantes.

📋 Variables del Dataset
Atributo Tipo Descripción Categorías / Unidades
A. Información Financiera
Attribute1 Categórica Estado de la cuenta corriente A11: < 0 DM, A12: 0-200 DM, A13: ≥ 200 DM, A14: sin cuenta
Attribute2 Entero Duración del crédito meses
Attribute5 Entero Monto del crédito DM
Attribute8 Entero Tasa de cuota (% del ingreso disponible) %
Attribute16 Entero Número de créditos existentes en este banco -
Attribute18 Entero Número de personas a cargo -
B. Historial Crediticio
Attribute3 Categórica Historial crediticio A30: pagado, A31: pagado en este banco, A32: créditos existentes pagados, A33: retrasos, A34: cuenta crítica
Attribute6 Categórica Cuenta de ahorros / bonos A61: < 100 DM, A62: 100-500 DM, A63: 500-1000 DM, A64: ≥ 1000 DM, A65: desconocido
C. Datos Personales y Demográficos
Attribute7 Categórica Empleo actual desde A71: desempleado, A72: < 1 año, A73: 1-4 años, A74: 4-7 años, A75: ≥ 7 años
Attribute9 Categórica Estado personal y sexo A91: hombre divorciado/separado, A92: mujer divorciada/casada, A93: hombre soltero, A94: hombre casado/viudo, A95: mujer soltera
Attribute10 Categórica Otros deudores / garantes A101: ninguno, A102: co-solicitante, A103: garante
Attribute11 Entero Residencia actual desde años
Attribute12 Categórica Propiedad A121: bienes raíces, A122: seguro de vida, A123: automóvil, A124: desconocido
Attribute13 Entero Edad años
Attribute14 Categórica Otros planes de cuotas A141: banco, A142: tiendas, A143: ninguno
Attribute15 Categórica Vivienda A151: alquiler, A152: propia, A153: gratis
Attribute17 Categórica Ocupación A171: desempleado/no calificado, A172: no calificado residente, A173: empleado calificado, A174: gerente/autónomo
Attribute19 Binaria Teléfono A191: ninguno, A192: sí (registrado)
Attribute20 Binaria Trabajador extranjero A201: sí, A202: no
D. Variable Objetivo
class Binaria (Target) Riesgo crediticio 1 = Bueno (Good)
2 = Malo (Bad)

📋 Características del Dataset

  • Tipo de problema: Clasificación binaria con costos asimétricos (Good vs. Bad credit risk)
  • Dimensión: Multivariante (1,000 × 20)
  • Tipo de características: Mixtas (Categóricas y Enteras)
  • Valores faltantes: No
  • Área de aplicación: Finanzas, Banca, Evaluación de Riesgos Crediticios
  • Formatos disponibles: Categórico (german.data) y Numérico (german.data-numeric)
  • Matriz de costos: Requerida para evaluación (costo de Falso Positivo = 5, Falso Negativo = 1)

⚖️ Ética y Privacidad

El conjunto de datos contiene información demográfica (edad, sexo, estado civil, ocupación, nacionalidad) que podría considerarse sensible. Los datos han sido anonimizados y no contienen información personal identificable como nombres, direcciones o números de identificación. Restricción de confidencialidad: 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 pueda comprometer la privacidad de los individuos representados en el dataset.

📋 Notas de Uso

Este conjunto de datos es un clásico en la evaluación de riesgos crediticios y requiere consideraciones especiales debido a la matriz de costos. Se recomienda:

  • La variable objetivo class está codificada como 1 = Bueno (Good) y 2 = Malo (Bad)
  • Utilizar la matriz de costos para evaluar el rendimiento:
    • Falso Positivo (cliente malo clasificado como bueno): Costo = 5
    • Falso Negativo (cliente bueno clasificado como malo): Costo = 1
  • Existen dos formatos del dataset:
    • german.data: Atributos categóricos/simbólicos (original)
    • german.data-numeric: Atributos numéricos (editado por Strathclyde University)
  • Las variables categóricas en el formato original utilizan códigos como A11, A12, etc.
  • En el formato numérico, las variables categóricas han sido codificadas como valores enteros
  • Varias características están en escalas diferentes (DM, meses, %, años), por lo que se recomienda estandarización/normalización para algoritmos basados en distancias
  • El dataset tiene un desbalanceo moderado (aproximadamente 70% buenos, 30% malos)
  • Los costos asimétricos deben reflejarse en la función de pérdida durante el entrenamiento (cost-sensitive learning)
  • Este dataset es adecuado para modelos de clasificación como Regresión Logística, Árboles de Decisión, Random Forest, XGBoost y SVM

💡 Importancia en la Evaluación de Riesgos Crediticios

La evaluación de riesgos crediticios es una de las aplicaciones más importantes del aprendizaje automático en el sector financiero. Este dataset es significativo porque:

  • Refleja un problema del mundo real con costos asimétricos (los falsos positivos son mucho más costosos que los falsos negativos)
  • Incluye una mezcla de atributos categóricos y numéricos, lo que requiere técnicas de preprocesamiento variadas
  • Fue utilizado en el proyecto StatLog para comparar diferentes algoritmos de clasificación
  • Permite investigar técnicas de aprendizaje sensible a costos y evaluación con matrices de costo
  • Es un dataset balanceado en cuanto a tamaño (1,000 instancias) que permite pruebas rápidas de algoritmos

La evaluación correcta del riesgo crediticio es fundamental para la estabilidad financiera de los bancos y la economía en general. Los modelos predictivos basados en este tipo de datos ayudan a las instituciones a minimizar pérdidas por préstamos impagos mientras maximizan el acceso al crédito para clientes que sí pagarán.

📖 Cómo citar la fuente original

Statlog (German Credit Data) Dataset. UCI Machine Learning Repository. Prof. Dr. Hans Hofmann, Universität Hamburg. https://archive.ics.uci.edu/ml/datasets/Statlog+(German+Credit+Data)

📚 Referencias Adicionales

< class="transformacion-lista">
  • Michie, D., Spiegelhalter, D. J., & Taylor, C. C. (1994). Machine Learning, Neural and Statistical Classification. Ellis Horwood. (Proyecto StatLog)
  • UCI Machine Learning Repository - Statlog (German Credit Data). https://archive.ics.uci.edu/ml/datasets/Statlog+(German+Credit+Data)
  • Hand, D. J., & Henley, W. E. (1997). Statistical classification methods in consumer credit scoring: a review. Journal of the Royal Statistical Society: Series A, 160(3), 523-541.
  • Thomas, L. C., Edelman, D. B., & Crook, J. N. (2002). Credit Scoring and Its Applications. SIAM.
  • 🔄 Transformaciones Aplicadas

    Modificaciones realizadas al conjunto original (German Credit Risk Dataset)

    • Carga y estructuración de datos:
      • Carga del archivo german.data utilizando separador de espacios en blanco (\s+).
      • Asignación de nombres de columnas según la documentación oficial (20 variables predictoras + 1 variable objetivo).
      • Verificación de integridad estructural del dataset.
    • Transformación de la variable objetivo:
      • Creación de risk_bad a partir de la variable original class que utilizaba codificación {1, 2}.
      • Mapeo: class = 1 (Good Credit) → 0 (Clase Negativa), class = 2 (Bad Credit) → 1 (Clase Positiva - Riesgo).
      • Eliminación de la columna original class para evitar redundancia.
      • Documentación del objetivo: detección de clientes con mal riesgo crediticio.
    • Codificación de variables ordinales preservando jerarquía:
      • checking_status: Mapeo de estado de cuenta (A11→1, A12→2, A13→3, A14→4) preservando orden de liquidez (1 = <0 DM, 2 = 0-200 DM, 3 = ≥200 DM, 4 = Sin cuenta).
      • savings_status: Mapeo de ahorros (A61→1, A62→2, A63→3, A64→4, A65→0) con 0 = Desconocido/Ninguno, preservando jerarquía de cantidad.
      • employment: Mapeo de empleo (A71→0, A72→1, A73→2, A74→3, A75→4) preservando jerarquía de estabilidad laboral (0 = Desempleado, 4 = ≥7 años).
      • Documentación detallada de cada escala ordinal en la leyenda.
    • Codificación de variables nominales:
      • Transformación de 10 variables categóricas a valores numéricos mediante Label Encoding: credit_history, purpose, personal_status_sex, other_debtors, property, other_installment_plans, housing, job, telephone, foreign_worker.
      • Generación de mapeo completo (código → valor original) en la leyenda para todas las variables nominales.
      • Preservación de la semántica original a través de la documentación.
    • Estandarización y optimización de tipos de datos:
      • Conversión forzada de todas las 21 variables (20 predictoras + 1 objetivo) a tipo entero (int).
      • Preservación de variables numéricas continuas/discretas en formato entero: duration (meses), credit_amount (moneda), installment_rate (%), residence_since (años), age (años), existing_credits (conteo), num_dependents (conteo).
      • Eliminación de decimales espurios para optimizar memoria y mejorar legibilidad.
    • Generación de documentación completa:
      • Creación del archivo leyenda_german_credit.txt con semántica completa de la variable objetivo y todas las variables predictoras.
      • Documentación de variables ordinales con sus escalas jerárquicas (checking_status, savings_status, employment).
      • Mapeo completo de variables nominales codificadas (10 variables) con sus valores originales.
      • Descripción de variables numéricas y sus unidades de medida.
      • Contextualización del dataset: clasificación de riesgo crediticio en clientes bancarios alemanes.
      • Estadísticas finales: total de instancias y ratio de desbalance.
    • Preservación de la estructura y calidad de datos:
      • Mantenimiento de las 1,000 instancias (clientes bancarios) sin eliminación de filas.
      • Dataset final con 20 variables predictoras (mixtas: ordinales, nominales codificadas y numéricas) y 1 variable objetivo binaria.
      • Guardado en formato CSV con separador punto y coma (;) para compatibilidad internacional.

    📊 Resultado: Dataset de 1,000 clientes bancarios alemanes con 20 variables predictoras (demográficas, financieras, de historial crediticio y de empleo) y 1 variable objetivo binaria (risk_bad). Desbalance moderado (~70% buen crédito / ~30% mal crédito) — escenario ideal para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos de evaluación de riesgo crediticio y scoring bancario, donde factores socioeconómicos, laborales y de historial financiero son determinantes.

    🏦 Fuente: German Credit Risk Dataset (UCI Machine Learning Repository) - Datos de clientes bancarios alemanes para clasificación de riesgo crediticio.

    📊 Variables ordinales: checking_status (estado de cuenta, 1-4), savings_status (ahorros, 0-4), employment (empleo, 0-4) — todas con jerarquía preservada.

    📋 Variables nominales: 10 variables incluyendo credit_history (historial crediticio), purpose (propósito del préstamo), personal_status_sex (estado civil/género), property (propiedad), housing (vivienda), job (trabajo), entre otras.

    📁 Leyenda disponible: Archivo leyenda_german_credit.txt con mapeo completo de variables ordinales, nominales y descripción de variables numéricas.

    🎯 Variable objetivo: risk_bad (1 = Mal riesgo crediticio, 0 = Buen riesgo crediticio).

    🧹 Limpieza aplicada: Carga con separador de espacios, transformación de target (1→0, 2→1), mapeo ordinal de 3 variables, Label Encoding de 10 variables nominales, estandarización de tipos a int.

    📋 Diccionario de Datos Detallado

    Variable Descripción Financiera Tipo Rango / Categorías Unidad ¿Objetivo?
    checking_status Estado de la cuenta corriente (ordinal) Categórico 1: <0 DM, 2: 0-200 DM, 3: ≥200 DM, 4: Sin cuenta N/A No
    credit_history Historial crediticio (nominal) Categórico 0-4 (ver leyenda) N/A No
    purpose Propósito del crédito (nominal) Categórico 0-9 (ver leyenda) N/A No
    savings_status Estado de ahorros (ordinal) Categórico 0: Desconocido, 1: <100, 2: 100-500, 3: 500-1000, 4: ≥1000 N/A No
    personal_status_sex Sexo y estado civil (compuesto) Categórico 0-3 (ver leyenda) N/A No
    other_debtors Otros deudores (nominal) Categórico 0-2 (ver leyenda) N/A No
    property Tipo de propiedad (nominal) Categórico 0-3 (ver leyenda) N/A No
    other_installment_plans Otros planes de cuotas (nominal) Categórico 0-2 (ver leyenda) N/A No
    housing Tipo de vivienda (nominal) Categórico 0-2 (ver leyenda) N/A No
    job Tipo de empleo (ordinal) Categórico 0-3 (ver leyenda) N/A No
    duration Duración del crédito en meses Numérico 4 - 60 meses No
    credit_amount Monto del crédito Numérico 276 - 14,782 DM No
    employment Antigüedad laboral (años) Numérico 0 - 4 años No
    installment_rate Tasa de pago (% del ingreso disponible) Numérico 1 - 4 % No
    residence_since Tiempo en residencia actual Numérico 1 - 4 años No
    age Edad del solicitante Numérico 19 - 75 años No
    existing_credits Número de créditos existentes Numérico 1 - 4 créditos No
    num_dependents Número de personas a cargo Numérico 1 - 2 personas No
    telephone Teléfono registrado Binario 0: No, 1: Sí N/A No
    foreign_worker Trabajador extranjero Binario 0: Sí, 1: No N/A No
    risk_bad Riesgo de incumplimiento (objetivo) Binario 0: Bueno (Solvente), 1: Malo (Riesgo) N/A
    21 Variables totales
    8 Numéricas
    10 Categóricas
    3 Binarias
    Objetivo: Riesgo Crediticio (risk_bad)
    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 Riesgo Crediticio Alemán (German Credit Data). Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados de evaluación de crédito.

    checking_status Categórica (Ordinal)
    Código Significado Riesgo
    1< 0 DM (Saldo negativo)✗ Alto
    20 - 200 DM (Saldo bajo)⚠ Moderado
    3≥ 200 DM (Saldo alto)✓ Bajo
    4Sin cuenta corriente✓ Bajo
    🚨

    Factor clave: Saldo negativo en cuenta corriente es un fuerte predictor de riesgo crediticio.

    credit_history Categórica (Nominal)
    Código Significado (Original) Riesgo
    0A30 - Sin créditos previos✓ Bajo
    1A31 - Todos los créditos pagados✓ Bajo
    2A32 - Créditos actuales pagados puntualmente✓ Bajo
    3A33 - Pagos atrasados (retrasos)⚠ Moderado
    4A34 - Créditos críticos / Deudas pendientes✗ Alto
    📊

    Historial crediticio: El historial de pagos es el predictor más importante de riesgo crediticio.

    purpose Categórica (Nominal)
    Código Significado (Original)
    0A40 - Automóvil nuevo
    1A41 - Automóvil usado
    2A410 - Otros (electrodomésticos, etc.)
    3A42 - Equipamiento / Mobiliario
    4A43 - Radio / Televisión
    5A44 - Electrodomésticos
    6A45 - Reparaciones
    7A46 - Educación / Formación
    8A48 - Vacaciones
    9A49 - Negocios / Inversión
    💼

    Interpretación: Créditos para negocios/inversión (9) suelen tener mejor comportamiento que para consumo.

    savings_status Categórica (Ordinal)
    Código Significado Riesgo
    0Desconocido / Sin ahorros⚠ Moderado
    1< 100 DM⚠ Moderado
    2100 - 500 DM✓ Bajo
    3500 - 1000 DM✓ Bajo
    4≥ 1000 DM✓ Muy bajo
    💰

    Factor protector: Mayor nivel de ahorros indica menor riesgo de incumplimiento.

    personal_status_sex Categórica (Nominal)
    Código Significado (Original)
    0A91 - Hombre soltero
    1A92 - Hombre casado/viudo/divorciado
    2A93 - Hombre divorciado/separado
    3A94 - Mujer
    👤

    Variable compuesta: Combina sexo y estado civil en una sola codificación.

    other_debtors Categórica (Nominal)
    Código Significado (Original)
    0A101 - Sin otros deudores
    1A102 - Con deudor que avala
    2A103 - Cónyuge como deudor
    property Categórica (Nominal)
    Código Significado (Original) Riesgo
    0A121 - Bienes raíces (casa/terreno)✓ Bajo
    1A122 - Seguro de ahorro / Contrato de pensión✓ Bajo
    2A123 - Automóvil / Otros bienes⚠ Moderado
    3A124 - Sin propiedad / Desconocido✗ Alto
    🏠

    Garantía: La posesión de bienes raíces es un fuerte factor protector contra el riesgo crediticio.

    other_installment_plans Categórica (Nominal)
    Código Significado (Original)
    0A141 - En el banco (institución financiera)
    1A142 - En tiendas (comercios)
    2A143 - Sin otros planes de cuotas
    housing Categórica (Nominal)
    Código Significado (Original) Riesgo
    0A151 - Alquiler⚠ Moderado
    1A152 - Propia✓ Bajo
    2A153 - Vivienda gratuita (familiares)✓ Bajo
    🏡

    Estabilidad: Vivienda propia indica mayor estabilidad financiera y menor riesgo.

    job Categórica (Ordinal)
    Código Significado (Original) Estabilidad
    0A171 - Desempleado / Sin empleo✗ Muy baja
    1A172 - Trabajador no calificado⚠ Baja
    2A173 - Trabajador calificado / Funcionario✓ Media
    3A174 - Directivo / Profesional✓ Alta
    💼

    Jerarquía ocupacional: Mayor nivel ocupacional se asocia con menor riesgo crediticio.

    Variables Binarias Binario

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

    telephone Teléfono registrado (0: No, 1: Sí)
    foreign_worker Trabajador extranjero (0: Sí, 1: No)
    risk_bad 🎯 Variable Objetivo: Riesgo crediticio (0: Bueno, 1: Malo)
    ℹ️

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

    📊
    Variables categóricas: 10
    • checking_status (4 niveles - ordinal)
    • credit_history (5 niveles - nominal)
    • purpose (10 niveles - nominal)
    • savings_status (5 niveles - ordinal)
    • personal_status_sex (4 niveles - nominal)
    • other_debtors (3 niveles - nominal)
    • property (4 niveles - nominal)
    • other_installment_plans (3 niveles - nominal)
    • housing (3 niveles - nominal)
    • job (4 niveles - ordinal)
    🎯
    Variables binarias: 3
    • telephone (Teléfono)
    • foreign_worker (Trabajador extranjero)
    • 🎯 risk_bad (Objetivo - Riesgo crediticio)
    📈
    Variables numéricas: 8
    • duration, credit_amount
    • employment, installment_rate
    • residence_since, age
    • existing_credits, num_dependents
    ⚠️
    Recomendaciones de Evaluación Crediticia:
    • Factores críticos: checking_status, credit_history, savings_status, property
    • Riesgo alto: Saldo negativo en cuenta, historial de deudas críticas, sin propiedad
    • Riesgo bajo: Ahorros altos, vivienda propia, empleo estable
    • Duración del crédito: Créditos más largos (duration > 36 meses) tienen mayor riesgo
    • Edad: Solicitantes jóvenes (age < 25) suelen tener mayor riesgo
    • Coste de clasificación: El coste de un falso negativo (aprobar a un mal pagador) es mayor que un falso positivo
    • Dataset original: Códigos AXX de la UCI mapeados a valores numéricos para el modelo

    🔬 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

    • age < 26 → employment ≠ 4 (Jóvenes no pueden estar desempleados)
    • employment == 0 → job ≠ 2 (Desempleado → no puede ser técnico)
    • employment == 0 → job ≠ 3 (Desempleado → no puede ser ejecutivo)
    • foreign_worker == 1 → job ≠ 0 (Trabajador extranjero → no puede ser desempleado)
    • job == 3 → telephone = 1 (Ejecutivo → debe tener teléfono)
    • housing == 1 → property ≠ 3 (Dueño de vivienda → no sin activos)
    • property == 3 → housing ≠ 1 (Sin activos → no dueño de vivienda)
    • housing == 2 → property ≠ 0 (Vivienda gratuita → no propiedad sin activos)
    • credit_history == 0 → existing_credits = 1 (Historial perfecto → 1 crédito existente)
    • credit_history == 4 → existing_credits ≥ 2 (Historial crítico → múltiples créditos)
    • personal_status_sex == 2 (Soltero) → num_dependents = 1

    ⚙️ 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 840 0.718 0.679 0.690 6.856 0.048 0.884 0.010 0.979 56.932 0 840 0.504
    Smote 1 840 0.731 0.710 0.705 8.296 0.104 0.467 0.020 0.968 55.354 0.040 600 0.494 🏆
    Borderline SMOTE 1 840 0.726 0.673 0.670 5.416 0.098 0.546 0.022 0.964 54.925 0.040 600 0.508
    ADASYN 1.017 847 0.727 0.698 0.695 7.272 0.102 0.509 0.023 0.963 56.195 0.041 600 0.476
    SMOTE RSB* Adaptado 1.167 780 0.738 0.695 0.690 8.244 0.078 0.888 0.010 0.985 53.408 0.035 600 0.489
    SMOTE RSB* Adaptado + Reglas 1.167 780 0.721 0.659 0.650 4.588 0.077 0.891 0.011 0.984 54.863 0.038 600 0.499
    OOF PSO para Balanceo 1 840 0.748 0.673 0.695 4.190 0.237 0.000 0.087 0.706 66.356 0.101 600 0.524
    OOF PSO para Balanceo + Reglas 1 840 0.703 0.679 0.695 2.897 0.186 0.011 0.076 0.726 64.615 0.113 442 0.539
    Mejor seleccionado: Smote (TabDSFidelity: 8.296, AUC: 0.731, F1: 0.710, MIA: 0.494). 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.069 9656 0.755 0.708 0.715 9.985 0.161 0.238 0.057 0.961 77.123 0.122 91 0.500 🏆
    SMOTE RSB* + Ruido Gaussiano + Reglas 1.069 9656 0.709 0.668 0.670 6.927 0.178 0.179 0.058 0.957 213.537 0.127 70 0.498
    CTGAN 1.408 10000 0.651 0.637 0.660 4.063 0.250 0.073 0.042 0.915 436.697 0.179 0 0.459
    CTGAN + Reglas del Dominio 1.408 10000 0.644 0.638 0.665 4.022 0.259 0.073 0.048 0.918 582.216 0.177 0 0.516
    TVAE 1.050 10000 0.708 0.682 0.670 6.596 0.218 0.073 0.077 0.936 262.042 0.117 0 0.511
    TVAE + Reglas del Dominio 1.050 10000 0.695 0.669 0.655 5.517 0.243 0.043 0.079 0.935 427.446 0.117 0 0.507
    OOF PSO para Aumento 1 10000 0.673 0.630 0.615 0.545 0.472 0.007 0.941 0.689 143.115 0.295 0 0.511
    OOF PSO para Aumento + Reglas 1 10000 0.681 0.636 0.620 0.937 0.472 0.002 0.938 0.691 291.306 0.301 0 0.483
    SMOTE RSB* Refinado 1.005 9946 0.734 0.705 0.710 9.271 0.165 0.203 0.058 0.956 92.967 0.147 102 0.479
    SMOTE RSB* Refinado + Reglas 1.005 9946 0.707 0.677 0.680 7.129 0.182 0.142 0.059 0.954 253.583 0.149 80 0.471
    Mejor seleccionado: SMOTE RSB* + Ruido Gaussiano (TabDSFidelity: 9.985, AUC: 0.755, F1: 0.708, MIA: 0.500). 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.064 10496 0.705 0.687 0.695 6.829 0.156 0.241 0.052 0.962 147.039 0.121 211 0.491
    SMOTE RSB* + Ruido Gaussiano + Reglas 1.064 10496 0.733 0.693 0.695 7.263 0.172 0.182 0.053 0.959 284.195 0.125 191 0.513
    CTGAN 1.370 10840 0.671 0.642 0.650 2.840 0.234 0.071 0.038 0.920 512.289 0.166 122 0.509
    CTGAN + Reglas del Dominio 1.370 10840 0.711 0.706 0.715 6.688 0.242 0.071 0.043 0.924 655.496 0.165 122 0.486
    TVAE 1.046 10840 0.708 0.687 0.675 5.529 0.206 0.096 0.056 0.940 346.503 0.110 122 0.494
    TVAE + Reglas del Dominio 1.046 10840 0.697 0.675 0.665 4.584 0.227 0.064 0.059 0.941 510.289 0.110 122 0.498
    OOF PSO para Aumento 1 10840 0.731 0.690 0.690 3.399 0.429 0.008 0.641 0.702 216.581 0.275 122 0.491
    OOF PSO para Aumento + Reglas 1 10840 0.731 0.695 0.690 3.509 0.429 0.002 0.638 0.704 372.481 0.279 122 0.505
    SMOTE RSB* Refinado 1.004 10786 0.759 0.732 0.735 9.812 0.159 0.208 0.054 0.958 180.331 0.138 202 0.500 🏆
    SMOTE RSB* Refinado + Reglas 1.004 10786 0.742 0.720 0.725 8.617 0.175 0.147 0.054 0.956 331.840 0.140 191 0.506
    Mejor seleccionado: SMOTE RSB* Refinado (TabDSFidelity: 9.812, AUC: 0.759, F1: 0.732, MIA: 0.500). Nota: Ratio <= 1.5 = Conjunto Balanceado.

    📈 Diagrama del Proceso de Generación

    Conjunto Original
    CD_42
    Balanceo
    (8 métodos)
    ↓ Selección por TabDSFidelity
    ⭐ Mejor Balanceado
    Smote
    Generación Sintética
    (10 métodos)
    ↓ Evaluación TabDSFidelity
    ⭐ Mejor Sintético
    SMOTE RSB* + Ruido Gaussiano
    ⭐ 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 Credit Risk Assessment (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32946128.v1