CD_53 Original + Derivados

CD_53: Mushroom Classification

Conjunto de datos biológico para la clasificación de hongos (comestible vs. venenoso). Caracterizado por ser 100% categórico nominal (22 variables de morfología, olor, hábitat) transformado numéricamente.

📈 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.85 0.96 0.90 104
Clase 1 0.95 0.81 0.88 96
Accuracy 0.89
Macro Avg 0.90 0.89 0.89 200
Weighted Avg 0.90 0.89 0.89 200
AUC-ROC: 0.99
F1-Score (weighted): 0.89
Accuracy: 0.89
➡️ Mejora
⬆ +0.01 AUC ⬆ +0.11 F1 ⬆ +0.11 Acc
🏆 MEJOR RENDIMIENTO

🔮 Conjunto Sintético

Clase Precisión Recall F1-Score Soporte
Clase 0 1.00 1.00 1.00 104
Clase 1 1.00 ⬆ +0.05 1.00 ⬆ +0.19 1.00 ⬆ +0.12 96
Accuracy 1.00 ⬆ +0.11
Macro Avg 1.00 ⬆ +0.10 1.00 ⬆ +0.11 1.00 ⬆ +0.11 200
Weighted Avg 1.00 ⬆ +0.10 1.00 ⬆ +0.11 1.00 ⬆ +0.11 200
AUC-ROC: 1.00 ⬆ +0.01
F1-Score (weighted): 1.00 ⬆ +0.11
Accuracy: 1.00 ⬆ +0.11

📊 Resumen de Mejoras en Clase Minoritaria (Clase 1)

🎯
Precisión
Original: 0.95
Sintético: 1.00
⬆ +0.05
📈
Recall
Original: 0.81
Sintético: 1.00
⬆ +0.19
⚖️
F1-Score
Original: 0.88
Sintético: 1.00
⬆ +0.12

📚 Fuente Original del Conjunto

Mushroom Classification Dataset

v1.0
The Audubon Society Field Guide to North American Mushrooms (1981)
Donado a UCI ML: 27 de abril de 1987

📄 Resumen (Abstract)

El conjunto de datos de Clasificación de Hongos (Mushroom Classification) incluye descripciones de muestras hipotéticas correspondientes a 23 especies de hongos con branquias de las familias Agaricus y Lepiota, extraídas de The Audubon Society Field Guide to North American Mushrooms (1981). Cada especie está identificada como definitivamente comestible, definitivamente venenosa, o de comestibilidad desconocida (no recomendada). Esta última clase fue combinada con la clase venenosa. El objetivo es predecir si un hongo es comestible (e) o venenoso (p) basándose en 22 características morfológicas. La guía establece claramente que no existe una regla simple para determinar la comestibilidad de un hongo.

🍄 Contexto del Dominio

La identificación de hongos comestibles vs. venenosos es un problema de seguridad alimentaria y salud pública. La intoxicación por hongos puede causar desde molestias gastrointestinales hasta fallo hepático y muerte. Este dataset es importante porque:

  • Permite desarrollar modelos de clasificación para identificar hongos venenosos
  • Ayuda a entender qué características morfológicas son más indicativas de toxicidad
  • Es un dataset clásico en aprendizaje automático, utilizado en numerosas investigaciones
  • La recolección de hongos ("shrooming") está ganando popularidad, lo que hace que este dataset sea más relevante que nunca
⚠️ Advertencia

La guía establece claramente que no existe una regla simple para determinar la comestibilidad de un hongo. No existe una regla como "hojas de tres, déjala ser" para el roble venenoso y la hiedra. La identificación de hongos debe realizarse por expertos capacitados y nunca basarse únicamente en modelos predictivos.

📊 Descripción de Datos

El dataset contiene 8,124 instancias con 22 atributos (21 variables predictoras y 1 variable objetivo). Todas las características son de tipo categórico y no presentan valores faltantes.

📋 Variables del Dataset
Variable Descripción Categorías
A. Características Morfológicas
cap-shape Forma del sombrero bell=b, conical=c, convex=x, flat=f, knobbed=k, sunken=s
cap-surface Superficie del sombrero fibrous=f, grooves=g, scaly=y, smooth=s
cap-color Color del sombrero brown=n, buff=b, cinnamon=c, gray=g, green=r, pink=p, purple=u, red=e, white=w, yellow=y
bruises ¿Presenta moretones? bruises=t, no=f
odor Olor del hongo almond=a, anise=l, creosote=c, fishy=y, foul=f, musty=m, none=n, pungent=p, spicy=s
gill-attachment Unión de las láminas attached=a, descending=d, free=f, notched=n
gill-spacing Espaciado de las láminas close=c, crowded=w, distant=d
gill-size Tamaño de las láminas broad=b, narrow=n
gill-color Color de las láminas black=k, brown=n, buff=b, chocolate=h, gray=g, green=r, orange=o, pink=p, purple=u, red=e, white=w, yellow=y
stalk-shape Forma del tallo enlarging=e, tapering=t
stalk-root Raíz del tallo bulbous=b, club=c, cup=u, equal=e, rhizomorphs=z, rooted=r, missing=?
stalk-surface-above-ring Superficie del tallo (por encima del anillo) fibrous=f, scaly=y, silky=k, smooth=s
stalk-surface-below-ring Superficie del tallo (por debajo del anillo) fibrous=f, scaly=y, silky=k, smooth=s
stalk-color-above-ring Color del tallo (por encima del anillo) brown=n, buff=b, cinnamon=c, gray=g, orange=o, pink=p, red=e, white=w, yellow=y
stalk-color-below-ring Color del tallo (por debajo del anillo) brown=n, buff=b, cinnamon=c, gray=g, orange=o, pink=p, red=e, white=w, yellow=y
veil-type Tipo de velo partial=p, universal=u
veil-color Color del velo brown=n, orange=o, white=w, yellow=y
ring-number Número de anillos none=n, one=o, two=t
ring-type Tipo de anillo cobwebby=c, evanescent=e, flaring=f, large=l, none=n, pendant=p, sheathing=s, zone=z
spore-print-color Color de la impresión de esporas black=k, brown=n, buff=b, chocolate=h, green=r, orange=o, purple=u, white=w, yellow=y
population Población abundant=a, clustered=c, numerous=n, scattered=s, several=v, solitary=y
habitat Hábitat grasses=g, leaves=l, meadows=m, paths=p, urban=u, waste=w, woods=d
B. Variable Objetivo
class Comestibilidad del hongo e = comestible, p = venenoso

📋 Características del Dataset

  • Tipo de problema: Clasificación binaria (Comestible vs. Venenoso)
  • Dimensión: Multivariante (8,124 × 22)
  • Tipo de características: Categóricas (todas)
  • Valores faltantes: No (excepto stalk-root con '?' que representa valor faltante)
  • Área de aplicación: Botánica, Micología, Seguridad Alimentaria
  • Especies: 23 especies de hongos (Agaricus y Lepiota)
  • Clases: e (comestible) y p (venenoso)

⚖️ Ética y Privacidad

El conjunto de datos contiene características morfológicas de hongos y no incluye información personal identificable. Los datos son de dominio público y se utilizan exclusivamente para fines académicos y de investigación. 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. Se enfatiza que los modelos predictivos no deben utilizarse para identificar hongos en la vida real sin la supervisión de un experto micólogo.

📋 Notas de Uso

Este conjunto de datos es un clásico en clasificación categórica y es ideal para problemas de clasificación. Se recomienda:

  • La variable objetivo class está codificada como e = comestible y p = venenoso
  • Todas las características son categóricas y requieren codificación (One-Hot Encoding o Label Encoding)
  • La variable stalk-root contiene valores '?' que representan valores faltantes (aproximadamente 2,480 instancias)
  • La variable veil-type tiene un único valor (p) en todas las instancias, por lo que no aporta información y puede excluirse
  • El dataset está relativamente balanceado (aproximadamente 50% comestibles, 50% venenosos)
  • El olor (odor) es una de las características más discriminativas (algunos olores como almendra, anís o ninguno son típicos de comestibles)
  • La impresión de esporas (spore-print-color) es otra característica importante para la clasificación
  • Los modelos de Árboles de Decisión y Random Forest suelen funcionar muy bien en este dataset debido a la naturaleza categórica de los datos
  • El dataset es adecuado para aprendizaje automático interpretable (reglas de decisión)
  • No existe una regla simple para determinar la comestibilidad, lo que hace que este dataset sea un desafío interesante para el aprendizaje automático

💡 Importancia en Micología y Seguridad Alimentaria

La identificación correcta de hongos es crucial para la seguridad alimentaria. La intoxicación por hongos puede tener consecuencias graves:

  • La amanita phalloides (hongo de la muerte) es responsable de la mayoría de las muertes por intoxicación con hongos
  • Los síntomas de intoxicación pueden incluir náuseas, vómitos, diarrea, fallo hepático y muerte
  • La identificación errónea de hongos comestibles y venenosos es un problema común entre los recolectores aficionados

Este dataset ha sido utilizado en numerosas investigaciones sobre clasificación y ha contribuido al desarrollo de técnicas de aprendizaje automático interpretable. A pesar de su antigüedad, sigue siendo relevante para entender qué características morfológicas son más indicativas de toxicidad.

📖 Cómo citar la fuente original

Mushroom Classification Dataset. UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Mushroom

📚 Referencias Adicionales

  • UCI Machine Learning Repository - Mushroom Classification. https://archive.ics.uci.edu/ml/datasets/Mushroom
  • Lincoff, G. H. (1981). The Audubon Society Field Guide to North American Mushrooms. Alfred A. Knopf.
  • Schalkwijk-Barendsen, H. M. E. (1991). Mushrooms of Western Canada. Lone Pine Publishing.
  • Quinlan, J. R. (1993). C4.5: Programs for Machine Learning. Morgan Kaufmann. (Este dataset fue utilizado en el desarrollo de C4.5)

🔄 Transformaciones Aplicadas

Modificaciones realizadas al conjunto original (Mushroom Classification)

  • Limpieza inicial y eliminación de variables:
    • Eliminación de columnas constantes (varianza 0) que no aportan información predictiva, incluyendo veil-type (tipo de velo) que es constante en todo el dataset.
    • Reducción de la dimensionalidad del dataset para mejorar la eficiencia del modelo.
  • Transformación de la variable objetivo:
    • Renombramiento de class a is_poisonous para mayor claridad semántica.
    • Mapeo: 'p' (Poisonous - Venenoso) → 1 (Clase Positiva), 'e' (Edible - Comestible) → 0 (Clase Negativa).
    • Documentación del objetivo: clasificación de hongos comestibles vs venenosos.
  • Codificación de variables categóricas:
    • Transformación de 21 variables categóricas a valores numéricos mediante Label Encoding con sklearn.preprocessing.LabelEncoder.
    • Variables incluidas: cap-shape (forma del sombrero), cap-surface (superficie del sombrero), cap-color (color del sombrero), bruises (moretones), odor (olor), gill-attachment (fijación de laminillas), gill-spacing (espaciado de laminillas), gill-size (tamaño de laminillas), gill-color (color de laminillas), stalk-shape (forma del tallo), stalk-root (raíz del tallo), stalk-surface-above-ring, stalk-surface-below-ring, stalk-color-above-ring, stalk-color-below-ring, veil-color (color del velo), ring-number (número de anillos), ring-type (tipo de anillo), spore-print-color (color de esporas), population (población), habitat (hábitat).
    • Generación de mapeo completo (código → valor original) en la leyenda para todas las variables.
  • Submuestreo estratificado para reducción del dataset:
    • Reducción del dataset a 1,000 ejemplos representativos mediante muestreo estratificado.
    • Uso de train_test_split con parámetro stratify para preservar exactamente la proporción original de clases (desbalance de hongos venenosos vs comestibles).
    • Semilla fija (random_state=42) para garantizar reproducibilidad científica de la muestra.
    • Verificación de integridad con diferencia máxima < 1% en proporción de clases.
  • Generación de documentación completa:
    • Creación del archivo leyenda_mushrooms.txt con semántica completa de la variable objetivo y todas las variables predictoras.
    • Documentación de la variable is_poisonous (0 = Comestible, 1 = Venenoso).
    • Mapeo completo de 21 variables categóricas codificadas con sus valores originales.
    • Nota sobre eliminación de columnas constantes (veil-type).
    • Contextualización del dataset: clasificación de hongos del género Agaricus y Lepiota.
    • Estadísticas finales: total de instancias, distribución de clases y balance.
  • Preservación de la estructura y calidad de datos:
    • Mantenimiento de las 8,124 instancias (hongos) originales para el dataset completo.
    • Dataset reducido de 1,000 ejemplos estratificados para experimentación eficiente.
    • Dataset final con 21 variables predictoras (todas categóricas codificadas) y 1 variable objetivo binaria.
    • Guardado en formato CSV con separador punto y coma (;) para compatibilidad internacional.

📊 Resultado: Dataset de 8,124 especímenes de hongos (con versión reducida estratificada de 1,000 ejemplos) con 21 variables predictoras (todas categóricas codificadas: características morfológicas y de hábitat) y 1 variable objetivo binaria (is_poisonous). Desbalance equilibrado-preservado (~52% comestibles / ~48% venenosos) — 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 biológica y micología, donde las características morfológicas de los hongos son determinantes para distinguir especies comestibles de venenosas.

🍄 Fuente: Mushroom Classification Dataset (UCI Machine Learning Repository) - Datos de hongos del género Agaricus y Lepiota.

📊 Variables morfológicas: Forma del sombrero (cap-shape), superficie (cap-surface), color (cap-color), moretones (bruises), olor (odor) — el olor es uno de los predictores más importantes.

📋 Variables de laminillas y tallo: Fijación (gill-attachment), espaciado (gill-spacing), tamaño (gill-size), color (gill-color), forma del tallo (stalk-shape), raíz (stalk-root), superficies y colores del tallo.

🌍 Variables de hábitat: Población (population) y hábitat (habitat) — factores ecológicos de crecimiento.

📁 Leyenda disponible: Archivo leyenda_mushrooms.txt con mapeo completo de todas las variables categóricas codificadas.

🎯 Variable objetivo: is_poisonous (1 = Venenoso, 0 = Comestible).

🧹 Limpieza aplicada: Eliminación de columnas constantes (veil-type), renombrado de target, mapeo de target ('p'→1, 'e'→0), Label Encoding de 21 variables categóricas, reducción estratificada a 1,000 ejemplos.

📋 Diccionario de Datos Detallado

Variable Descripción Micológica Tipo Rango / Categorías Unidad ¿Objetivo?
cap-shape Forma del sombrero del hongo Categórico 0: Bell, 1: Conical, 2: Flat, 3: Knobbed, 4: Sunken, 5: Convex N/A No
cap-surface Superficie del sombrero Categórico 0: Fibrous, 1: Grooves, 2: Smooth, 3: Scaly N/A No
cap-color Color del sombrero Categórico 0: Buff, 1: Cinnamon, 2: Red, 3: Gray, 4: Brown, 5: Pink, 6: Purple, 7: Green, 8: White, 9: Yellow N/A No
bruises Magulladuras al tacto Categórico 0: No, 1: Sí N/A No
odor Olor del hongo (predictor más potente) Categórico 0: Almond, 1: Creosote, 2: Foul, 3: Anise, 4: Musty, 5: None, 6: Pungent, 7: Spicy, 8: Fishy N/A No
gill-attachment Inserción de las láminas Categórico 0: Attached (Adheridas), 1: Free (Libres) N/A No
gill-spacing Espaciado de las láminas Categórico 0: Close (Juntas), 1: Crowded (Apretadas) N/A No
gill-size Tamaño de las láminas Categórico 0: Broad (Anchas), 1: Narrow (Estrechas) N/A No
gill-color Color de las láminas Categórico 0: Buff, 1: Red, 2: Gray, 3: Chocolate, 4: Black, 5: Brown, 6: Orange, 7: Pink, 8: Purple, 9: Green, 10: White, 11: Yellow N/A No
stalk-shape Forma del tallo Categórico 0: Enlarging (Ensanchado), 1: Tapering (Ahusado) N/A No
stalk-root Raíz del tallo Categórico 0: Desconocido, 1: Bulbous (Bulbosa), 2: Club (En forma de maza), 3: Equal (Igual), 4: Rooted (Enraizada) N/A No
stalk-surface-above-ring Superficie del tallo por encima del anillo Categórico 0: Fibrous, 1: Silky, 2: Smooth, 3: Scaly N/A No
stalk-surface-below-ring Superficie del tallo por debajo del anillo Categórico 0: Fibrous, 1: Silky, 2: Smooth, 3: Scaly N/A No
stalk-color-above-ring Color del tallo por encima del anillo Categórico 0: Buff, 1: Cinnamon, 2: Red, 3: Gray, 4: Brown, 5: Orange, 6: Pink, 7: White, 8: Yellow N/A No
stalk-color-below-ring Color del tallo por debajo del anillo Categórico 0: Buff, 1: Cinnamon, 2: Red, 3: Gray, 4: Brown, 5: Orange, 6: Pink, 7: White, 8: Yellow N/A No
veil-color Color del velo (cortina parcial) Categórico 0: Brown, 1: Orange, 2: White, 3: Yellow N/A No
ring-number Número de anillos Categórico 0: None (Ninguno), 1: One (Uno), 2: Two (Dos) N/A No
ring-type Tipo de anillo Categórico 0: Evanescent (Evanescente), 1: Flaring (Abocinado), 2: Large (Grande), 3: None (Ninguno), 4: Pendant (Colgante) N/A No
spore-print-color Color de la impresión de esporas Categórico 0: Buff, 1: Chocolate, 2: Black, 3: Brown, 4: Orange, 5: Green, 6: Purple, 7: White, 8: Yellow N/A No
population Distribución poblacional del hongo Categórico 0: Abundant, 1: Clustered, 2: Numerous, 3: Scattered, 4: Several, 5: Solitary N/A No
habitat Hábitat del hongo Categórico 0: Woods, 1: Grasses, 2: Leaves, 3: Meadows, 4: Paths, 5: Urban, 6: Waste N/A No
is_poisonous Comestibilidad del hongo (objetivo) Binario 0: Comestible, 1: Venenoso N/A
22 Variables totales
0 Numéricas
21 Categóricas
1 Binarias
Objetivo: Venenoso (is_poisonous)
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 Clasificación de Hongos (Mushrooms). Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados de identificación de hongos comestibles y venenosos.

cap-shape Categórica
Código Significado (Original)
0b - Bell (Campana)
1c - Conical (Cónico)
2f - Flat (Plano)
3k - Knobbed (Con protuberancia)
4s - Sunken (Hundido)
5x - Convex (Convexo)
cap-surface Categórica
Código Significado (Original)
0f - Fibrous (Fibrosa)
1g - Grooves (Con surcos)
2s - Smooth (Lisa)
3y - Scaly (Escamosa)
cap-color Categórica
Código Significado (Original)
0b - Buff (Amarillo pálido)
1c - Cinnamon (Canela)
2e - Red (Rojo)
3g - Gray (Gris)
4n - Brown (Marrón)
5p - Pink (Rosa)
6r - Purple (Púrpura)
7u - Green (Verde)
8w - White (Blanco)
9y - Yellow (Amarillo)
bruises Binario
Código Significado (Original)
0f - No (No tiene magulladuras)
1t - Yes (Tiene magulladuras)
odor Categórica

⚠️ El predictor más potente para detectar venenosos

Código Significado (Original) Comestibilidad
0a - Almond (Almendra)✓ Comestible
1c - Creosote (Creosota)✗ Venenoso
2f - Foul (Fétido)✗ Venenoso
3l - Anise (Anís)✓ Comestible
4m - Musty (Mohoso)✗ Venenoso
5n - None (Ninguno)✓ Comestible
6p - Pungent (Pungente)✗ Venenoso
7s - Spicy (Picante)✓ Comestible
8y - Fishy (A pescado)✗ Venenoso
🚨

Regla clave: Olores como Almond (0), Anise (3), None (5) y Spicy (7) son típicamente comestibles.

gill-attachment Binario
Código Significado (Original)
0a - Attached (Adheridas al tallo)
1f - Free (Libres, sin adherir)
gill-spacing Binario
Código Significado (Original)
0c - Close (Juntas)
1w - Crowded (Apretadas)
gill-size Binario
Código Significado (Original)
0b - Broad (Anchas)
1n - Narrow (Estrechas)
gill-color Categórica
Código Significado (Original)
0b - Buff
1e - Red
2g - Gray
3h - Chocolate
4k - Black
5n - Brown
6o - Orange
7p - Pink
8r - Purple
9u - Green
10w - White
11y - Yellow
stalk-shape Binario
Código Significado (Original)
0e - Enlarging (Ensanchado hacia la base)
1t - Tapering (Ahusado)
stalk-root Categórica
Código Significado (Original)
0? - Unknown (Desconocido)
1b - Bulbous (Bulbosa)
2c - Club (En forma de maza)
3e - Equal (Igual)
4r - Rooted (Enraizada)
⚠️

Nota: El código 0 corresponde a valores originales "?" (desconocidos).

stalk-surface-above-ring y stalk-surface-below-ring Categórica
Código Significado (Original)
0f - Fibrous (Fibrosa)
1k - Silky (Sedosa)
2s - Smooth (Lisa)
3y - Scaly (Escamosa)
stalk-color-above-ring y stalk-color-below-ring Categórica
Código Significado (Original)
0b - Buff
1c - Cinnamon
2e - Red
3g - Gray
4n - Brown
5o - Orange
6p - Pink
7w - White
8y - Yellow
veil-color Categórica
Código Significado (Original)
0n - Brown
1o - Orange
2w - White
3y - Yellow
ring-number Categórica
Código Significado (Original)
0n - None (Ninguno)
1o - One (Uno)
2t - Two (Dos)
ring-type Categórica
Código Significado (Original)
0e - Evanescent (Evanescente)
1f - Flaring (Abocinado)
2l - Large (Grande)
3n - None (Ninguno)
4p - Pendant (Colgante)
spore-print-color Categórica
Código Significado (Original)
0b - Buff
1h - Chocolate
2k - Black
3n - Brown
4o - Orange
5r - Green
6u - Purple
7w - White
8y - Yellow
population Categórica
Código Significado (Original)
0a - Abundant (Abundante)
1c - Clustered (Agrupado)
2n - Numerous (Numeroso)
3s - Scattered (Disperso)
4v - Several (Varios)
5y - Solitary (Solitario)
habitat Categórica
Código Significado (Original)
0d - Woods (Bosque)
1g - Grasses (Pastizales)
2l - Leaves (Hojarasca)
3m - Meadows (Prados)
4p - Paths (Caminos)
5u - Urban (Urbano)
6w - Waste (Terreno baldío)
is_poisonous 🎯 Objetivo
Código Significado
0 Edible (Comestible) - Hongo seguro para consumir (~52%)
1 Poisonous (Venenoso) - Hongo tóxico (~48%)
🎯

Variable Objetivo: Clasifica la comestibilidad del hongo basado en 21 características morfológicas.

💡

Regla clave: El odor (olor) es el predictor más potente. Olores como Almond (0) o None (5) son típicos de comestibles.

📊
Variables categóricas: 21
  • cap-shape (6 categorías)
  • cap-surface (4 categorías)
  • cap-color (10 categorías)
  • bruises (2 categorías - binario)
  • odor (9 categorías - predictor clave)
  • gill-attachment (2 categorías - binario)
  • gill-spacing (2 categorías - binario)
  • gill-size (2 categorías - binario)
  • gill-color (12 categorías)
  • stalk-shape (2 categorías - binario)
  • stalk-root (5 categorías)
  • stalk-surface-above-ring (4 categorías)
  • stalk-surface-below-ring (4 categorías)
  • stalk-color-above-ring (9 categorías)
  • stalk-color-below-ring (9 categorías)
  • veil-color (4 categorías)
  • ring-number (3 categorías)
  • ring-type (5 categorías)
  • spore-print-color (9 categorías)
  • population (6 categorías)
  • habitat (7 categorías)
🎯
Variables binarias: 1
  • 🎯 is_poisonous (Objetivo - Comestible/Venenoso)
⚠️
Recomendaciones de Identificación:
  • Predictor clave: odor - Olores Foul (2), Musty (4), Pungent (6), Fishy (8) son venenosos
  • Olores seguros: Almond (0), Anise (3), None (5), Spicy (7) son comestibles
  • Color de esporas: spore-print-color es muy discriminante
  • Magulladuras: bruises = 1 es un indicador importante
  • Variable eliminada: veil-type fue removida por ser constante
  • Dataset famoso: Permite precisión del 100% con reglas simples basadas en olor

🔬 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

  • odor == 2 (Fétido) → is_poisonous = 1
  • odor == 1 (Creosota, almendra, pimentón, sulfuroso) → is_poisonous = 1
  • odor == 0 (Anís, almendra) → is_poisonous = 0
  • spore-print-color == 5 (Verde) → is_poisonous = 1
  • spore-print-color == 1 (Chocolate) → is_poisonous = 0
  • gill-color == 0 (Buff) → is_poisonous = 1
  • gill-size == 1 (Estrechas) → is_poisonous = 1
  • gill-size == 0 (Anchas) → is_poisonous = 0
  • ring-type == 2 (Grande) → is_poisonous = 1
  • bruises == 0 → gill-spacing = 1 (Sin magulladuras → agallas juntas)
  • stalk-surface-above-ring == 1 (Sedoso) → is_poisonous = 1
  • stalk-surface-above-ring == 0 (Fibroso) → is_poisonous = 0
  • population == 1 (Agrupada) → is_poisonous = 1
  • population == 0 (Abundante/Numerosa) → is_poisonous = 0
  • is_poisonous == 1 → odor ≠ 0 (Venenoso → olor no anís)
  • odor y gill-size son mutuamente excluyentes
  • gill-color y gill-size son mutuamente excluyentes
  • stalk-color-above-ring == 7 → stalk-color-below-ring = 7 (Color consistente)
  • ring-number == 0 → ring-type = 3 (Sin anillo → tipo ausente)
  • gill-attachment == 1 → gill-spacing = 0

⚙️ 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 - - - - - - - - - - - - - -
Smote - - - - - - - - - - - - - -
Borderline SMOTE - - - - - - - - - - - - - -
ADASYN - - - - - - - - - - - - - -
SMOTE RSB* Adaptado - - - - - - - - - - - - - -
SMOTE RSB* Adaptado + Reglas - - - - - - - - - - - - - -
OOF PSO para Balanceo - - - - - - - - - - - - - -
OOF PSO para Balanceo + Reglas - - - - - - - - - - - - - -
Mejor seleccionado: Sin datos disponibles (TabDSFidelity: -, AUC: -, F1: -, MIA: -). 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.035 3000 0.895 0.885 0.885 5.434 - - 0.418 0.839 42.265 0.495 0 0.466
SMOTE RSB* + Ruido Gaussiano + Reglas 1.020 3000 0.713 0.650 0.650 0.768 - - 1.820 0.828 118.632 0.503 0 0.539
CTGAN 1.386 9023 0.920 0.894 0.895 6.246 - - 0.040 0.926 450.921 0.176 0 0.474
CTGAN + Reglas del Dominio 1.017 9023 0.855 0.779 0.780 3.613 - - 1.481 0.877 570.915 0.232 0 0.474
TVAE 1.230 4739 1.000 0.995 0.995 8.000 - - 0.021 0.933 167.292 0.103 0 0.447 🏆
TVAE + Reglas del Dominio 1.210 4739 0.892 0.845 0.845 4.672 - - 1.475 0.886 270.923 0.180 0 0.478
OOF PSO para Aumento 1 10000 0.932 0.863 0.865 4.639 - - 0.869 0.686 101.292 0.424 0 0.479
OOF PSO para Aumento + Reglas 2.503 10000 0.894 0.790 0.790 2.914 - - 2.301 0.694 218.311 0.490 0 0.473
SMOTE RSB* Refinado 1 3000 0.897 0.885 0.885 5.459 - - 0.422 0.843 57.113 0.493 0 0.492
SMOTE RSB* Refinado + Reglas 1.020 3000 0.807 0.725 0.725 2.300 - - 1.828 0.830 155.910 0.503 0 0.534
Mejor seleccionado: TVAE (TabDSFidelity: 8.000, AUC: 1.000, F1: 0.995, MIA: 0.447). 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.045 4000 1.000 1.000 1.000 1.377 - - 0.245 0.868 80.998 0.373 496 0.450
SMOTE RSB* + Ruido Gaussiano + Reglas 1.034 4000 1.000 1.000 1.000 1.231 - - 0.316 0.855 159.281 0.379 496 0.458
CTGAN 1.351 10023 1.000 1.000 1.000 1.930 - - 0.033 0.933 512.128 0.157 209 0.454
CTGAN + Reglas del Dominio 1.008 10023 1.000 1.000 1.000 1.530 - - 0.193 0.886 630.570 0.207 209 0.463
TVAE 1.201 5739 1.000 1.000 1.000 2.000 - - 0.014 0.945 219.229 0.085 378 0.450 🏆
TVAE + Reglas del Dominio 1.156 5739 1.000 1.000 1.000 1.683 - - 0.138 0.906 323.494 0.146 378 0.463
OOF PSO para Aumento 1.007 11000 1.000 1.000 1.000 0.186 - - 0.652 0.704 161.048 0.383 186 0.446
OOF PSO para Aumento + Reglas 2.261 11000 1.000 1.000 1.000 0.042 - - 0.798 0.714 277.407 0.444 186 0.434
SMOTE RSB* Refinado 1.018 4000 1.000 1.000 1.000 1.384 - - 0.247 0.870 107.385 0.370 496 0.439
SMOTE RSB* Refinado + Reglas 1.034 4000 1.000 1.000 1.000 1.233 - - 0.320 0.857 205.082 0.378 496 0.454
Mejor seleccionado: TVAE (TabDSFidelity: 2.000, AUC: 1.000, F1: 1.000, MIA: 0.450). Nota: Ratio <= 1.5 = Conjunto Balanceado.

📈 Diagrama del Proceso de Generación

Conjunto Original
CD_53
Balanceo
(8 métodos)
↓ Selección por TabDSFidelity
⭐ Mejor Balanceado
----
Generación Sintética
(10 métodos)
↓ Evaluación TabDSFidelity
⭐ Mejor Sintético
TVAE
⭐ Mejor Aumentado
TVAE
Conjunto Sintético Final
Seleccionado por calidad

📊 Guía de Métricas de Evaluación

Para interpretar correctamente los resultados de los conjuntos de datos generados, es fundamental comprender qué mide cada métrica y cómo se relacionan entre sí. A continuación, se detalla cada una de las métricas utilizadas en la evaluación:

🎯 Métricas de Rendimiento Predictivo

AUC-ROC (0.5 - 1.0)

¿Qué mide? Capacidad del modelo para distinguir entre clases (Ej: mortalidad vs supervivencia).

Interpretación:

  • 0.5: Sin capacidad predictiva (aleatorio)
  • 0.7-0.8: Aceptable
  • 0.8-0.9: Excelente
  • >0.9: Sobresaliente

Ejemplo: AUC-ROC = 0.82 significa que hay un 82% de probabilidad de que el modelo clasifique correctamente un paciente fallecido frente a uno superviviente.

F1-Score (0 - 1.0)

¿Qué mide? Media armónica entre precisión y sensibilidad (recall).

Interpretación:

  • 0.7-0.8: Buen equilibrio entre precisión y sensibilidad
  • 0.8-0.9: Muy buen equilibrio
  • >0.9: Excelente equilibrio

Ejemplo: F1 = 0.76 indica que el modelo mantiene un buen balance entre identificar correctamente a los pacientes que fallecen (sensibilidad) y no etiquetar erróneamente a los que sobreviven (precisión).

Accuracy (0 - 1.0)

¿Qué mide? Proporción de predicciones correctas sobre el total.

Interpretación:

  • 0.7-0.8: Buen rendimiento general
  • 0.8-0.9: Muy buen rendimiento
  • >0.9: Excelente rendimiento

Ejemplo: Accuracy = 0.75 significa que el 75% de las predicciones del modelo son correctas.

⚠️ Nota: En conjuntos desbalanceados, esta métrica puede ser engañosa. Es mejor usar F1-Score o AUC-ROC.

🔬 Índice de Fidelidad del Conjunto

TabDSFidelity (0 - 10+)

¿Qué mide? Calidad global del conjunto sintético comparado con el original.

Interpretación:

  • < 3.0: Baja fidelidad (poca similitud con el original)
  • 3.0 - 6.0: Fidelidad moderada
  • 6.0 - 8.0: Alta fidelidad
  • > 8.0: Muy alta fidelidad (excelente representación)

Ejemplo: TabDSFidelity = 8.08 indica que el conjunto sintético mantiene una alta similitud con el original, preservando las relaciones y distribuciones de los datos reales, además de maximizar su eficacia predictiva.

💡 Importante: Este es el índice para seleccionar el mejor conjunto de datos sintéticos. Para este caso, el peso empleado para las métricas "AUC-ROC", "F1-Score" y "Accuracy" fue (2) y para el resto de las métricas fue (1).

📊 Métricas de Similitud de Distribuciones

Jensen-Shannon (Promedio) (0 - 1.0)

¿Qué mide? Similitud entre las distribuciones de variables numéricas del conjunto sintético y el original.

Interpretación:

  • Cerca de 0: Distribuciones muy similares (ideal)
  • 0.1 - 0.3: Diferencias moderadas
  • > 0.3: Diferencias significativas

Ejemplo: JS = 0.118 indica que las distribuciones de las variables numéricas (edad, presión arterial, etc.) son bastante similares a las del conjunto original.

📌 Nota: Es el promedio de la divergencia de Jensen-Shannon calculada para todas las variables numéricas.

Kolmogorov-Smirnov (p-valor promedio) (0 - 1.0)

¿Qué mide? Probabilidad estadística de que las muestras numéricas del conjunto sintético provengan de la misma distribución continua que el original.

Interpretación:

  • Cerca de 1.0: Altísima probabilidad de que sean la misma distribución (ideal)
  • > 0.05: Similitud aceptable (no se rechaza que sean iguales)
  • < 0.05: Diferencias estadísticamente significativas

Ejemplo: KS p-valor = 0.753 indica que hay evidencia fuerte a favor de que las distribuciones acumulativas de la variable sintética y la original son equivalentes.

📌 Nota: Se reporta el promedio de los p-valores obtenidos mediante la prueba de Kolmogorov-Smirnov de dos muestras para las variables numéricas.

Kullback-Leibler (Promedio) (0 - ∞)

¿Qué mide? Divergencia entre las distribuciones de variables categóricas del conjunto sintético y el original.

Interpretación:

  • Cerca de 0: Distribuciones muy similares (ideal)
  • 0.01 - 0.1: Diferencias pequeñas
  • > 0.1: Diferencias notables

Ejemplo: KL = 0.014 indica que la distribución de las variables categóricas (género, mortalidad) es muy similar a la del conjunto original.

📌 Nota: Es el promedio de la divergencia de Kullback-Leibler para todas las variables categóricas. A diferencia de JS y KS, esta métrica se aplica solo a variables categóricas.

📊 Métricas de Estructura

Similitud de Correlación (0 - 1.0)

¿Qué mide? Preservación de las relaciones entre variables del conjunto original.

Interpretación:

  • Cerca de 1.0: Las relaciones entre variables se mantienen casi idénticas
  • > 0.9: Excelente preservación de relaciones
  • 0.7 - 0.9: Buena preservación
  • < 0.7: Pérdida significativa de relaciones

Ejemplo: Correlación = 0.976 significa que las relaciones entre variables (ej. edad y mortalidad) se mantienen en un 97.6% respecto al conjunto original.

⏱️ Métricas de Rendimiento Temporal

Tiempo Total (s) (segundos)

¿Qué mide? Tiempo total de ejecución del proceso de generación del conjunto.

Interpretación:

  • < 100s: Generación rápida
  • 100-300s: Tiempo moderado
  • > 300s: Proceso lento (puede ser aceptable para conjuntos grandes)

Ejemplo: Tiempo total = 69.45s significa que el proceso completo de generación del conjunto balanceado tomó aproximadamente 1.16 minutos.

⏱️ Nota: Incluye el tiempo de generación sintética + cálculo de métricas.

🔒 Métricas de Privacidad

Estas métricas evalúan el riesgo de exposición de información sensible y la capacidad de un atacante para inferir datos de los pacientes a partir del conjunto de datos sintéticos.

Distancia al Registro Más Cercano (≥ 0)

¿Qué mide? La distancia promedio entre cada registro sintético y su registro más cercano en el conjunto de datos original.

Interpretación:

  • Cerca de 0: Los datos sintéticos son muy similares a los originales → ⚠️ ALTO RIESGO de privacidad
  • 0.01 - 0.05: Similaridad moderada → Riesgo moderado
  • > 0.05: Buena separación de los datos originales → ✅ BAJO RIESGO de privacidad

Ejemplo: Distancia promedio = 0.015 en SMOTE indica que los registros sintéticos están relativamente cerca de los originales, lo que podría implicar un riesgo de privacidad moderado.

🔬

Metodología: Calculada utilizando la Distancia de Gower, la cual maneja internamente tipos de datos mixtos, normalizando las variables numéricas y penalizando diferencias categóricas para devolver un índice estandarizado entre 0 y 1.

💡

Recomendación: Valores < 0.01 deben ser evaluados con precaución. Idealmente, buscar valores > 0.02 para garantizar la privacidad.

Copias Exactas (≥ 0)

¿Qué mide? Número de registros sintéticos que son copias idénticas de registros en el conjunto de datos original.

Interpretación:

  • 0: Ninguna copia exacta → ✅ SEGURO
  • 1 - 10: Pocas copias → Riesgo bajo
  • 11 - 50: Copias moderadas → ⚠️ RIESGO MODERADO
  • > 50: Muchas copias → 🔴 ALTO RIESGO de reidentificación

Ejemplo: SMOTE RSB* Refinado genera 76 copias exactas de 8817 registros (0.86%), lo que representa un riesgo de privacidad que debe ser evaluado.

⚠️

Importante: La presencia de copias exactas es uno de los indicadores más críticos de fuga de datos. Idealmente, este valor debe ser 0.

Ataque de Inferencia de Membresía (MIA) (0 - 1.0)

¿Qué mide? Tasa de éxito (medida en AUC-ROC) de un atacante para determinar si un registro específico pertenece al conjunto de datos original.

Interpretación:

  • 0.5: Aleatorio (ideal) → ✅ PRIVACIDAD ÓPTIMA
  • 0.5 - 0.55: Riesgo bajo
  • 0.55 - 0.6: Riesgo moderado → ⚠️ PRIVACIDAD CUESTIONABLE
  • > 0.6: Riesgo alto → 🔴 PRIVACIDAD COMPROMETIDA

Ejemplo: MIA = 0.553 significa que el atacante tiene un éxito ligeramente superior al 50% aleatorio, lo que indica un riesgo de privacidad bajo/moderado.

🎯

Objetivo: Buscar valores lo más cercanos a 0.5. Valores > 0.6 indican que el conjunto sintético no protege adecuadamente la privacidad.

📝 Resumen Rápido para Selección

🏆
Para seleccionar el mejor conjunto:
  • Priorizar TabDSFidelity más alto
  • Buscar AUC-ROC y F1 altos
  • Valores de divergencia JS y KL cercanos a 0
  • P-valor de KS lo más cercano a 1.0 posible (>0.05)
  • Correlación > 0.9
⚖️
Balance entre calidad y tiempo:
  • Un TabDSFidelity > 8.0 indica excelente calidad
  • Tiempos de generación < 200s son aceptables
  • La Correlación > 0.95 asegura buena preservación de relaciones
🔒
Para garantizar la privacidad:
  • MIA lo más cercano a 0.5 (ideal)
  • Copias exactas = 0 (ideal) o lo más bajo posible
  • Distancia promedio > 0.02 para buena separación
  • Evaluar balance entre calidad (TabDSFidelity) y privacidad (MIA)

📥 Descargar conjuntos y código Python

Formatos incluidos: CSV.

📚 Cómo citar este conjunto

Díaz Bastida, M., Pérez Vázquez, R. A., & Bello Pérez, R. (2026). High-Fidelity Synthetic Dataset for Mushroom Edibility Classification (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32946821.v1