CD_17 Original + Derivados

CD_18: Stroke Prediction: Factores de Riesgo de Ictus

Dataset clínico procedente de registros electrónicos (Kaggle) para la predicción binaria de accidentes cerebrovasculares (stroke). Integra 11 variables que abarcan factores sociodemográficos (género, estado civil, tipo de trabajo/residencia), fisiológicos (hipertensión, cardiopatía, glucosa media, IMC imputado por mediana) y estilo de vida (tabaquismo, incluyendo categoría "Desconocido").

📈 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.96 0.99 0.98 190
Clase 1 0.67 0.20 0.31 10
Accuracy 0.95
Macro Avg 0.81 0.60 0.64 200
Weighted Avg 0.94 0.95 0.94 200
AUC-ROC: 0.73
F1-Score (weighted): 0.94
Accuracy: 0.95
➡️ Mejora
⬆ +0.17 AUC ⬇ -0.03 F1 ⬇ -0.06 Acc

🔮 Conjunto Sintético

Clase Precisión Recall F1-Score Soporte
Clase 0 0.97 0.91 0.94 190
Clase 1 0.22 ⬇ -0.45 0.50 ⬆ +0.30 0.30 ⬇ -0.01 10
Accuracy 0.89 ⬇ -0.06
Macro Avg 0.59 ⬇ -0.22 0.70 ⬆ +0.10 0.62 ⬇ -0.02 200
Weighted Avg 0.93 ⬇ -0.01 0.89 ⬇ -0.06 0.91 ⬇ -0.03 200
AUC-ROC: 0.89 ⬆ +0.17
F1-Score (weighted): 0.91 ⬇ -0.03
Accuracy: 0.89 ⬇ -0.06

📊 Resumen de Mejoras en Clase Minoritaria (Clase 1)

🎯
Precisión
Original: 0.67
Sintético: 0.22
⬇ -0.45
📈
Recall
Original: 0.20
Sintético: 0.50
⬆ +0.30
⚖️
F1-Score
Original: 0.31
Sintético: 0.30
⬇ -0.01

📚 Fuente Original del Conjunto

Stroke Prediction Dataset

v1.0
Datos clínicos hospitalarios (Fuente Confidencial)
Disponible en repositorios públicos

📄 Resumen (Abstract)

El Stroke Prediction Dataset es un conjunto de datos diseñado para la evaluación de riesgos de salud, específicamente para predecir la probabilidad de que un paciente sufra un Accidente Cerebrovascular (Ictus/Stroke). Según la Organización Mundial de la Salud (OMS), el ictus es la segunda causa principal de muerte a nivel mundial. Este dataset permite abordar un problema de clasificación binaria desequilibrada, utilizando parámetros demográficos, fisiológicos y de estilo de vida para identificar pacientes de alto riesgo. Cada instancia representa a un paciente y contiene información sobre su perfil clínico y social.

🔬 Origen y Procedencia

  • Fuente: Fuente Confidencial (disponible públicamente en repositorios como Kaggle para fines educativos)
  • Contexto: Datos recopilados de registros médicos electrónicos
  • Propósito: Investigación y educación en modelos predictivos de salud

📋 Características del Dataset

  • Tipo de problema: Clasificación binaria (Ictus vs. No Ictus)
  • Dimensión: Multivariante
  • Tipo de características: Categóricas, binarias y numéricas
  • Valores faltantes: Sí (BMI con "N/A"; smoking_status con "Unknown")
  • Área de aplicación: Salud y Medicina, Predicción de riesgos, Neurología
  • Desbalanceo de clases: El evento de interés (ictus) es la clase minoritaria

⚖️ Ética y Privacidad

El conjunto de datos ha sido desidentificado para proteger la privacidad de los pacientes. No contiene información personal identificable como nombres, direcciones o números de identificación que permitan la reidentificación. El identificador id es un número aleatorio sin relación con información personal. 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 está diseñado para abordar un problema de clasificación binaria desequilibrada. Se recomienda:

  • Excluir la variable id del modelado por ser un identificador único sin valor predictivo
  • Manejar adecuadamente los valores "N/A" en la columna bmi mediante imputación (media, mediana o técnicas avanzadas)
  • Tratar la categoría "Unknown" en smoking_status como una categoría separada, no como un valor faltante
  • Utilizar validación cruzada estratificada debido al desbalanceo significativo entre clases (stroke=1 es minoritario)
  • Considerar técnicas de balanceo (SMOTE, sobremuestreo, submuestreo) o métricas apropiadas (F1-Score, AUC-ROC, Recall) para evaluar el rendimiento
  • Estandarizar/normalizar las características numéricas (age, avg_glucose_level, bmi)
  • Codificar variables categóricas mediante one-hot encoding o label encoding según corresponda

💡 Importancia Clínica

El Accidente Cerebrovascular (Ictus) es una emergencia médica que ocurre cuando el flujo sanguíneo a una parte del cerebro se interrumpe o se reduce, privando al tejido cerebral de oxígeno y nutrientes. Según la Organización Mundial de la Salud (OMS), es la segunda causa principal de muerte a nivel mundial y una de las principales causas de discapacidad a largo plazo. La identificación temprana de pacientes en riesgo de sufrir un ictus permite:

  • Implementar medidas preventivas (control de hipertensión, diabetes, cambios en el estilo de vida)
  • Realizar intervenciones médicas tempranas que reducen la mortalidad y secuelas
  • Optimizar la asignación de recursos hospitalarios y de atención primaria
  • Reducir la carga económica asociada a la atención de pacientes con ictus

La predicción precisa del riesgo de ictus mediante modelos de machine learning puede complementar las herramientas clínicas existentes y mejorar la toma de decisiones en la práctica médica.

📖 Cómo citar la fuente original

Stroke Prediction Dataset. Datos clínicos anonimizados para la predicción de accidentes cerebrovasculares. Disponible en repositorios públicos (Kaggle).

📚 Referencias Adicionales

🔄 Transformaciones Aplicadas

Modificaciones realizadas al conjunto original (Stroke Prediction Dataset)

  • Limpieza inicial y eliminación de variables no predictivas:
    • Eliminación de la columna id (identificador único de paciente) por no aportar valor predictivo y evitar sobreajuste.
    • Mantenimiento de variables numéricas binarias hypertension e heart_disease en su formato original (0 = No, 1 = Sí).
  • Tratamiento de valores perdidos en BMI:
    • Conversión forzada de la columna bmi a tipo numérico, transformando cualquier texto "N/A" remanente a NaN real.
    • Imputación con mediana: Relleno de todos los valores faltantes en bmi con la mediana calculada (~28.6 kg/m²), preservando la robustez frente a outliers y manteniendo la integridad distribucional.
    • Registro detallado del número de valores imputados para trazabilidad metodológica.
  • Codificación numérica de variables categóricas y generación de leyenda:
    • Detección automática de columnas de tipo object (texto/categóricas) mediante select_dtypes(include=['object']).
    • Transformación de 5 variables categóricas a valores numéricos enteros mediante codificación ordinal (cat.codes):
      • gender (0: Female, 1: Male, 2: Other)
      • ever_married (0: No, 1: Yes)
      • work_type (0: children, 1: Govt_job, 2: Never_worked, 3: Private, 4: Self-employed)
      • Residence_type (0: Rural, 1: Urban)
      • smoking_status (0: formerly smoked, 1: never smoked, 2: smokes, 3: Unknown)
    • Generación del archivo leyenda_stroke_categories.txt con el mapeo completo de todas las variables categóricas codificadas para trazabilidad e interpretación.
  • Preservación de la estructura original:
    • Mantenimiento de las 5110 instancias (pacientes) sin eliminación de filas.
    • Conservación de las 11 variables originales (tras eliminar id) sin adición de columnas artificiales.
    • Guardado en formato CSV con separador punto y coma (;) para compatibilidad internacional.
  • Control de calidad y documentación:
    • Vista previa del dataset resultante para validación visual.
    • Generación de leyenda con descripción detallada de cada código numérico y su correspondiente categoría original.
    • Nota explícita sobre variables que ya eran numéricas (hypertension, heart_disease) para evitar confusiones.

📊 Resultado: Dataset de 5,110 pacientes con 10 variables predictoras (mixtas: 5 categóricas codificadas, 5 numéricas continuas/enteras) y 1 variable objetivo binaria (stroke). Desbalance extremo de clases (~5% casos positivos de accidente cerebrovascular) — escenario crítico para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos médicos con baja prevalencia.

🏥 Fuente: Healthcare Dataset Stroke Prediction (disponible en plataformas de datos abiertos como Kaggle).

📋 Variables clave: Factores de riesgo cardiovascular incluyendo edad, hipertensión, enfermedades cardíacas, tipo de trabajo, estado civil, índice de masa corporal (BMI), y estado de tabaquismo.

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

🎯 Variable objetivo: stroke (1 = Paciente con accidente cerebrovascular, 0 = Sin accidente cerebrovascular).

📋 Diccionario de Datos Detallado

Variable Descripción Clínica Tipo Rango / Categorías Unidad ¿Objetivo?
gender Género del paciente Categórico 0: Female, 1: Male, 2: Other N/A No
work_type Tipo de empleo/ocupación Categórico 0: Govt_job, 1: Never_worked, 2: Private, 3: Self-employed, 4: children N/A No
Residence_type Tipo de residencia (área de vivienda) Categórico 0: Rural, 1: Urban N/A No
smoking_status Historial de tabaquismo Categórico 0: Unknown, 1: formerly smoked, 2: never smoked, 3: smokes N/A No
age Edad del paciente Numérico 0.24 - 82 años No
avg_glucose_level Nivel promedio de glucosa en sangre Numérico 55.28 - 252.72 mg/dL No
bmi Índice de Masa Corporal Numérico 14.2 - 92 kg/m² No
hypertension Hipertensión arterial (diagnóstico) Binario 0: No, 1: Sí N/A No
heart_disease Enfermedad cardíaca (diagnóstico) Binario 0: No, 1: Sí N/A No
ever_married Estado civil histórico (alguna vez casado/a) Binario 0: No, 1: Yes N/A No
stroke Diagnóstico de Ictus (Accidente Cerebrovascular) - OBJETIVO Binario 0: No, 1: Sí N/A
11 Variables totales
3 Numéricas
4 Categóricas
4 Binarias
Objetivo: Ictus (stroke)
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 Predicción de Ictus (Stroke Prediction). Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados clínicos.

gender Categórica
Código Significado
0Female (Femenino)
1Male (Masculino)
2Other (Otro)
work_type Categórica
Código Significado
0Govt_job (Funcionario público)
1Never_worked (Nunca trabajó)
2Private (Sector privado)
3Self-employed (Autónomo/Trabajador independiente)
4children (Niño/Estudiante)
💡

Interpretación clínica: El tipo de ocupación puede influir en el nivel de actividad física y estrés, factores relacionados con el riesgo cardiovascular.

Residence_type Categórica
Código Significado
0Rural (Zona rural)
1Urban (Zona urbana)
smoking_status Categórica
Código Significado
0Unknown (Desconocido - Información no disponible)
1formerly smoked (Ex-fumador/a)
2never smoked (Nunca fumó)
3smokes (Fumador/a activo/a)
🚨

Importancia clínica: El tabaquismo es uno de los principales factores de riesgo modificables para el ictus.

Variables Binarias Binario

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

hypertension Hipertensión arterial (0: No, 1: Sí)
heart_disease Enfermedad cardíaca (0: No, 1: Sí)
ever_married Alguna vez casado/a (0: No, 1: Yes)
stroke 🎯 Variable Objetivo: Ictus (0: No, 1: Sí)
ℹ️

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

📊
Variables categóricas: 4
  • gender (3 categorías)
  • work_type (5 categorías)
  • Residence_type (2 categorías)
  • smoking_status (4 categorías)
🎯
Variables binarias: 4
  • hypertension (Hipertensión)
  • heart_disease (Enfermedad cardíaca)
  • ever_married (Estado civil)
  • 🎯 stroke (Objetivo - Ictus)
📈
Variables numéricas: 3
  • age (Edad en años)
  • avg_glucose_level (Glucosa promedio)
  • bmi (Índice de Masa Corporal)
⚠️
Recomendaciones Clínicas:
  • Factores de riesgo principales: age, hypertension, heart_disease, avg_glucose_level
  • Desbalance extremo: Considerar técnicas de balanceo (SMOTE, sobremuestreo)
  • BMI: Los valores perdidos han sido imputados con la mediana
  • smoking_status: La categoría "Unknown" (0) representa datos faltantes en el historial de tabaquismo
  • ever_married: Variable proxy de apoyo social, puede influir en la salud cardiovascular
  • Prevención: El control de la hipertensión y diabetes es clave en la prevención del ictus

🔬 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

  • work_type == 4 (Children) → ever_married = 0
  • age < 16 → work_type = 4 (Children)
  • age < 16 → ever_married = 0
  • work_type == 0 (Gobierno) → age ≥ 18
  • work_type == 3 (Autónomo) → age ≥ 18
  • age < 12 → smoking_status ≠ 1 (Formerly smoked)
  • age < 12 → smoking_status ≠ 3 (Smokes)
  • age < 18 → hypertension = 0
  • age < 18 → heart_disease = 0
  • age < 10 → stroke = 0
  • avg_glucose_level < 45 → avg_glucose_level ≥ 45 (Corrección de hipoglucemia)
  • avg_glucose_level > 230 → bmi > 18
  • bmi < 15 → hypertension = 0 (IMC extremadamente bajo → improbable HTA)

⚙️ 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 1142 0.785 0.928 0.940 7.243 0.319 0.014 0.082 0.914 54.378 0 1142 0.518 🏆
Smote 1 1142 0.860 0.926 0.920 6.207 0.444 0.007 0.083 0.904 49.567 0.038 601 0.502
Borderline SMOTE 1 1142 0.854 0.902 0.890 3.258 0.443 0.000 0.088 0.894 48.897 0.038 601 0.503
ADASYN 1.009 1137 0.904 0.919 0.905 5.974 0.443 0.007 0.081 0.907 50.576 0.039 601 0.462
SMOTE RSB* Adaptado 1.036 1122 0.826 0.909 0.890 5.165 0.372 0.015 0.084 0.932 51.267 0.042 596 0.513
SMOTE RSB* Adaptado + Reglas 1.036 1122 0.824 0.901 0.880 4.425 0.371 0.016 0.086 0.933 49.722 0.041 597 0.518
OOF PSO para Balanceo 2.340 815 0.768 0.934 0.950 6.404 0.288 0.000 0.065 0.756 64.262 0.064 600 0.511
OOF PSO para Balanceo + Reglas 1 1142 0.753 0.931 0.945 3.896 0.418 0.000 0.188 0.694 62.326 0.119 595 0.535
Mejor seleccionado: Random Oversampling (TabDSFidelity: 7.243, AUC: 0.785, F1: 0.928, MIA: 0.518). 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.738 7736 0.812 0.922 0.930 8.920 0.473 0.059 0.059 0.939 61.338 0.728 0 0.497
SMOTE RSB* + Ruido Gaussiano + Reglas 1.752 7736 0.803 0.922 0.930 8.772 0.473 0.059 0.057 0.943 163.564 0.728 0 0.515
CTGAN 1.449 9998 0.812 0.881 0.845 6.973 0.565 0.000 0.080 0.899 348.070 0.072 0 0.518
CTGAN + Reglas del Dominio 1.513 9998 0.814 0.869 0.825 6.955 0.565 0.000 0.067 0.912 463.506 0.070 0 0.520
TVAE 1.376 10000 0.778 0.872 0.830 6.312 0.464 0.001 0.071 0.898 166.468 0.042 2 0.516
TVAE + Reglas del Dominio 1.377 10000 0.759 0.877 0.840 6.060 0.464 0.001 0.067 0.904 274.418 0.041 2 0.521
OOF PSO para Aumento 1 10000 0.872 0.513 0.395 2.962 0.768 0.000 0.268 0.635 102.445 0.178 0 0.500
OOF PSO para Aumento + Reglas 1.008 10000 0.837 0.427 0.320 1.629 0.768 0.000 0.442 0.712 208.763 0.163 0 0.500
SMOTE RSB* Refinado 1.805 7734 0.812 0.916 0.920 8.688 0.475 0.049 0.055 0.936 55.715 0.637 0 0.496
SMOTE RSB* Refinado + Reglas 1.805 7734 0.834 0.919 0.925 9.125 0.475 0.049 0.054 0.942 153.155 0.637 0 0.489 🏆
Mejor seleccionado: SMOTE RSB* Refinado + Reglas del Dominio (TabDSFidelity: 9.125, AUC: 0.834, F1: 0.919, MIA: 0.489). 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.614 8878 0.786 0.916 0.920 7.675 0.449 0.042 0.060 0.936 112.731 0.728 0 0.511
SMOTE RSB* + Ruido Gaussiano + Reglas 1.625 8878 0.812 0.919 0.925 8.929 0.449 0.042 0.058 0.941 218.557 0.728 0 0.503
CTGAN 1.394 11140 0.843 0.912 0.890 7.087 0.526 0.000 0.079 0.902 406.547 0.064 208 0.524
CTGAN + Reglas del Dominio 1.448 11140 0.824 0.885 0.855 3.904 0.526 0.000 0.067 0.915 519.643 0.062 208 0.529
TVAE 1.331 11142 0.785 0.897 0.875 3.836 0.429 0.001 0.072 0.901 222.210 0.036 209 0.506
TVAE + Reglas del Dominio 1.332 11142 0.789 0.902 0.880 4.456 0.429 0.001 0.068 0.906 329.758 0.035 209 0.511
OOF PSO para Aumento 1 11142 0.801 0.892 0.870 1.722 0.691 0.000 0.221 0.663 157.727 0.159 208 0.522
OOF PSO para Aumento + Reglas 1.007 11142 0.809 0.891 0.865 1.714 0.691 0.000 0.336 0.732 262.506 0.144 208 0.517
SMOTE RSB* Refinado 1.667 8876 0.800 0.919 0.925 8.308 0.450 0.035 0.057 0.933 106.362 0.637 0 0.518
SMOTE RSB* Refinado + Reglas 1.667 8876 0.839 0.916 0.920 9.379 0.450 0.035 0.056 0.939 202.775 0.637 0 0.508 🏆
Mejor seleccionado: SMOTE RSB* Refinado + Reglas del Dominio (TabDSFidelity: 9.379, AUC: 0.839, F1: 0.916, MIA: 0.508). Nota: Ratio <= 1.5 = Conjunto Balanceado.

📈 Diagrama del Proceso de Generación

Conjunto Original
CD_18
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* Refinado + Reglas del Dominio
⭐ Mejor Aumentado
SMOTE RSB* Refinado + Reglas del Dominio
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 Stroke Risk Factors Prediction (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32932682.v1