Predicción de enfermedad coronaria (estenosis > 50%). 297 instancias con variables demográficas, pruebas cardíacas y resultados invasivos.
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.
| Clase | Precisión | Recall | F1-Score | Soporte |
|---|---|---|---|---|
| Clase 0 | 0.69 | 0.97 | 0.81 | 32 |
| Clase 1 | 0.93 | 0.50 | 0.65 | 28 |
| Accuracy | 0.75 | |||
| Macro Avg | 0.81 | 0.73 | 0.73 | 60 |
| Weighted Avg | 0.80 | 0.75 | 0.73 | 60 |
| Clase | Precisión | Recall | F1-Score | Soporte |
|---|---|---|---|---|
| Clase 0 | 1.00 | 1.00 | 1.00 | 32 |
| Clase 1 | 1.00 ⬆ +0.07 | 1.00 ⬆ +0.50 | 1.00 ⬆ +0.35 | 28 |
| Accuracy | 1.00 ⬆ +0.25 | |||
| Macro Avg | 1.00 ⬆ +0.19 | 1.00 ⬆ +0.27 | 1.00 ⬆ +0.27 | 60 |
| Weighted Avg | 1.00 ⬆ +0.20 | 1.00 ⬆ +0.25 | 1.00 ⬆ +0.27 | 60 |
El conjunto de datos de Enfermedad Cardíaca contiene información clínica de pacientes evaluados por enfermedad coronaria. El conjunto incluye cuatro bases de datos: Cleveland, Hungría, Suiza y el VA Long Beach, siendo la base de datos de Cleveland la más utilizada por investigadores de aprendizaje automático. Cada instancia representa a un paciente y contiene 76 atributos originales, aunque todos los experimentos publicados se refieren al uso de un subconjunto de 14 atributos. El objetivo es predecir la presencia de enfermedad cardíaca (variable num), donde 0 indica ausencia de enfermedad y los valores 1-4 indican presencia de la enfermedad en diferentes grados de severidad.
Este conjunto de datos fue utilizado en el estudio internacional de Detrano et al. (1989) para evaluar la aplicación de un nuevo algoritmo probabilístico para el diagnóstico de enfermedad de las arterias coronarias. Los datos fueron recolectados en múltiples centros (Cleveland Clinic Foundation, Hospitales de Hungría, Suiza y el VA Long Beach), permitiendo una validación cruzada de los métodos diagnósticos en poblaciones diversas. La variable objetivo (num) se basa en el estado de la enfermedad angiográfica, donde:
El dataset de Cleveland contiene 303 instancias con 14 atributos utilizados en la mayoría de los experimentos. Las características son de tipo categórico, entero y real e incluyen variables demográficas, clínicas y de pruebas de esfuerzo. El conjunto contiene valores faltantes en las variables ca y thal.
| Atributo | Tipo | Descripción |
|---|---|---|
| age | Entero | Edad en años |
| sex | Categórica | Sexo (1 = masculino; 0 = femenino) |
| cp | Categórica | Tipo de dolor torácico: 1=angina típica, 2=angina atípica, 3=dolor no anginoso, 4=asintomático |
| trestbps | Entero | Presión arterial en reposo (mm Hg) |
| chol | Entero | Colesterol sérico (mg/dl) |
| fbs | Categórica | Glucosa en ayunas > 120 mg/dl (1 = verdadero; 0 = falso) |
| restecg | Categórica | Resultados electrocardiográficos en reposo: 0=normal, 1=anomalía ST-T, 2=hipertrofia ventricular izquierda |
| thalach | Entero | Frecuencia cardíaca máxima alcanzada |
| exang | Categórica | Angina inducida por ejercicio (1 = sí; 0 = no) |
| oldpeak | Real | Depresión del ST inducida por ejercicio relativa al reposo |
| slope | Categórica | Pendiente del segmento ST en el pico del ejercicio: 1=ascendente, 2=plana, 3=descendente |
| ca | Entero | Número de vasos principales (0-3) coloreados por fluoroscopia |
| thal | Categórica | Defecto talámico: 3=normal, 6=defecto fijo, 7=defecto reversible |
| num | Entero (Target) | Diagnóstico de enfermedad cardíaca: 0=sin enfermedad, 1-4=presencia de enfermedad |
El artículo fundamental que describe la aplicación del algoritmo probabilístico para el diagnóstico de enfermedad de las arterias coronarias es:
Detrano, R., Jánosi, A., Steinbrunn, W., Pfisterer, M., Schmid, J., Sandhu, S., Guppy, K., Lee, S., & Froelicher, V. (1989). International application of a new probability algorithm for the diagnosis of coronary artery disease. American Journal of Cardiology, 64(5), 304-310. https://doi.org/10.1016/0002-9149(89)90824-2
El conjunto de datos ha sido anonimizado. Los números de identificación de pacientes y los números de seguridad social fueron reemplazados con valores ficticios (0 y "name" respectivamente) para proteger la privacidad de los pacientes. 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.
Este conjunto de datos es uno de los más utilizados en la literatura de aprendizaje automático para problemas de clasificación médica. Se recomienda:
La enfermedad de las arterias coronarias es una de las principales causas de muerte a nivel mundial. El diagnóstico temprano y preciso es fundamental para iniciar tratamientos oportunos y reducir la mortalidad. Este conjunto de datos ha sido fundamental para el desarrollo de sistemas de apoyo al diagnóstico basados en aprendizaje automático, permitiendo la identificación de factores de riesgo y la predicción de enfermedad cardíaca a partir de variables clínicas no invasivas. La inclusión de múltiples bases de datos internacionales permite evaluar la generalización de los modelos en poblaciones diversas.
Detrano, R., Jánosi, A., Steinbrunn, W., Pfisterer, M., Schmid, J., Sandhu, S., Guppy, K., Lee, S., & Froelicher, V. (1989). International application of a new probability algorithm for the diagnosis of coronary artery disease. American Journal of Cardiology, 64(5), 304-310. https://doi.org/10.1016/0002-9149(89)90824-2
📊 Resultado: Dataset de 297 pacientes (limpieza estricta) con 13 variables predictoras (mixtas: categóricas codificadas y continuas) y 1 variable objetivo binaria (num). Balance de clases casi perfecto (~55% sanos / ~45% enfermos) — escenario de control ideal para validación del índice TabDSFidelity en contextos clínicamente complejos y con multicolinealidad moderada.
🏥 Fuente: Cleveland Clinic Foundation (Dr. Robert Detrano, M.D., Ph.D.) - Donado en 1988.
📋 Estándar: Subconjunto Cleveland, considerado el "Gold Standard" en investigación por su integridad y calidad de datos.
📁 Leyenda disponible: Archivo leyenda_heart_disease.txt con mapeo semántico de todas las variables categóricas y descripción de variables continuas.
🎯 Variable objetivo: num (1 = Enfermedad coronaria >50% estrechamiento, 0 = Ausencia de enfermedad).
| Variable | Descripción Clínica | Tipo | Rango / Categorías | Unidad | ¿Objetivo? |
|---|---|---|---|---|---|
cp |
Tipo de dolor torácico (Chest Pain) | Categórico | 1: Típica, 2: Atípica, 3: No anginoso, 4: Asintomático | N/A | No |
restecg |
Resultados electrocardiográficos en reposo | Categórico | 0: Normal, 1: Anormalidad ST-T, 2: Hipertrofia VI | N/A | No |
slope |
Pendiente del segmento ST en pico de ejercicio | Categórico | 1: Ascendente, 2: Plana, 3: Descendente | N/A | No |
thal |
Defecto de perfusión sanguínea (Talasemia) | Categórico | 3: Normal, 6: Defecto fijo, 7: Defecto reversible | N/A | No |
age |
Edad del paciente | Numérico | 34 - 77 | años | No |
trestbps |
Presión arterial en reposo | Numérico | 94 - 200 | mm Hg | No |
chol |
Colesterol sérico | Numérico | 126 - 564 | mg/dl | No |
thalach |
Frecuencia cardíaca máxima alcanzada | Numérico | 88 - 194 | lpm | No |
oldpeak |
Depresión del segmento ST inducida por ejercicio | Numérico | 0 - 6.2 | mV | No |
ca |
Número de vasos mayores coloreados por fluoroscopia | Numérico | 0 - 3 | vasos | No |
sex |
Sexo del paciente | Binario | 0: Femenino, 1: Masculino | N/A | No |
fbs |
Glucemia en ayunas > 120 mg/dl | Binario | 0: Falso, 1: Verdadero | N/A | No |
exang |
Angina inducida por ejercicio | Binario | 0: No, 1: Sí | N/A | No |
num |
Diagnóstico de enfermedad cardíaca (objetivo) | Binario | 0: Sin enfermedad, 1: Con enfermedad | N/A | Sí |
Esta sección detalla los códigos y significados de las variables categóricas y binarias presentes en el conjunto de datos de Enfermedad Cardíaca (Cleveland). Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados clínicos.
cp
Categórica
Tipo de dolor torácico (Chest Pain Type)
| Código | Significado |
|---|---|
| 1 | Angina típica (Típica) |
| 2 | Angina atípica (Atípica) |
| 3 | Dolor no anginoso (No anginoso) |
| 4 | Asintomático |
Importancia clínica: El tipo de dolor torácico es uno de los predictores más fuertes de enfermedad coronaria.
restecg
Categórica
Resultados electrocardiográficos en reposo
| Código | Significado |
|---|---|
| 0 | Normal |
| 1 | Anormalidad onda ST-T (inversión T y/o elevación/depresión > 0.05 mV) |
| 2 | Hipertrofia ventricular izquierda (probable o definitiva) |
slope
Categórica
Pendiente del segmento ST en pico de ejercicio
| Código | Significado |
|---|---|
| 1 | Ascendente (Upsloping) - ✓ Menor riesgo |
| 2 | Plana (Flat) - ⚠ Riesgo intermedio |
| 3 | Descendente (Downsloping) - ✗ Mayor riesgo |
Significado clínico: La pendiente descendente indica isquemia miocárdica más severa.
thal
Categórica
Defecto de perfusión sanguínea (Talasemia)
| Código | Significado |
|---|---|
| 3 | Normal - ✓ Perfusión normal |
| 6 | Defecto fijo - ⚠ Cicatriz/Infarto previo |
| 7 | Defecto reversible - ✗ Isquemia inducible (reversible) |
Importancia clínica: El defecto reversible (7) es el más asociado con enfermedad coronaria significativa.
Formato común: 0 = No / Falso, 1 = Sí / Verdadero
sex
Sexo (0: Femenino, 1: Masculino)
fbs
Glucemia en ayunas > 120 mg/dl (0: Falso, 1: Verdadero)
exang
Angina inducida por ejercicio (0: No, 1: Sí)
num
🎯 Variable Objetivo: Diagnóstico (0: Sin enfermedad, 1: Con enfermedad)
Nota: Todas las variables binarias están codificadas como 0 = No y 1 = Sí.
ca ∈ {1, 2, 3} → num = 1 (Enfermedad coronaria presente)exang == 1 → thalach < 180oldpeak > 2.5 → num = 1age > 70 → thalach < 175age < 30 → trestbps < 180oldpeak == 0 → slope = 1 (Pendiente ascendente)slope > 1 → oldpeak ≥ 0.1 (Pendiente no ascendente implica depresión)cp == 4 (Angina asintomática) → exang = 0thal == 3 (Normal) → num = 0 (Sin enfermedad)thal == 7 (Reversible) → num = 1 (Enfermedad presente)| Valor escala | 0.03 |
|---|---|
| Probabilidad Base | 0.1 |
| epochs | 500 |
|---|---|
| batch_size | 20 |
| generator_lr | 0.0002 |
| discriminator_lr | 0.0002 |
| pac | 2 |
| generator_dim | (128, 128) |
| discriminator_dim | (128, 128) |
| embedding_dim | 128 |
| l2scale | 1e-05 |
| epochs | 400 |
|---|---|
| batch_size | 50 |
| embedding_dim | 64 |
| compress_dims | (64, 64) |
| decompress_dims | (64, 64) |
| l2scale | 1e-5 |
| loss_factor | 2 |
| Random Seed | 42 |
|---|---|
| Python | 3.12.12 |
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.
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:
El mejor conjunto de cada etapa fue seleccionado mediante el índice TabDSFidelity.
| 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 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| Smote | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| Borderline SMOTE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| ADASYN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| SMOTE RSB* Adaptado | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| SMOTE RSB* Adaptado + Reglas | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| OOF PSO para Balanceo | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| OOF PSO para Balanceo + Reglas | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| 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.150 | 9814 | 1.000 | 1.000 | 1.000 | 9.878 | 0.215 | 0.832 | 0.020 | 0.962 | 83.493 | 0.577 | 0 | 0.579 | 🏆 |
| SMOTE RSB* + Ruido Gaussiano + Reglas | 1.112 | 9814 | 0.897 | 0.849 | 0.850 | 5.764 | 0.215 | 0.832 | 0.036 | 0.936 | 226.823 | 0.577 | 0 | 0.479 | |
| CTGAN | 1.086 | 10000 | 0.871 | 0.800 | 0.800 | 3.745 | 0.196 | 0.119 | 0.008 | 0.929 | 293.014 | 0.089 | 0 | 0.440 | |
| CTGAN + Reglas del Dominio | 1.069 | 10000 | 0.835 | 0.816 | 0.817 | 3.513 | 0.196 | 0.119 | 0.047 | 0.905 | 437.203 | 0.085 | 0 | 0.434 | |
| TVAE | 1.023 | 10000 | 0.883 | 0.799 | 0.800 | 3.669 | 0.265 | 0.205 | 0.030 | 0.909 | 161.911 | 0.049 | 0 | 0.434 | |
| TVAE + Reglas del Dominio | 1.115 | 10000 | 0.889 | 0.816 | 0.817 | 4.008 | 0.265 | 0.205 | 0.098 | 0.899 | 304.366 | 0.050 | 0 | 0.448 | |
| OOF PSO para Aumento | 1 | 10000 | 0.914 | 0.783 | 0.783 | 1.000 | 0.627 | 0.000 | 0.223 | 0.714 | 230.583 | 0.169 | 0 | 0.462 | |
| OOF PSO para Aumento + Reglas | 3.234 | 10000 | 0.869 | 0.816 | 0.817 | 1.095 | 0.627 | 0.000 | 0.359 | 0.731 | 373.552 | 0.184 | 0 | 0.483 | |
| SMOTE RSB* Refinado | 1.004 | 9826 | 1.000 | 1.000 | 1.000 | 9.756 | 0.220 | 0.729 | 0.020 | 0.964 | 81.748 | 0.506 | 0 | 0.535 | |
| SMOTE RSB* Refinado + Reglas | 1.085 | 9826 | 0.930 | 0.849 | 0.850 | 6.027 | 0.220 | 0.729 | 0.033 | 0.937 | 223.689 | 0.512 | 0 | 0.454 |
| 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.151 | 10111 | 1.000 | 1.000 | 1.000 | 3.868 | 0.210 | 0.832 | 0.019 | 0.963 | 156.634 | 0.576 | 0 | 0.596 | 🏆 |
| SMOTE RSB* + Ruido Gaussiano + Reglas | 1.114 | 10111 | 1.000 | 1.000 | 1.000 | 3.775 | 0.210 | 0.832 | 0.034 | 0.938 | 298.452 | 0.576 | 0 | 0.455 | |
| CTGAN | 1.088 | 10297 | 1.000 | 1.000 | 1.000 | 3.016 | 0.190 | 0.130 | 0.008 | 0.931 | 366.397 | 0.085 | 59 | 0.452 | |
| CTGAN + Reglas del Dominio | 1.072 | 10297 | 1.000 | 1.000 | 1.000 | 2.914 | 0.190 | 0.130 | 0.043 | 0.908 | 510.254 | 0.082 | 59 | 0.424 | |
| TVAE | 1.017 | 10297 | 1.000 | 1.000 | 1.000 | 2.788 | 0.258 | 0.211 | 0.026 | 0.912 | 234.419 | 0.047 | 59 | 0.466 | |
| TVAE + Reglas del Dominio | 1.116 | 10297 | 1.000 | 1.000 | 1.000 | 2.754 | 0.258 | 0.211 | 0.085 | 0.904 | 376.196 | 0.049 | 59 | 0.419 | |
| OOF PSO para Aumento | 1.004 | 10297 | 1.000 | 1.000 | 1.000 | 0.031 | 0.604 | 0.000 | 0.201 | 0.722 | 302.189 | 0.163 | 59 | 0.491 | |
| OOF PSO para Aumento + Reglas | 3.120 | 10297 | 1.000 | 1.000 | 1.000 | 0.063 | 0.604 | 0.000 | 0.304 | 0.737 | 445.098 | 0.178 | 59 | 0.447 | |
| SMOTE RSB* Refinado | 1.001 | 10123 | 1.000 | 1.000 | 1.000 | 3.758 | 0.215 | 0.739 | 0.019 | 0.965 | 153.499 | 0.506 | 0 | 0.557 | |
| SMOTE RSB* Refinado + Reglas | 1.087 | 10123 | 1.000 | 1.000 | 1.000 | 3.657 | 0.215 | 0.739 | 0.031 | 0.939 | 295.931 | 0.511 | 0 | 0.458 |
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:
¿Qué mide? Capacidad del modelo para distinguir entre clases (Ej: mortalidad vs supervivencia).
Interpretación:
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.
¿Qué mide? Media armónica entre precisión y sensibilidad (recall).
Interpretación:
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).
¿Qué mide? Proporción de predicciones correctas sobre el total.
Interpretación:
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.
¿Qué mide? Calidad global del conjunto sintético comparado con el original.
Interpretació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).
¿Qué mide? Similitud entre las distribuciones de variables numéricas del conjunto sintético y el original.
Interpretación:
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.
¿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:
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.
¿Qué mide? Divergencia entre las distribuciones de variables categóricas del conjunto sintético y el original.
Interpretación:
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.
¿Qué mide? Preservación de las relaciones entre variables del conjunto original.
Interpretación:
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.
¿Qué mide? Tiempo total de ejecución del proceso de generación del conjunto.
Interpretación:
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.
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.
¿Qué mide? La distancia promedio entre cada registro sintético y su registro más cercano en el conjunto de datos original.
Interpretación:
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.
¿Qué mide? Número de registros sintéticos que son copias idénticas de registros en el conjunto de datos original.
Interpretació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.
¿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:
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.
Formatos incluidos: CSV.
Díaz Bastida, M., Pérez Vázquez, R. A., & Bello Pérez, R. (2026). High-Fidelity Synthetic Dataset for Heart Disease (Version 2). figshare. https://doi.org/10.6084/m9.figshare.32932631.v2