CD_20 Original + Derivados

CD_20: Chronic Kidney Disease: Apollo Hospitals

Conjunto de datos clínico recolectado en Apollo Hospitals para la clasificación binaria de Enfermedad Renal Crónica (class). Consta de 400 instancias y 25 variables: 1) Bioquímica Sanguínea/Hemograma (creatinina, urea, electrolitos, hemoglobina); 2) Análisis de Orina (albuminuria/azúcar ordinales, sedimentos binarios); y 3) Antecedentes Clínicos (hipertensión, diabetes, anemia). Destaca por ser un escenario de alta dimensionalidad y tipos de datos mixtos (continuos, ordinales, nominales), sometido a una limpieza rigurosa (imputación por mediana/moda) para subsanar la pérdida de datos original.

📈 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.91 1.00 0.95 30
Clase 1 1.00 0.94 0.97 50
Accuracy 0.96
Macro Avg 0.95 0.97 0.96 80
Weighted Avg 0.97 0.96 0.96 80
AUC-ROC: 1.00
F1-Score (weighted): 0.96
Accuracy: 0.96
➡️ Mejora
⬆ +0.001 AUC ⬆ +0.03 F1 ⬆ +0.03 Acc
🏆 MEJOR RENDIMIENTO

🔮 Conjunto Sintético

Clase Precisión Recall F1-Score Soporte
Clase 0 0.97 1.00 0.98 30
Clase 1 1.00 0.98 ⬆ +0.04 0.99 ⬆ +0.02 50
Accuracy 0.99 ⬆ +0.03
Macro Avg 0.98 ⬆ +0.03 0.99 ⬆ +0.02 0.99 ⬆ +0.03 80
Weighted Avg 0.99 ⬆ +0.02 0.99 ⬆ +0.03 0.99 ⬆ +0.03 80
AUC-ROC: 1.00 ----
F1-Score (weighted): 0.99 ⬆ +0.03
Accuracy: 0.99 ⬆ +0.03

📊 Resumen de Mejoras en Clase Minoritaria (Clase 1)

🎯
Precisión
Original: 1.00
Sintético: 1.00
✓ Perfecto
📈
Recall
Original: 0.94
Sintético: 0.98
⬆ +0.04
⚖️
F1-Score
Original: 0.97
Sintético: 0.99
⬆ +0.02

📚 Fuente Original del Conjunto

Chronic Kidney Disease (CKD) Dataset

v1.0
Datos clínicos hospitalarios
Publicado: 2 de julio de 2015

📄 Resumen (Abstract)

El conjunto de datos de Enfermedad Renal Crónica (Chronic Kidney Disease - CKD) está diseñado para predecir la presencia de enfermedad renal crónica en pacientes. Los datos fueron recolectados durante un período de aproximadamente 2 meses en un entorno hospitalario. Cada instancia representa a un paciente y contiene 24 atributos que incluyen características demográficas (edad), signos vitales (presión arterial), resultados de laboratorio (glucosa, creatinina, electrolitos, hemoglobina, conteos celulares), hallazgos de análisis de orina (gravedad específica, albúmina, azúcar, células sanguíneas) y antecedentes médicos (hipertensión, diabetes, enfermedad arterial coronaria, anemia). El objetivo es clasificar al paciente como con enfermedad renal crónica o sin ella.

🔬 Métodos y Contexto

El conjunto de datos fue recolectado de registros médicos hospitalarios durante un período de aproximadamente 2 meses. Incluye una amplia gama de variables clínicas y de laboratorio que reflejan la evaluación integral de pacientes con sospecha o diagnóstico de enfermedad renal crónica. La enfermedad renal crónica es una condición progresiva que afecta la función de los riñones, y su detección temprana es crucial para retrasar su avance y prevenir complicaciones. Este dataset permite abordar un problema de clasificación binaria para identificar pacientes en riesgo o diagnosticados con CKD.

📋 Características del Dataset

  • Tipo de problema: Clasificación binaria (CKD vs. No CKD)
  • Dimensión: Multivariante
  • Tipo de características: Mixtas (Enteros, Continuos y Categóricos binarios)
  • Valores faltantes: Sí (presentes en todas las variables predictoras)
  • Área de aplicación: Salud y Medicina, Nefrología
  • Período de recolección: Aproximadamente 2 meses

⚖️ Ética y Privacidad

El conjunto de datos ha sido anonimizado para proteger la privacidad de los pacientes. No contiene información personal identificable como nombres, direcciones o números de identificación. 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 pacientes.

📋 Notas de Uso

Este conjunto de datos presenta desafíos particulares debido a la presencia de valores faltantes en todas las variables predictoras. Se recomienda:

  • Manejar adecuadamente los valores faltantes mediante imputación (media, mediana, moda) o eliminación de registros incompletos
  • Codificar las variables categóricas binarias (rbc, pc, pcc, ba, htn, dm, cad, appet, pe, ane) como 0/1 para modelado
  • Las variables categóricas sg, al y su requieren codificación ordinal o one-hot encoding según corresponda
  • Estandarizar/normalizar las características numéricas (age, bp, bgr, bu, sc, sod, pot, hemo, pcv, wbcc, rbcc)
  • Utilizar validación cruzada estratificada debido al posible desbalanceo entre clases
  • La variable objetivo class está codificada como "ckd" (enfermedad renal crónica) y "notckd" (sin enfermedad)
  • Considerar técnicas de selección de características debido a la alta dimensionalidad relativa al número de instancias (24 variables para 400 registros)

💡 Importancia Clínica

La enfermedad renal crónica (CKD) es una condición caracterizada por la pérdida progresiva de la función renal a lo largo del tiempo. Afecta a aproximadamente 850 millones de personas en todo el mundo y es una de las principales causas de morbilidad y mortalidad global. La detección temprana de CKD es fundamental para:

  • Retrasar la progresión a etapas avanzadas que requieren diálisis o trasplante
  • Reducir el riesgo de complicaciones cardiovasculares asociadas
  • Mejorar la calidad de vida de los pacientes mediante intervenciones tempranas
  • Optimizar los recursos sanitarios mediante la identificación de pacientes de alto riesgo

Este dataset, con su amplia gama de variables clínicas y de laboratorio, permite desarrollar modelos predictivos que pueden apoyar el diagnóstico temprano y la toma de decisiones clínicas en nefrología.

📖 Cómo citar la fuente original

Chronic Kidney Disease Dataset. UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Chronic+Kidney+Disease

📚 Referencias Adicionales

🔄 Transformaciones Aplicadas

Modificaciones realizadas al conjunto original (Chronic Kidney Disease - CKD)

  • Lectura personalizada del formato ARFF:
    • Procesamiento manual del archivo .arff (Attribute-Relation File Format) extrayendo exclusivamente la sección @data.
    • Asignación de nombres de columnas basados en la especificación del dataset (25 variables en total).
    • Manejo robusto de espacios en blanco, tabuladores y caracteres ocultos en los datos.
  • Limpieza y estandarización de valores:
    • Conversión de valores '?' (indicadores de "no disponible" en el dataset original) a NaN para su correcto tratamiento estadístico.
    • Eliminación de espacios en blanco (strip) en todas las columnas de texto para corregir errores de formato (ej. " yes" → "yes", "\tno" → "no").
    • Corrección específica de typos conocidos: dm ('\tno' → 'no', '\tyes' → 'yes'), cad ('\tno' → 'no').
  • Imputación de valores faltantes diferenciada por tipo de variable:
    • Variables numéricas (11 columnas): Imputación con mediana para preservar robustez frente a outliers. Variables: age, bp, bgr, bu, sc, sod, pot, hemo, pcv, wbcc, rbcc.
    • Variables categóricas (14 columnas): Imputación con moda (valor más frecuente) para preservar la distribución categórica. Variables: sg, al, su, rbc, pc, pcc, ba, htn, dm, cad, appet, pe, ane, class.
  • Codificación numérica de variables categóricas y generación de leyenda:
    • Transformación de 13 variables categóricas a valores numéricos enteros mediante codificación ordinal (cat.codes).
    • Tratamiento especial de la variable objetivo: Mapeo manual de class para asegurar consistencia clínica: 'ckd' → 1 (Enfermedad Renal Crónica), 'notckd' → 0 (Sano).
    • Generación del archivo leyenda_ckd.txt con el mapeo semántico completo de todas las variables categóricas codificadas.
  • Control de calidad y optimización:
    • Conversión forzada de variables numéricas a tipos float mediante pd.to_numeric(..., errors='coerce').
    • Verificación de integridad estructural del dataset (25 columnas originales).
    • Guardado en formato CSV con separador punto y coma (;) para compatibilidad internacional.
    • Vista previa del dataset resultante para validación visual.

📊 Resultado: Dataset de 400 pacientes (después de limpieza de formatos e imputación) con 24 variables predictoras (mixtas: 11 numéricas continuas, 13 categóricas codificadas) y 1 variable objetivo binaria (class). Desbalance moderado (~75% casos CKD positivos / ~25% sanos) — escenario ideal para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos de enfermedad renal crónica.

🏥 Fuente: Chronic Kidney Disease Dataset (UCI Machine Learning Repository).

🔬 Variables clínicas clave: Edad, presión arterial, gravedad específica de orina, albúmina, glucosa en sangre, urea, creatinina, sodio, potasio, hemoglobina, hematocrito, conteo de glóbulos blancos/rojos, hipertensión, diabetes mellitus, enfermedad coronaria, apetito, edema, anemia.

📁 Leyenda disponible: Archivo leyenda_ckd.txt con mapeo semántico completo de todas las variables categóricas codificadas.

🎯 Variable objetivo: class (1 = Enfermedad Renal Crónica - CKD, 0 = Sano - notckd).

📋 Diccionario de Datos Detallado

Variable Descripción Clínica Tipo Rango / Categorías Unidad ¿Objetivo?
sg Gravedad específica de la orina Categórico 0: 1.005, 1: 1.010, 2: 1.015, 3: 1.020, 4: 1.025 N/A No
al Albúmina en orina (proteinuria) Categórico 0-5 (nivel de albúmina) N/A No
su Azúcar en orina (glucosuria) Categórico 0-5 (nivel de azúcar) N/A No
age Edad del paciente Numérico 2 - 82 años No
bp Presión arterial (sistólica) Numérico 50 - 180 mm Hg No
bgr Glucosa en sangre aleatoria Numérico 70 - 490 mg/dL No
bu Urea en sangre (nitrógeno ureico) Numérico 10 - 309 mg/dL No
sc Creatinina sérica (indicador crítico de función renal) Numérico 0.5 - 76 mg/dL No
sod Sodio sérico Numérico 4.5 - 150 mEq/L No
pot Potasio sérico Numérico 2.5 - 7.6 mEq/L No
hemo Hemoglobina Numérico 3.1 - 17.8 g/dL No
pcv Volumen celular aglomerado (hematocrito) Numérico 9 - 54 % No
wbcc Conteo de glóbulos blancos Numérico 2,200 - 26,400 células/mm³ No
rbcc Conteo de glóbulos rojos Numérico 2.1 - 8.0 millones/mm³ No
rbc Glóbulos rojos en sedimento urinario Binario 0: Anormal, 1: Normal N/A No
pc Células de pus en orina (piuria) Binario 0: Anormal, 1: Normal N/A No
pcc Agrupaciones de células de pus Binario 0: No presente, 1: Presente N/A No
ba Bacterias en orina (bacteriuria) Binario 0: No presente, 1: Presente N/A No
htn Hipertensión arterial (antecedente) Binario 0: No, 1: Sí N/A No
dm Diabetes Mellitus (antecedente) Binario 0: No, 1: Sí N/A No
cad Enfermedad coronaria (antecedente) Binario 0: No, 1: Sí N/A No
appet Estado del apetito Binario 0: Bueno, 1: Pobre N/A No
pe Edema en pies (presencia) Binario 0: No, 1: Sí N/A No
ane Anemia (diagnóstico) Binario 0: No, 1: Sí N/A No
class Diagnóstico de Enfermedad Renal Crónica (objetivo) Binario 0: notckd (Sano), 1: ckd (Enfermedad Renal Crónica) N/A
25 Variables totales
11 Numéricas
3 Categóricas
11 Binarias
Objetivo: Enfermedad Renal Crónica (class)
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 Enfermedad Renal Crónica (Chronic Kidney Disease). Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados clínicos.

sg Categórica

Gravedad específica de la orina

Código Significado
01.005 (Baja densidad - orina diluida)
11.010
21.015
31.020
41.025 (Alta densidad - orina concentrada)
💡

Interpretación: La gravedad específica mide la capacidad de concentración renal. Valores bajos indican pérdida de capacidad de concentración.

al Categórica

Albúmina en orina (Proteinuria)

Código Significado
0Ausente (Normal)
1Traza
2+ (Leve)
3++ (Moderada)
4+++ (Severa)
5++++ (Muy severa)
🚨

Importancia clínica: La presencia de albúmina en orina (proteinuria) es un marcador temprano de daño renal y predictor de progresión de enfermedad renal.

su Categórica

Azúcar en orina (Glucosuria)

Código Significado
0Ausente (Normal)
1Traza
2+ (Leve)
3++ (Moderada)
4+++ (Severa)
5++++ (Muy severa)
⚠️

Interpretación: La presencia de azúcar en orina puede indicar diabetes mellitus no controlada o daño tubular renal.

Variables Binarias Binario

Formato común: 0 = No / Ausente / Anormal, 1 = Sí / Presente / Normal

rbc Glóbulos rojos en orina (0: Anormal, 1: Normal)
pc Células de pus en orina (0: Anormal, 1: Normal)
pcc Agrupaciones de pus (0: No presente, 1: Presente)
ba Bacterias en orina (0: No presente, 1: Presente)
htn Hipertensión arterial (0: No, 1: Sí)
dm Diabetes Mellitus (0: No, 1: Sí)
cad Enfermedad coronaria (0: No, 1: Sí)
appet Apetito (0: Bueno, 1: Pobre)
pe Edema en pies (0: No, 1: Sí)
ane Anemia (0: No, 1: Sí)
class 🎯 Variable Objetivo: Enfermedad Renal Crónica (0: notckd, 1: ckd)
ℹ️

Nota: Las variables rbc, pc, pcc, ba representan hallazgos del sedimento urinario. htn, dm, cad son antecedentes médicos. appet, pe, ane son hallazgos clínicos.

📊
Variables categóricas: 3
  • sg (5 niveles - Gravedad específica)
  • al (6 niveles - Albúmina)
  • su (6 niveles - Azúcar)
🎯
Variables binarias: 11
  • 4 variables de urinálisis (rbc, pc, pcc, ba)
  • 3 comorbilidades (htn, dm, cad)
  • 3 hallazgos clínicos (appet, pe, ane)
  • 🎯 class (Objetivo - Enfermedad Renal Crónica)
📈
Variables numéricas: 11
  • age, bp (Demográficas)
  • bgr, bu, sc, sod, pot (Bioquímica)
  • hemo, pcv, wbcc, rbcc (Hematología)
⚠️
Recomendaciones Clínicas:
  • Marcadores clave de ERC: sc (creatinina), bu (urea), al (proteinuria)
  • Creatinina sérica (sc): Valores > 1.5 mg/dL sugieren disfunción renal
  • Proteinuria (al): Niveles ≥ 2 son indicadores de daño renal significativo
  • Hipertensión (htn) y Diabetes (dm): Principales factores de riesgo para ERC
  • Anemia (ane): Común en ERC avanzada por déficit de eritropoyetina
  • Hemoglobina (hemo): Niveles bajos (< 10 g/dL) sugieren anemia en ERC
  • Imputación: Valores perdidos en variables categóricas imputados con Moda; numéricas con Mediana

🔬 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

  • sc > 2.0 → class = 1 (Enfermedad renal presente)
  • class == 0 → al = 0 (Sin enfermedad renal → sin albuminuria)
  • class == 0 → sc < 1.2 (Sin enfermedad renal → creatinina normal)
  • hemo > 14 → pcv > 40 (Hemoglobina alta → hematocrito elevado)
  • hemo < 9 → rbcc < 3.5 (Hemoglobina baja → glóbulos rojos bajos)
  • hemo < 9.0 → ane = 1 (Anemia diagnosticada)
  • sc > 5.0 → pot > 4.5 (Creatinina muy alta → potasio elevado)
  • bgr > 200 → dm = 1 (Glucosa elevada → diabetes)
  • su > 0 → bgr > 140 (Glucosa en orina → glucosa en sangre elevada)
  • ba == 1 → pc = 0 (Bacterias presentes → células de pus no deben estar)
  • sc > 4.0 → bu > 50 (Creatinina extremadamente alta → BUN elevado)
  • bp > 100 → htn = 1 (Presión arterial elevada → hipertensión)

⚙️ Hiperparámetros SMOTE RSB* Adaptado

Valor escala0.03
Probabilidad Base0.1

🔄 Hiperparámetros CTGAN

epochs500
batch_size20
generator_lr0.0002
discriminator_lr0.0002
pac2
generator_dim(128, 128)
discriminator_dim(128, 128)
embedding_dim128
l2scale1e-05

📊 Hiperparámetros TVAE

epochs 400
batch_size 50
embedding_dim 64
compress_dims (64, 64)
decompress_dims (64, 64)
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 296 1.000 1.000 1.000 3.892 0.081 0.651 0.009 0.977 51.932 0 296 0.456 🏆
Smote 1 296 1.000 1.000 1.000 2.605 0.256 0.446 0.008 0.974 53.446 0.002 237 0.433
Borderline SMOTE 1 296 1.000 1.000 1.000 2.595 0.255 0.496 0.009 0.976 55.393 0.002 237 0.404
ADASYN 1.050 289 1.000 1.000 1.000 2.960 0.240 0.566 0.007 0.979 55.494 0.002 237 0.394
SMOTE RSB* Adaptado 1 296 1.000 1.000 1.000 2.811 0.207 0.385 0.008 0.975 47.341 0.003 232 0.419
SMOTE RSB* Adaptado + Reglas 1 296 1.000 1.000 1.000 2.824 0.208 0.400 0.008 0.975 48.162 0.003 232 0.432
OOF PSO para Balanceo 1 296 1.000 1.000 1.000 0.024 0.252 0.002 0.020 0.802 59.651 0.041 237 0.430
OOF PSO para Balanceo + Reglas 1 296 1.000 1.000 1.000 0.947 0.233 0.012 0.013 0.874 58.856 0.026 225 0.448
Mejor seleccionado: Random Oversampling (TabDSFidelity: 3.892, AUC: 1.000, F1: 1.000, MIA: 0.456). 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.342 8664 1.000 0.988 0.988 9.413 0.379 0.414 0.018 0.947 90.811 0.565 0 0.454
SMOTE RSB* + Ruido Gaussiano + Reglas 1.428 8664 1.000 0.988 0.988 9.453 0.379 0.414 0.015 0.954 247.613 0.565 0 0.445 🏆
CTGAN 1.899 10000 0.996 0.963 0.963 8.062 0.291 0.099 0.012 0.925 294.970 0.094 0 0.463
CTGAN + Reglas del Dominio 2.190 10000 1.000 1.000 1.000 9.129 0.291 0.099 0.017 0.925 474.570 0.095 0 0.448
TVAE 1.244 10000 1.000 1.000 1.000 8.782 0.407 0.061 0.020 0.933 177.662 0.047 0 0.439
TVAE + Reglas del Dominio 1.246 10000 1.000 1.000 1.000 8.778 0.407 0.061 0.019 0.932 350.593 0.048 0 0.424
OOF PSO para Aumento 1 10000 0.980 0.815 0.813 0.701 0.752 0.000 0.279 0.624 125.135 0.206 0 0.490
OOF PSO para Aumento + Reglas 6.220 10000 0.970 0.914 0.913 2.141 0.752 0.000 0.404 0.626 298.834 0.247 0 0.429
SMOTE RSB* Refinado 1.106 9501 1.000 1.000 1.000 9.381 0.398 0.280 0.016 0.961 94.195 0.526 0 0.428
SMOTE RSB* Refinado + Reglas 1.106 9501 1.000 0.988 0.988 9.125 0.398 0.280 0.014 0.963 265.196 0.526 0 0.434
Mejor seleccionado: SMOTE RSB* + Ruido Gaussiano + Reglas del Dominio (TabDSFidelity: 9.453, AUC: 1.000, F1: 0.988, MIA: 0.445). 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.329 8960 1.000 0.988 0.988 7.668 0.370 0.417 0.017 0.949 170.090 0.565 0 0.448
SMOTE RSB* + Ruido Gaussiano + Reglas 1.411 8960 1.000 0.988 0.988 7.708 0.370 0.417 0.014 0.955 327.843 0.565 0 0.450
CTGAN 1.862 10296 0.993 0.975 0.975 3.152 0.284 0.110 0.011 0.927 385.775 0.092 59 0.456
CTGAN + Reglas del Dominio 2.136 10296 1.000 0.988 0.988 7.150 0.284 0.110 0.016 0.927 564.341 0.093 59 0.432
TVAE 1.236 10296 1.000 1.000 1.000 8.800 0.395 0.070 0.019 0.935 266.461 0.046 59 0.433 🏆
TVAE + Reglas del Dominio 1.238 10296 1.000 1.000 1.000 8.796 0.395 0.070 0.018 0.934 438.137 0.046 59 0.422
OOF PSO para Aumento 1 10296 1.000 0.988 0.988 4.017 0.720 0.000 0.259 0.630 212.310 0.200 59 0.466
OOF PSO para Aumento + Reglas 5.716 10296 1.000 0.975 0.975 2.007 0.720 0.000 0.373 0.632 388.849 0.240 59 0.475
SMOTE RSB* Refinado 1.102 9797 1.000 0.987 0.988 7.274 0.390 0.286 0.015 0.962 181.736 0.526 0 0.453
SMOTE RSB* Refinado + Reglas 1.102 9797 0.999 0.988 0.988 7.200 0.390 0.286 0.014 0.964 351.774 0.526 0 0.429
Mejor seleccionado: TVAE (TabDSFidelity: 8.800, AUC: 1.000, F1: 1.000, MIA: 0.433). Nota: Ratio <= 1.5 = Conjunto Balanceado.

📈 Diagrama del Proceso de Generación

Conjunto Original
CD_20
Balanceo
(8 métodos)
↓ Selección por TabDSFidelity
⭐ Mejor Balanceado
Random Oversampling
Generación Sintética
(10 métodos)
↓ Evaluación TabDSFidelity
⭐ Mejor Sintético
SMOTE RSB* + Ruido Gaussiano + Reglas del Dominio
⭐ Mejor Aumentado
TVAE
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 Chronic Kidney Disease (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32932754.v1