CD_27 Original + Derivados

CD_27: Medical Appointment No Shows (Brasil)

Registro administrativo de citas del sistema público de salud brasileño para la predicción de la inasistencia del paciente a una cita médica programada (No-show). Integra variables sociodemográficas (Scholarship, edad), clínicas (hipertensión, discapacidad) y logísticas.

📈 Eficacia Predictiva Detallada

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

📊 Conjunto Original

Clase Precisión Recall F1-Score Soporte
Clase 0 0.80 0.98 0.88 160
Clase 1 0.25 0.03 0.05 40
Accuracy 0.79
Macro Avg 0.53 0.50 0.46 200
Weighted Avg 0.69 0.79 0.71 200
AUC-ROC: 0.57
F1-Score (weighted): 0.71
Accuracy: 0.79
➡️ Mejora
⬆ +0.07 AUC ⬆ +0.05 F1 ⬇ -0.02 Acc
🏆 MEJOR RENDIMIENTO

🔮 Conjunto Sintético

Clase Precisión Recall F1-Score Soporte
Clase 0 0.84 0.88 0.86 160
Clase 1 0.41 ⬆ +0.16 0.33 ⬆ +0.30 0.36 ⬆ +0.31 40
Accuracy 0.77 ⬇ -0.02
Macro Avg 0.62 ⬆ +0.09 0.60 ⬆ +0.10 0.61 ⬆ +0.15 200
Weighted Avg 0.75 ⬆ +0.06 0.77 ⬇ -0.02 0.76 ⬆ +0.05 200
AUC-ROC: 0.64 ⬆ +0.07
F1-Score (weighted): 0.76 ⬆ +0.05
Accuracy: 0.77 ⬇ -0.02

📊 Resumen de Mejoras en Clase Minoritaria (Clase 1)

🎯
Precisión
Original: 0.25
Sintético: 0.41
⬆ +0.16
📈
Recall
Original: 0.03
Sintético: 0.33
⬆ +0.30
⚖️
F1-Score
Original: 0.05
Sintético: 0.36
⬆ +0.31

📚 Fuente Original del Conjunto

Medical Appointment No-Shows Dataset

v1.0
Hoppen, J. & Aquarela Analytics
Disponible en repositorios públicos

📄 Resumen (Abstract)

El conjunto de datos de Inasistencia a Citas Médicas (Medical Appointment No-Shows) contiene 110,527 citas médicas con sus 14 variables asociadas. La variable más importante es si el paciente asistió o no a la cita (No-show). El objetivo es predecir la probabilidad de que un paciente no asista a su cita médica programada, un problema común en sistemas de salud que genera pérdidas de recursos, tiempos de espera prolongados y menor acceso a la atención médica. Cada instancia representa una cita médica programada, con información demográfica, clínica y logística del paciente.

🔬 Contexto y Motivación

La inasistencia a citas médicas es un problema significativo en sistemas de salud en todo el mundo, con tasas que varían entre el 5% y el 55% dependiendo de la población y el tipo de servicio. Las consecuencias incluyen:

  • Pérdida de recursos (tiempo del personal médico, infraestructura no utilizada)
  • Tiempos de espera prolongados para otros pacientes
  • Deterioro de la salud del paciente que no recibe atención oportuna
  • Costos operativos adicionales para reprogramar citas

La predicción temprana de pacientes con alto riesgo de inasistencia permite implementar estrategias de intervención como recordatorios telefónicos, mensajes de texto (SMS), o la reprogramación proactiva de citas, mejorando la eficiencia del sistema de salud y la atención al paciente.

La variable Scholarship se refiere al programa Bolsa Família, un programa de transferencia de ingresos del gobierno brasileño.

📊 Descripción de Datos

El dataset contiene 110,527 instancias con 14 atributos (13 variables predictoras y 1 variable objetivo). Las características son de tipo mixto (numéricas, categóricas y binarias).

📋 Diccionario de Variables
Variable Tipo Descripción Notas
A. Variables Identificadoras (A excluir del modelo)
PatientId ID (Numérico) Identificación del paciente Sin valor predictivo. Excluir del modelo.
AppointmentID ID (Numérico) Identificación de cada cita Sin valor predictivo. Excluir del modelo.
B. Datos Demográficos
Gender Categórica Sexo del paciente (Male / Female) Las mujeres representan la mayor proporción
Age Numérico (Entero) Edad del paciente en años -
Neighbourhood Categórica Barrio donde se realiza la cita Ubicación geográfica de la consulta
Scholarship Binaria Participación en el programa Bolsa Família (True/False) Programa de transferencia de ingresos de Brasil
C. Información de la Cita
DataMarcacaoConsulta Fecha Día de la cita programada (fecha de la consulta) Cuando deben visitar al médico
DataAgendamento Fecha Día en que se registró o llamó para agendar la cita Siempre anterior a la cita
D. Condiciones Clínicas
Hipertension Binaria Paciente con hipertensión (True/False) -
Diabetes Binaria Paciente con diabetes (True/False) -
Alcoholism Binaria Paciente con alcoholismo (True/False) -
Handcap Binaria Paciente con discapacidad (True/False) -
E. Comunicación
SMS_received Numérico (Entero) Número de mensajes SMS enviados al paciente 1 o más mensajes enviados
F. Variable Objetivo
No-show Binaria (Target) Indica si el paciente no asistió a la cita True = No asistió
False = Asistió

📋 Características del Dataset

  • Tipo de problema: Clasificación binaria (No-show vs. Asistencia)
  • Dimensión: Multivariante
  • Tipo de características: Mixtas (Numéricas, Categóricas, Binarias, Fechas)
  • Valores faltantes: No reportados
  • Área de aplicación: Salud Pública, Gestión de Servicios de Salud, Comportamiento del Paciente
  • Contexto geográfico: Probablemente Brasil (por la variable Scholarship/Bolsa Família)

⚖️ Ética y Privacidad

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

📋 Notas de Uso

Este conjunto de datos es ampliamente utilizado para predecir inasistencia a citas médicas. Se recomienda:

  • Excluir las variables PatientId y AppointmentID del modelado por ser identificadores sin valor predictivo
  • Extraer características temporales de las fechas:
    • Días de espera: DataMarcacaoConsulta - DataAgendamento (tiempo entre registro y cita)
    • Día de la semana de la cita
    • Mes y año de la cita
  • La variable Scholarship requiere contexto: se refiere al programa Bolsa Família de Brasil, un programa de asistencia social
  • Las variables binarias (Hipertension, Diabetes, Alcoholism, Handcap) pueden utilizarse directamente como 0/1
  • La variable SMS_received indica el número de mensajes enviados, no solo si se enviaron o no
  • La variable objetivo No-show está codificada como True (No asistió) y False (Asistió)
  • Convertir Gender a formato binario (Male/Female) y Neighbourhood mediante codificación one-hot
  • Utilizar validación cruzada estratificada debido al posible desbalanceo entre clases
  • Considerar técnicas de balanceo si la clase "No-show" es minoritaria

💡 Importancia en Salud Pública

La inasistencia a citas médicas es un problema crítico en sistemas de salud que afecta tanto a pacientes como a proveedores. Las implicaciones incluyen:

  • Impacto en la salud del paciente: Retraso en el diagnóstico y tratamiento, empeoramiento de condiciones crónicas
  • Costos económicos: Pérdida de ingresos por consultas no realizadas, uso ineficiente de recursos médicos
  • Acceso a la atención: Menor disponibilidad de citas para otros pacientes, listas de espera más largas
  • Intervenciones preventivas: Oportunidad perdida para educación en salud y prevención de enfermedades

Este dataset permite desarrollar modelos predictivos que identifican pacientes en riesgo de inasistencia, facilitando intervenciones como recordatorios personalizados, reprogramación proactiva y políticas de gestión de citas más eficientes, mejorando así la calidad y eficiencia del sistema de salud.

📖 Cómo citar la fuente original

Hoppen, J. & Aquarela Analytics. Medical Appointment No-Shows Dataset. Kaggle. https://www.kaggle.com/datasets/joniarroba/noshowappointments

📚 Referencias Adicionales

🔄 Transformaciones Aplicadas

Modificaciones realizadas al conjunto original (Medical Appointment No Shows)

  • Limpieza inicial y eliminación de variables no predictivas:
    • Eliminación de columnas identificadoras: PatientId e AppointmentID por no aportar valor predictivo y para evitar sobreajuste.
    • Eliminación de registros con edad negativa (Age = -1) — error conocido en este dataset.
    • Eliminación de registros con días de espera negativos (WaitingDays < 0) que indican errores de sistema o zonas horarias.
  • Ingeniería de características temporales:
    • Conversión de fechas: ScheduledDay y AppointmentDay a tipo datetime con normalización (eliminación de horas).
    • Creación de la variable WaitingDays (días de espera entre la reserva y la cita) calculada como AppointmentDay - ScheduledDay.
    • Eliminación de las columnas de fecha originales tras extraer la información relevante para reducir dimensionalidad.
  • Codificación de la variable objetivo:
    • Transformación de No-show de texto a binaria: 'No'0 (Paciente asistió a la cita), 'Yes'1 (Paciente faltó - Clase de interés).
    • Generación de documentación en leyenda sobre el significado de la variable objetivo.
  • Codificación específica de variables categóricas:
    • Gender: Mapeo manual ('F' → 0 = Femenino, 'M' → 1 = Masculino).
    • Neighbourhood: Codificación ordinal (Label Encoding) con preservación de mapeo completo (81 barrios) en la leyenda.
    • Documentación de variables binarias (0/1): Scholarship, Hipertension, Diabetes, Alcoholism, SMS_received.
  • Optimización de tipos de datos:
    • Conversión forzada de todas las variables numéricas a tipo entero (int) cuando todos los valores son enteros.
    • Variables incluidas: Age, WaitingDays, Handcap (número de discapacidades 0-4), y todas las binarias.
    • Eliminación de decimales espurios (ej. 1.0 → 1) para optimizar memoria y mejorar legibilidad.
  • Generación de documentación completa:
    • Creación del archivo leyenda_no_show.txt con semántica completa de la variable objetivo y todas las variables predictoras.
    • Documentación del proceso de limpieza (eliminación de IDs, creación de WaitingDays, filtrado de edades negativas).
    • Inclusión del mapeo completo de Neighbourhood (81 barrios codificados por orden alfabético).
  • Preservación de la estructura y calidad de datos:
    • Mantenimiento de las instancias filtradas (sin registros inválidos de edad o días de espera negativos).
    • Dataset final con 10 variables predictoras (mixtas: categóricas codificadas, binarias y numéricas) y 1 variable objetivo binaria.
    • Guardado en formato CSV con separador punto y coma (;) para compatibilidad internacional.

📊 Resultado: Dataset de citas médicas (≈110,000 registros después de limpieza) con 10 variables predictoras (demográficas, clínicas, administrativas y temporales) y 1 variable objetivo binaria (No-show). Desbalance moderado (~80% asistencias / ~20% inasistencias) — escenario ideal para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos de predicción de comportamiento de pacientes, destacando la importancia de la ventana temporal (WaitingDays) como predictor clave.

🏥 Fuente: Medical Appointment No Shows (Kaggle) - Datos de citas médicas de Brasil.

⏱️ Variable temporal clave: WaitingDays (días entre reserva y cita) — factor crítico en la probabilidad de inasistencia.

📋 Variables clínicas: Hipertensión, diabetes, alcoholism, discapacidades (Handcap), y recepción de SMS como recordatorio.

📁 Leyenda disponible: Archivo leyenda_no_show.txt con mapeo semántico completo de la variable objetivo, Gender (0=Femenino, 1=Masculino), y Neighbourhood (81 barrios codificados).

🎯 Variable objetivo: No-show (1 = Paciente faltó a la cita, 0 = Paciente asistió).

🧹 Limpieza aplicada: Eliminación de IDs, filtrado de edad negativa (-1), filtrado de días de espera negativos, y eliminación de fechas originales tras extraer WaitingDays.

📋 Diccionario de Datos Detallado

Variable Descripción Clínica Tipo Rango / Categorías Unidad ¿Objetivo?
Neighbourhood Barrio donde se encuentra la unidad de salud (codificado) Categórico 0-80 (ver leyenda para códigos) N/A No
Age Edad del paciente Numérico 0 - 93 años No
Handcap Nivel de discapacidad (número de discapacidades) Numérico 0 - 2 N/A No
WaitingDays Tiempo de espera entre la reserva y la cita Numérico 0 - 90 días No
Gender Sexo del paciente Binario 0: Femenino, 1: Masculino N/A No
Scholarship Beneficiario de ayuda social (Bolsa Família) Binario 0: No, 1: Sí N/A No
Hipertension Diagnóstico de hipertensión arterial Binario 0: No, 1: Sí N/A No
Diabetes Diagnóstico de diabetes mellitus Binario 0: No, 1: Sí N/A No
Alcoholism Diagnóstico de alcoholismo Binario 0: No, 1: Sí N/A No
SMS_received Recepción de recordatorio por SMS Binario 0: No, 1: Sí N/A No
No-show Absentismo a la cita médica (objetivo) Binario 0: Asistió, 1: Faltó (No-show) N/A
11 Variables totales
3 Numéricas
1 Categóricas
7 Binarias
Objetivo: Absentismo (No-show)
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 No Shows en Citas Médicas. Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados clínicos y de gestión sanitaria.

Neighbourhood Categórica

Barrios de Vitória (Espírito Santo, Brasil) - Codificación Alfabética

0 AEROPORTO
1 ANDORINHAS
2 ANTÔNIO HONÓRIO
3 ARIOVALDO FAVALESSA
4 BARRO VERMELHO
5 BELA VISTA
6 BENTO FERREIRA
7 BOA VISTA
8 BONFIM
9 CARATOÍRA
10 CENTRO
11 COMDUSA
12 CONQUISTA
13 CONSOLAÇÃO
14 CRUZAMENTO
15 DA PENHA
16 DE LOURDES
17 DO CABRAL
18 DO MOSCOSO
19 DO QUADRO
20 ENSEADA DO SUÁ
21 ESTRELINHA
22 FONTE GRANDE
23 FORTE SÃO JOÃO
24 FRADINHOS
25 GOIABEIRAS
26 GRANDE VITÓRIA
27 GURIGICA
28 HORTO
29 ILHA DAS CAIEIRAS
30 ILHA DE SANTA MARIA
31 ILHA DO BOI
32 ILHA DO FRADE
33 ILHA DO PRÍNCIPE
34 ILHAS OCEÂNICAS DE TRINDADE
35 INHANGUETÁ
36 ITARARÉ
37 JABOUR
38 JARDIM CAMBURI
39 JARDIM DA PENHA
40 JESUS DE NAZARETH
41 JOANA D´ARC
42 JUCUTUQUARA
43 MARIA ORTIZ
44 MARUÍPE
45 MATA DA PRAIA
46 MONTE BELO
47 MORADA DE CAMBURI
48 MÁRIO CYPRESTE
49 NAZARETH
50 NOVA PALESTINA
51 PARQUE INDUSTRIAL
52 PARQUE MOSCOSO
53 PIEDADE
54 PONTAL DE CAMBURI
55 PRAIA DO CANTO
56 PRAIA DO SUÁ
57 REDENÇÃO
58 REPÚBLICA
59 RESISTÊNCIA
60 ROMÃO
61 SANTA CECÍLIA
62 SANTA CLARA
63 SANTA HELENA
64 SANTA LUÍZA
65 SANTA LÚCIA
66 SANTA MARTHA
67 SANTA TEREZA
68 SANTO ANDRÉ
69 SANTO ANTÔNIO
70 SANTOS DUMONT
71 SANTOS REIS
72 SEGURANÇA DO LAR
73 SOLON BORGES
74 SÃO BENEDITO
75 SÃO CRISTÓVÃO
76 SÃO JOSÉ
77 SÃO PEDRO
78 TABUAZEIRO
79 UNIVERSITÁRIO
80 VILA RUBIM
⚠️

Nota: Codificación basada en orden alfabético. No todos los códigos pueden estar presentes en el subconjunto procesado.

Variables Binarias Binario

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

Gender Sexo (0: Femenino, 1: Masculino)
Scholarship Ayuda social (Bolsa Família) (0: No, 1: Sí)
Hipertension Hipertensión arterial (0: No, 1: Sí)
Diabetes Diabetes mellitus (0: No, 1: Sí)
Alcoholism Alcoholismo (0: No, 1: Sí)
SMS_received Recordatorio por SMS (0: No, 1: Sí)
No-show 🎯 Variable Objetivo: Absentismo (0: Asistió, 1: Faltó)
ℹ️

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

📊
Variables categóricas: 1
  • Neighbourhood (81 barrios codificados)
🎯
Variables binarias: 7
  • Gender, Scholarship, Hipertension, Diabetes, Alcoholism, SMS_received
  • 🎯 No-show (Objetivo - Absentismo)
📈
Variables numéricas: 3
  • Age (Edad en años)
  • Handcap (Nivel de discapacidad)
  • WaitingDays (Tiempo de espera en días)
⚠️
Recomendaciones para Modelado:
  • Factor clave: WaitingDays - Mayor tiempo de espera aumenta el absentismo
  • Recordatorio: SMS_received reduce significativamente el No-show
  • Neighbourhood: Captura efecto de accesibilidad geográfica
  • Scholarship: Pacientes de bajo nivel socioeconómico pueden tener mayor absentismo
  • Comorbilidades: Pacientes con hipertensión/diabetes tienden a asistir más (mayor gravedad)
  • Handcap: Mayor nivel de discapacidad puede asociarse a dificultades de acceso

🔬 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

  • WaitingDays == 0 → SMS_received = 0 (Cita inmediata → sin SMS)
  • Age < 2 → No-show = 0 (Menores de 2 años no faltan a citas)
  • Age < 12 → Alcoholism = 0 (Menores de 12 sin alcoholismo)
  • Scholarship == 1 → No-show = 0 (Beca → menor ausentismo)
  • Hipertension == 1 → Age > 18 (Hipertensión → edad adulta)
  • Diabetes == 1 → (Hipertension = 1) OR (Age > 18)
  • Handcap > 1 → (Hipertension = 1) OR (Diabetes = 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 956 0.669 0.715 0.725 9.111 0.086 0.535 0.029 0.966 62.863 0 956 0.431 🏆
Smote 1 956 0.671 0.687 0.675 6.786 0.085 0.345 0.039 0.969 52.862 0.023 609 0.469
Borderline SMOTE 1 956 0.656 0.711 0.705 8.161 0.093 0.334 0.037 0.968 53.375 0.023 611 0.438
ADASYN 1.004 954 0.638 0.672 0.650 5.055 0.080 0.464 0.038 0.970 52.937 0.024 608 0.447
SMOTE RSB* Adaptado 1.306 844 0.629 0.687 0.675 6.278 0.076 0.452 0.018 0.982 51.001 0.019 600 0.461
SMOTE RSB* Adaptado + Reglas 1.306 844 0.642 0.684 0.675 6.370 0.076 0.451 0.019 0.979 51.901 0.020 602 0.478
OOF PSO para Balanceo 1 956 0.650 0.709 0.740 4.820 0.295 0.000 0.199 0.559 62.907 0.151 600 0.479
OOF PSO para Balanceo + Reglas 7.460 956 0.570 0.711 0.770 5.544 0.206 0.049 0.047 0.863 67.370 0.032 577 0.459
Mejor seleccionado: Random Oversampling (TabDSFidelity: 9.111, AUC: 0.669, F1: 0.715, MIA: 0.431). 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.300 4644 0.623 0.703 0.700 9.351 0.088 0.655 0.045 0.967 60.219 0.060 0 0.488
SMOTE RSB* + Ruido Gaussiano + Reglas 1.990 4644 0.505 0.686 0.705 7.605 0.088 0.655 0.034 0.961 160.200 0.060 0 0.475
CTGAN 1.598 9642 0.601 0.568 0.525 5.440 0.128 0.495 0.089 0.937 390.185 0.084 0 0.437
CTGAN + Reglas del Dominio 1.087 9642 0.508 0.554 0.505 3.822 0.127 0.495 0.064 0.929 507.186 0.082 0 0.490
TVAE 1.003 9622 0.581 0.677 0.650 7.621 0.152 0.349 0.082 0.945 177.238 0.064 0 0.482
TVAE + Reglas del Dominio 1.163 9622 0.573 0.681 0.665 7.704 0.152 0.349 0.077 0.947 305.999 0.063 0 0.487
OOF PSO para Aumento 1.132 7519 0.557 0.637 0.600 2.749 0.422 0.000 0.579 0.672 378.163 0.191 0 0.468
OOF PSO para Aumento + Reglas 9.501 7519 0.496 0.646 0.615 2.258 0.420 0.000 0.510 0.692 490.745 0.164 0 0.508
SMOTE RSB* Refinado 1.439 5720 0.647 0.711 0.720 9.982 0.090 0.667 0.035 0.974 59.665 0.057 0 0.470 🏆
SMOTE RSB* Refinado + Reglas 2.152 5720 0.540 0.692 0.720 8.295 0.090 0.667 0.026 0.968 164.322 0.056 0 0.475
Mejor seleccionado: SMOTE RSB* Refinado (TabDSFidelity: 9.982, AUC: 0.647, F1: 0.711, MIA: 0.470). 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.243 5600 0.617 0.690 0.690 8.204 0.086 0.636 0.038 0.970 111.335 0.049 371 0.479
SMOTE RSB* + Ruido Gaussiano + Reglas 1.757 5600 0.534 0.676 0.695 6.732 0.086 0.636 0.029 0.965 211.331 0.049 371 0.480
CTGAN 1.529 10598 0.630 0.598 0.555 5.178 0.121 0.523 0.076 0.940 450.335 0.076 191 0.576
CTGAN + Reglas del Dominio 1.078 10598 0.534 0.599 0.555 3.673 0.121 0.523 0.054 0.934 567.408 0.075 192 0.510
TVAE 1.002 10578 0.628 0.707 0.685 8.151 0.141 0.363 0.070 0.949 243.593 0.058 190 0.473
TVAE + Reglas del Dominio 1.147 10578 0.617 0.714 0.705 8.320 0.141 0.363 0.065 0.951 371.990 0.058 190 0.482
OOF PSO para Aumento 1.117 8475 0.637 0.725 0.735 5.602 0.376 0.000 0.411 0.682 436.379 0.171 233 0.451
OOF PSO para Aumento + Reglas 6.098 8475 0.616 0.697 0.710 4.636 0.375 0.000 0.345 0.704 548.436 0.145 233 0.473
SMOTE RSB* Refinado 1.365 6676 0.662 0.707 0.710 9.420 0.087 0.664 0.032 0.975 113.737 0.049 297 0.477 🏆
SMOTE RSB* Refinado + Reglas 1.911 6676 0.554 0.699 0.725 7.763 0.087 0.664 0.023 0.971 217.677 0.049 297 0.489
Mejor seleccionado: SMOTE RSB* Refinado (TabDSFidelity: 9.420, AUC: 0.662, F1: 0.707, MIA: 0.477). Nota: Ratio <= 1.5 = Conjunto Balanceado.

📈 Diagrama del Proceso de Generación

Conjunto Original
CD_27
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
⭐ 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 Medical Appointment No-Show Prediction (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32934539.v1