Conjunto de datos clásico de ciberseguridad que transforma texto en datos tabulares para clasificación binaria (is_spam). Consta de 57 variables continuas/enteras: 48 frecuencias de palabras (Bag of Words), 6 frecuencias de caracteres y 3 métricas de patrones de mayúsculas (agresividad visual).
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.91 | 0.98 | 0.94 | 121 |
| Clase 1 | 0.96 | 0.85 | 0.90 | 79 |
| Accuracy | 0.93 | |||
| Macro Avg | 0.93 | 0.91 | 0.92 | 200 |
| Weighted Avg | 0.93 | 0.93 | 0.92 | 200 |
| Clase | Precisión | Recall | F1-Score | Soporte |
|---|---|---|---|---|
| Clase 0 | 0.93 | 0.95 | 0.94 | 121 |
| Clase 1 | 0.92 ⬇ -0.04 | 0.90 ⬆ +0.05 | 0.91 ⬆ +0.01 | 79 |
| Accuracy | 0.93 — | |||
| Macro Avg | 0.93 — | 0.92 ⬆ +0.01 | 0.93 ⬆ +0.01 | 200 |
| Weighted Avg | 0.93 — | 0.93 — | 0.93 ⬆ +0.01 | 200 |
✅ Mejora en recall con ligera compensación: El modelo sintético logra una mejora significativa en el recall de la clase minoritaria, aumentando de 0.85 a 0.90 (+0.05), lo que significa que identifica correctamente un 5% más de casos positivos. Aunque la precisión disminuye ligeramente de 0.96 a 0.92 (-0.04), el F1-Score mejora de 0.90 a 0.91 (+0.01). El AUC-ROC aumenta de 0.94 a 0.96 (+0.02), demostrando una mejor capacidad de discriminación general, mientras que la accuracy se mantiene estable en 0.93.
El conjunto de datos Spam Base está diseñado para la clasificación de correos electrónicos como spam (correo no deseado) o no spam (correo legítimo). El concepto de "spam" es diverso e incluye: anuncios de productos/sitios web, esquemas de "ganar dinero rápido", cadenas de correo, pornografía, entre otros. La colección de correos spam provino de administradores de correo y de individuos que reportaron correos no deseados. La colección de correos no spam provino de correos de trabajo y personales archivados. Las palabras 'george' y el código de área '650' son indicadores de correo legítimo (no spam), útiles para construir un filtro de spam personalizado.
El spam es un problema significativo en la comunicación por correo electrónico, que consume anualmente miles de millones de dólares en pérdida de productividad, almacenamiento y filtrado. Los filtros de spam basados en aprendizaje automático son una de las defensas más efectivas contra este problema. Este dataset fue creado por Hewlett-Packard Labs y es uno de los más utilizados en la investigación de clasificación de texto y detección de spam.
Según Cranor y LaMacchia (1998) en Communications of the ACM, el rendimiento típico de los filtros de spam es de alrededor de ~7% de error de clasificación. Los falsos positivos (marcar correo legítimo como spam) son altamente indeseables. Si se insiste en tener cero falsos positivos en el conjunto de entrenamiento/prueba, entre el 20-25% del spam pasa a través del filtro.
Las palabras 'george' y el código de área '650' son indicadores de no spam en este dataset, ya que provienen de correos de trabajo de Hewlett-Packard (ubicada en el área 650 de California). Para construir un filtro de spam de propósito general, es necesario cegar tales indicadores o obtener una colección de no spam muy amplia y diversa.
El dataset contiene 4,601 instancias (correos electrónicos) con 57 atributos (56 variables predictoras y 1 variable objetivo). Las características son de tipo continuo y entero.
Las 57 variables se dividen en cuatro categorías:
Variables de tipo word_freq_PALABRA (48 variables continuas en [0,100])
Ejemplos de palabras: make, address, all, 3d, our, over, remove, internet, order, mail, receive, will, people, report, addresses, free, business, email, you, credit, your, font, 000, money, hp, hpl, george, 650, lab, labs, telnet, 857, data, 415, 85, technology, 1999, parts, pm, direct, cs, meeting, original, project, re, edu, table, conference
Variables de tipo char_freq_CARACTER (6 variables continuas en [0,100])
Para más información sobre el problema del spam, se recomienda consultar:
Cranor, L. F., & LaMacchia, B. A. (1998). Spam!. Communications of the ACM, 41(8), 74-83. https://doi.org/10.1145/280324.280336
El conjunto de datos contiene correos electrónicos que han sido anonimizados y transformados en características numéricas (frecuencias de palabras y caracteres, métricas de mayúsculas). No contiene contenido textual completo de los correos, lo que protege la privacidad de los remitentes y destinatarios. Restricción de confidencialidad: El uso de los datos está restringido a fines académicos y de investigación. La publicación de resultados debe limitarse a métricas de evaluación, resultados agregados y metodología del modelo, sin divulgación de información que permita la reidentificación de los correos o sus remitentes.
Este conjunto de datos es uno de los más utilizados en la investigación de detección de spam. Se recomienda:
word_freq_* representan el porcentaje de palabras que coinciden con términos específicoscapital_run_length_* capturan patrones de mayúsculas, comunes en correos spam (ej: "FREE", "URGENT")El filtrado de spam es una de las aplicaciones más exitosas del aprendizaje automático en la vida cotidiana. Los filtros de spam basados en ML son utilizados por miles de millones de usuarios en todo el mundo a través de servicios como Gmail, Outlook y Yahoo Mail. La importancia de este problema radica en:
El equilibrio entre detectar spam y evitar falsos positivos es crítico. Los falsos positivos son especialmente dañinos porque pueden causar la pérdida de correos importantes, y en el peor de los casos, correos de trabajo críticos o notificaciones legales.
Spam Base Dataset. UCI Machine Learning Repository. Hewlett-Packard Labs. https://archive.ics.uci.edu/ml/datasets/Spambase
train_test_split con parámetro stratify para preservar exactamente la proporción original de clases (desbalance de spam).📊 Resultado: Dataset de 4,601 correos electrónicos (con versión reducida estratificada de 1,000 ejemplos) con 57 variables predictoras (48 de frecuencia de palabras, 6 de frecuencia de caracteres, 3 de longitud de mayúsculas) y 1 variable objetivo binaria (is_spam). Desbalance moderado (~60% no-spam / ~40% spam) — escenario ideal para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos de clasificación de texto y detección de spam, donde las características lingüísticas y estructurales de los correos electrónicos son determinantes.
📧 Fuente: Spambase Dataset (UCI Machine Learning Repository) - Correos electrónicos para clasificación de spam/no-spam.
📊 Variables de frecuencia de palabras: 48 variables que miden el porcentaje de aparición de palabras específicas en el correo (ej. "free", "money", "credit", "remove").
🔣 Variables de frecuencia de caracteres: 6 variables que miden el porcentaje de caracteres especiales (;, (, [, !, $, #) en el correo.
🔠 Variables de mayúsculas: Longitud promedio, máxima y total de secuencias ininterrumpidas de mayúsculas — indicador de "gritos" o énfasis en spam.
📁 Leyenda disponible: Archivo leyenda_spambase.txt con descripción completa de la variable objetivo, variables de frecuencia de palabras, caracteres y mayúsculas.
🎯 Variable objetivo: is_spam (1 = Spam/correo no solicitado, 0 = No-Spam/correo legítimo).
🧹 Limpieza aplicada: Carga sin cabecera, asignación de nombres de columnas, verificación de nulos, conversión de target a entero, reducción estratificada a 1,000 ejemplos.
| Variable | Descripción | Tipo | Rango / Categorías | Unidad | ¿Objetivo? |
|---|---|---|---|---|---|
word_freq_make |
Frecuencia de la palabra "make" | Numérico | 0 - 4.54 | % | No |
word_freq_address |
Frecuencia de la palabra "address" | Numérico | 0 - 14.28 | % | No |
word_freq_all |
Frecuencia de la palabra "all" | Numérico | 0 - 4 | % | No |
word_freq_3d |
Frecuencia de la palabra "3d" | Numérico | 0 - 7.07 | % | No |
word_freq_our |
Frecuencia de la palabra "our" | Numérico | 0 - 4.54 | % | No |
word_freq_over |
Frecuencia de la palabra "over" | Numérico | 0 - 3.57 | % | No |
word_freq_remove |
Frecuencia de la palabra "remove" | Numérico | 0 - 4 | % | No |
word_freq_internet |
Frecuencia de la palabra "internet" | Numérico | 0 - 3.12 | % | No |
word_freq_order |
Frecuencia de la palabra "order" | Numérico | 0 - 3.23 | % | No |
word_freq_mail |
Frecuencia de la palabra "mail" | Numérico | 0 - 5 | % | No |
word_freq_receive |
Frecuencia de la palabra "receive" | Numérico | 0 - 2 | % | No |
word_freq_will |
Frecuencia de la palabra "will" | Numérico | 0 - 5.88 | % | No |
word_freq_people |
Frecuencia de la palabra "people" | Numérico | 0 - 5.55 | % | No |
word_freq_report |
Frecuencia de la palabra "report" | Numérico | 0 - 5.12 | % | No |
word_freq_addresses |
Frecuencia de la palabra "addresses" | Numérico | 0 - 2.21 | % | No |
word_freq_free |
Frecuencia de la palabra "free" | Numérico | 0 - 4.54 | % | No |
word_freq_business |
Frecuencia de la palabra "business" | Numérico | 0 - 4.5 | % | No |
word_freq_email |
Frecuencia de la palabra "email" | Numérico | 0 - 9.09 | % | No |
word_freq_you |
Frecuencia de la palabra "you" | Numérico | 0 - 18.75 | % | No |
word_freq_credit |
Frecuencia de la palabra "credit" | Numérico | 0 - 5.22 | % | No |
word_freq_your |
Frecuencia de la palabra "your" | Numérico | 0 - 8 | % | No |
word_freq_font |
Frecuencia de la palabra "font" | Numérico | 0 - 10.58 | % | No |
word_freq_000 |
Frecuencia de la palabra "000" | Numérico | 0 - 2.59 | % | No |
word_freq_money |
Frecuencia de la palabra "money" | Numérico | 0 - 9.09 | % | No |
word_freq_hp |
Frecuencia de la palabra "hp" | Numérico | 0 - 15.38 | % | No |
word_freq_hpl |
Frecuencia de la palabra "hpl" | Numérico | 0 - 16.66 | % | No |
word_freq_george |
Frecuencia de la palabra "george" | Numérico | 0 - 25 | % | No |
word_freq_650 |
Frecuencia de la palabra "650" | Numérico | 0 - 5.88 | % | No |
word_freq_lab |
Frecuencia de la palabra "lab" | Numérico | 0 - 10 | % | No |
word_freq_labs |
Frecuencia de la palabra "labs" | Numérico | 0 - 5.88 | % | No |
word_freq_telnet |
Frecuencia de la palabra "telnet" | Numérico | 0 - 4.76 | % | No |
word_freq_857 |
Frecuencia de la palabra "857" | Numérico | 0 - 4.76 | % | No |
word_freq_data |
Frecuencia de la palabra "data" | Numérico | 0 - 3.73 | % | No |
word_freq_415 |
Frecuencia de la palabra "415" | Numérico | 0 - 4.76 | % | No |
word_freq_85 |
Frecuencia de la palabra "85" | Numérico | 0 - 5.88 | % | No |
word_freq_technology |
Frecuencia de la palabra "technology" | Numérico | 0 - 4.76 | % | No |
word_freq_1999 |
Frecuencia de la palabra "1999" | Numérico | 0 - 4.54 | % | No |
word_freq_parts |
Frecuencia de la palabra "parts" | Numérico | 0 - 0.46 | % | No |
word_freq_pm |
Frecuencia de la palabra "pm" | Numérico | 0 - 4.54 | % | No |
word_freq_direct |
Frecuencia de la palabra "direct" | Numérico | 0 - 4.76 | % | No |
word_freq_cs |
Frecuencia de la palabra "cs" | Numérico | 0 - 7.14 | % | No |
word_freq_meeting |
Frecuencia de la palabra "meeting" | Numérico | 0 - 5.26 | % | No |
word_freq_original |
Frecuencia de la palabra "original" | Numérico | 0 - 1.6 | % | No |
word_freq_project |
Frecuencia de la palabra "project" | Numérico | 0 - 4.57 | % | No |
word_freq_re |
Frecuencia de la palabra "re" | Numérico | 0 - 16.66 | % | No |
word_freq_edu |
Frecuencia de la palabra "edu" | Numérico | 0 - 7.14 | % | No |
word_freq_table |
Frecuencia de la palabra "table" | Numérico | 0 - 0.93 | % | No |
word_freq_conference |
Frecuencia de la palabra "conference" | Numérico | 0 - 2.56 | % | No |
char_freq_semicolon |
Frecuencia del caracter ";" | Numérico | 0 - 4.123 | % | No |
char_freq_( |
Frecuencia del caracter "(" | Numérico | 0 - 1.754 | % | No |
char_freq_[ |
Frecuencia del caracter "[" | Numérico | 0 - 2.777 | % | No |
char_freq_! |
Frecuencia del caracter "!" | Numérico | 0 - 32.478 | % | No |
char_freq_$ |
Frecuencia del caracter "$" | Numérico | 0 - 5.3 | % | No |
char_freq_# |
Frecuencia del caracter "#" | Numérico | 0 - 13.129 | % | No |
capital_run_length_average |
Longitud promedio de secuencias de mayúsculas | Numérico | 1 - 1,021.5 | caracteres | No |
capital_run_length_longest |
Longitud de la secuencia más larga de mayúsculas | Numérico | 1 - 2,042 | caracteres | No |
capital_run_length_total |
Número total de letras mayúsculas en el email | Numérico | 2 - 4,128 | caracteres | No |
is_spam |
Clasificación del correo electrónico (objetivo) | Binario | 0: No-Spam, 1: Spam | 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 Detección de Spam (Spambase). Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados de clasificación de correos electrónicos.
is_spam
🎯 Objetivo
| Código | Significado |
|---|---|
| 0 | No-Spam (Legítimo) - Correo electrónico válido y seguro (~61%) |
| 1 | Spam - Correo no deseado o comercial no solicitado (~39%) |
Variable Objetivo: Clasifica correos electrónicos como spam o legítimos basado en contenido textual y características.
Formato: 0 = No-Spam, 1 = Spam
is_spam
🎯 Variable Objetivo: Clasificación de spam (0: No-Spam, 1: Spam)
Nota: Única variable binaria en el dataset.
capital_run_length_average ≤ capital_run_length_longest (Promedio ≤ secuencia más larga)capital_run_length_longest ≤ capital_run_length_total (Secuencia más larga ≤ total mayúsculas)word_freq_hpl > 0 → is_spam = 0 (HP Labs → legítimo)word_freq_george > 0 → is_spam = 0 (Mención "george" → legítimo)is_spam == 0 → (word_freq_650 > 0.1) OR (word_freq_857 > 0.1) OR (word_freq_415 > 0.1)word_freq_make > 0.5 → is_spam = 1char_freq_$ > 0.5 → is_spam = 1char_freq_! > 1.5 → is_spam = 1word_freq_remove > 0 → is_spam = 1word_freq_business > 1 → is_spam = 1word_freq_000 > 0.5 → is_spam = 1is_spam == 0 → (word_freq_labs > 0.1) OR (word_freq_telnet > 0.1) OR (word_freq_technology > 0.1) OR (word_freq_data > 0.1) OR (word_freq_meeting > 0.1)word_freq_credit y word_freq_cs son mutuamente excluyentes (Jerga financiera vs técnica)word_freq_000 y word_freq_conference son mutuamente excluyentescapital_run_length_average > 20 → is_spam = 1word_freq_re > 1 → is_spam = 0| Valor escala | 0.03 |
|---|---|
| Probabilidad Base | 0.1 |
| epochs | 500 |
|---|---|
| batch_size | 50 |
| generator_lr | 0.0002 |
| discriminator_lr | 0.0002 |
| pac | 10 |
| generator_dim | (256, 256) |
| discriminator_dim | (256, 256) |
| embedding_dim | 128 |
| l2scale | 1e-05 |
| epochs | 500 |
|---|---|
| batch_size | 50 |
| embedding_dim | 128 |
| compress_dims | (128, 128) |
| decompress_dims | (128, 128) |
| 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 | 1 | 728 | 0.949 | 0.934 | 0.935 | 6.648 | 0.053 | 0.828 | 0.023 | 0.992 | 77.849 | 0 | 728 | 0.557 | 🏆 |
| Smote | 1 | 728 | 0.955 | 0.919 | 0.920 | 4.859 | 0.129 | 0.598 | 0.023 | 0.993 | 66.498 | 0.001 | 604 | 0.492 | |
| Borderline SMOTE | 1 | 728 | 0.955 | 0.914 | 0.915 | 4.757 | 0.118 | 0.740 | 0.023 | 0.993 | 65.964 | 0.002 | 602 | 0.535 | |
| ADASYN | 1.038 | 742 | 0.952 | 0.924 | 0.925 | 5.166 | 0.127 | 0.670 | 0.027 | 0.993 | 65.533 | 0.002 | 602 | 0.480 | |
| SMOTE RSB* Adaptado | 1.003 | 727 | 0.952 | 0.934 | 0.935 | 5.987 | 0.127 | 0.617 | 0.023 | 0.994 | 64.920 | 0.002 | 604 | 0.483 | |
| SMOTE RSB* Adaptado + Reglas | 1.003 | 727 | 0.960 | 0.929 | 0.930 | 6.259 | 0.126 | 0.622 | 0.023 | 0.994 | 65.170 | 0.002 | 602 | 0.525 | |
| OOF PSO para Balanceo | 1 | 728 | 0.953 | 0.949 | 0.950 | 6.076 | 0.152 | 0.377 | 0.023 | 0.753 | 63.800 | 0.063 | 600 | 0.469 | |
| OOF PSO para Balanceo + Reglas | 1.110 | 728 | 0.937 | 0.904 | 0.905 | 0.000 | 0.179 | 0.269 | 0.035 | 0.663 | 65.562 | 0.079 | 510 | 0.453 |
| 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.432 | 5833 | 0.820 | 0.738 | 0.745 | 2.914 | 0.455 | 0.024 | 0.001 | 0.986 | 131.004 | 0.023 | 0 | 0.521 | |
| SMOTE RSB* + Ruido Gaussiano + Reglas | 1.166 | 5833 | 0.884 | 0.843 | 0.845 | 5.063 | 0.455 | 0.024 | 0.042 | 0.981 | 368.899 | 0.023 | 0 | 0.592 | |
| CTGAN | 1.027 | 10000 | 0.833 | 0.752 | 0.750 | 4.698 | 0.271 | 0.141 | 0.026 | 0.932 | 663.649 | 0.039 | 0 | 0.481 | |
| CTGAN + Reglas del Dominio | 1.212 | 10000 | 0.878 | 0.778 | 0.775 | 5.400 | 0.273 | 0.128 | 0.007 | 0.929 | 1065.720 | 0.037 | 0 | 0.502 | |
| TVAE | 1.050 | 10000 | 0.940 | 0.856 | 0.855 | 6.693 | 0.335 | 0.099 | 0.018 | 0.924 | 515.605 | 0.009 | 0 | 0.491 | |
| TVAE + Reglas del Dominio | 1.163 | 10000 | 0.944 | 0.861 | 0.860 | 6.811 | 0.335 | 0.100 | 0.010 | 0.923 | 922.798 | 0.010 | 0 | 0.513 | |
| OOF PSO para Aumento | 1 | 10000 | 0.832 | 0.747 | 0.750 | 2.022 | 0.501 | 0.037 | 0.023 | 0.586 | 252.782 | 0.285 | 0 | 0.523 | |
| OOF PSO para Aumento + Reglas | 1.161 | 10000 | 0.748 | 0.680 | 0.685 | 0.357 | 0.494 | 0.037 | 0.042 | 0.624 | 657.985 | 0.277 | 0 | 0.509 | |
| SMOTE RSB* Refinado | 1.104 | 6430 | 0.962 | 0.944 | 0.945 | 7.164 | 0.463 | 0.006 | 0.014 | 0.985 | 146.285 | 0.007 | 18 | 0.493 | 🏆 |
| SMOTE RSB* Refinado + Reglas | 1.385 | 6430 | 0.954 | 0.910 | 0.910 | 6.553 | 0.462 | 0.006 | 0.071 | 0.982 | 416.288 | 0.010 | 18 | 0.434 |
| 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.375 | 6561 | 0.937 | 0.908 | 0.910 | 4.833 | 0.412 | 0.025 | 0.002 | 0.987 | 256.371 | 0.022 | 0 | 0.519 | |
| SMOTE RSB* + Ruido Gaussiano + Reglas | 1.146 | 6561 | 0.950 | 0.878 | 0.880 | 4.212 | 0.412 | 0.025 | 0.040 | 0.984 | 492.933 | 0.023 | 0 | 0.530 | |
| CTGAN | 1.025 | 10728 | 0.926 | 0.841 | 0.840 | 2.864 | 0.247 | 0.156 | 0.026 | 0.935 | 876.327 | 0.036 | 147 | 0.474 | |
| CTGAN + Reglas del Dominio | 1.197 | 10728 | 0.943 | 0.880 | 0.880 | 5.352 | 0.249 | 0.144 | 0.008 | 0.933 | 1277.690 | 0.034 | 147 | 0.552 | |
| TVAE | 1.046 | 10728 | 0.948 | 0.904 | 0.905 | 6.154 | 0.313 | 0.107 | 0.018 | 0.948 | 730.947 | 0.008 | 147 | 0.492 | |
| TVAE + Reglas del Dominio | 1.151 | 10728 | 0.956 | 0.909 | 0.910 | 6.777 | 0.313 | 0.109 | 0.010 | 0.948 | 1133.020 | 0.009 | 147 | 0.538 | 🏆 |
| OOF PSO para Aumento | 1 | 10728 | 0.946 | 0.934 | 0.935 | 5.226 | 0.461 | 0.037 | 0.023 | 0.604 | 464.555 | 0.266 | 147 | 0.523 | |
| OOF PSO para Aumento + Reglas | 1.149 | 10728 | 0.965 | 0.929 | 0.930 | 6.123 | 0.455 | 0.037 | 0.040 | 0.641 | 886.158 | 0.258 | 147 | 0.509 | |
| SMOTE RSB* Refinado | 1.093 | 7158 | 0.961 | 0.919 | 0.920 | 6.349 | 0.419 | 0.006 | 0.014 | 0.986 | 289.101 | 0.006 | 245 | 0.556 | |
| SMOTE RSB* Refinado + Reglas | 1.339 | 7158 | 0.956 | 0.924 | 0.925 | 6.333 | 0.418 | 0.006 | 0.065 | 0.984 | 559.578 | 0.009 | 245 | 0.538 |
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 Spam Detection (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32945930.v1