Conjunto de datos de ondas cerebrales (EEG) para detectar si una persona tiene los ojos abiertos o cerrados. Al ser una grabación continua de 14 sensores, los datos mantienen un orden temporal estricto (como los fotogramas de un video). Integra lecturas de 14 electrodos con alta autocorrelación.
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.66 | 0.73 | 0.69 | 110 |
| Clase 1 | 0.62 | 0.54 | 0.58 | 90 |
| Accuracy | 0.65 | |||
| Macro Avg | 0.64 | 0.64 | 0.64 | 200 |
| Weighted Avg | 0.64 | 0.65 | 0.64 | 200 |
| Clase | Precisión | Recall | F1-Score | Soporte |
|---|---|---|---|---|
| Clase 0 | 1.00 | 0.98 | 0.99 | 110 |
| Clase 1 | 0.98 ⬆ +0.36 | 1.00 ⬆ +0.46 | 0.99 ⬆ +0.41 | 90 |
| Accuracy | 0.99 ⬆ +0.34 | |||
| Macro Avg | 0.99 ⬆ +0.35 | 0.99 ⬆ +0.35 | 0.99 ⬆ +0.35 | 200 |
| Weighted Avg | 0.99 ⬆ +0.35 | 0.99 ⬆ +0.34 | 0.99 ⬆ +0.35 | 200 |
El conjunto de datos de Estado Ocular por EEG (EEG Eye State) consiste en 14,980 valores de EEG y un valor que indica el estado del ojo (abierto o cerrado). Todos los datos provienen de una medición EEG continua con el Emotiv EEG Neuroheadset con una duración de 117 segundos. El estado del ojo fue detectado mediante una cámara durante la medición EEG y agregado manualmente al archivo después de analizar los fotogramas del video. 1 indica el estado ojo cerrado y 0 el estado ojo abierto. Todos los valores están en orden cronológico con el primer valor medido al inicio del archivo.
La electroencefalografía (EEG) es una técnica no invasiva que registra la actividad eléctrica del cerebro mediante electrodos colocados en el cuero cabelludo. El Emotiv EEG Neuroheadset es un dispositivo de EEG portátil y de bajo costo que permite la captura de señales cerebrales en entornos no clínicos. La detección del estado ocular (ojos abiertos vs. cerrados) mediante EEG es un problema clásico en el procesamiento de señales cerebrales que tiene aplicaciones en:
La actividad EEG cambia significativamente cuando los ojos están cerrados, con un aumento en la actividad alfa (8-13 Hz) en las regiones occipitales del cerebro. Este dataset captura este fenómeno y permite entrenar modelos para clasificar el estado ocular basándose únicamente en señales EEG.
El dataset contiene 14,980 instancias con 14 atributos (13 canales EEG y 1 variable objetivo). Las características son de tipo numérico (real) y no presentan valores faltantes. Los datos están en orden cronológico, representando una serie temporal continua.
Los 13 canales EEG corresponden a la ubicación de los electrodos según el Sistema Internacional 10-20:
| Variable | Tipo | Descripción | Unidades |
|---|---|---|---|
| A. Canales EEG (13 características) | |||
| AF3 | Continuo | Actividad eléctrica en AF3 | μV |
| F7 | Continuo | Actividad eléctrica en F7 | μV |
| F3 | Continuo | Actividad eléctrica en F3 | μV |
| FC5 | Continuo | Actividad eléctrica en FC5 | μV |
| T7 | Continuo | Actividad eléctrica en T7 | μV |
| P7 | Continuo | Actividad eléctrica en P7 | μV |
| O1 | Continuo | Actividad eléctrica en O1 | μV |
| O2 | Continuo | Actividad eléctrica en O2 | μV |
| P8 | Continuo | Actividad eléctrica en P8 | μV |
| T8 | Continuo | Actividad eléctrica en T8 | μV |
| FC6 | Continuo | Actividad eléctrica en FC6 | μV |
| F4 | Continuo | Actividad eléctrica en F4 | μV |
| F8 | Continuo | Actividad eléctrica en F8 | μV |
| AF4 | Continuo | Actividad eléctrica en AF4 | μV |
| B. Variable Objetivo | |||
| eyeDetection | Binaria (Target) | Estado del ojo (detectado por cámara) | 1 = Cerrado, 0 = Abierto |
El conjunto de datos contiene señales EEG anonimizadas que no contienen información personal identificable. La medición se realizó en un entorno de investigación con el consentimiento del participante. 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 del participante.
Este conjunto de datos es ideal para clasificación de series temporales y detección de estado ocular. Se recomienda:
La detección del estado ocular mediante EEG es un problema fundamental en neurociencia y sistemas BCI. La actividad cerebral cambia significativamente entre estados de ojos abiertos y cerrados:
Este dataset es particularmente valioso porque utiliza un dispositivo EEG de bajo costo (Emotiv) y proporciona datos etiquetados mediante grabación de video, lo que permite el desarrollo de modelos de clasificación robustos para aplicaciones prácticas de BCI.
EEG Eye State Dataset. UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/EEG+Eye+State
pd.to_numeric(..., errors='coerce') para manejar valores no numéricos.train_test_split con parámetro stratify para preservar exactamente la proporción original de clases (desbalance de estado ocular).📊 Resultado: Dataset de 14,980 muestras de EEG (con versión reducida estratificada de 1,000 ejemplos) con 14 variables predictoras (señales de sensores EEG en sistema 10-20) y 1 variable objetivo binaria (eyeDetection). Desbalance moderado-preservado (~56% ojos cerrados / ~44% ojos abiertos) — escenario ideal para validación de técnicas de generación de datos sintéticos y evaluación del índice TabDSFidelity en contextos de señales biomédicas y análisis de electroencefalografía (EEG), donde la detección de estados oculares y la monitorización de actividad cerebral tienen aplicaciones en interfaces cerebro-computadora (BCI) y estudios de sueño/vigilia.
🧠 Fuente: EEG Eye State Dataset (UCI Machine Learning Repository) - Datos de electroencefalografía para detección de estado ocular.
📊 Sensores EEG (sistema 10-20): 14 electrodos distribuidos en regiones frontales (AF3, AF4, F7, F8, F3, F4, FC5, FC6), temporales (T7, T8), parietales (P7, P8) y occipitales (O1, O2).
⏱️ Naturaleza temporal: Datos secuenciales de 117 segundos continuos de registro EEG, con muestras individuales representando instantes de tiempo.
📁 Leyenda disponible: Archivo leyenda_eeg_eye_state.txt con descripción completa de la variable objetivo y la ubicación de los sensores EEG.
🎯 Variable objetivo: eyeDetection (1 = Ojos Cerrados, 0 = Ojos Abiertos).
🧹 Limpieza aplicada: Lectura manual de ARFF, conversión de sensores a float, conversión de target a int, eliminación de filas con nulos, reducción estratificada a 1,000 ejemplos.
| Variable | Descripción del Sensor EEG | Tipo | Rango / Categorías | Unidad | ¿Objetivo? |
|---|---|---|---|---|---|
AF3 |
Electrodo AF3 - Pre-frontal izquierdo | Numérico | 4,210.77 - 4,462.05 | μV | No |
AF4 |
Electrodo AF4 - Pre-frontal derecho | Numérico | 4,258.97 - 4,529.23 | μV | No |
F7 |
Electrodo F7 - Frontal izquierdo | Numérico | 3,929.74 - 4,136.92 | μV | No |
F3 |
Electrodo F3 - Frontal izquierdo | Numérico | 4,211.28 - 4,373.85 | μV | No |
F4 |
Electrodo F4 - Frontal derecho | Numérico | 4,228.21 - 4,380 | μV | No |
F8 |
Electrodo F8 - Frontal derecho | Numérico | 4,450.26 - 4,768.72 | μV | No |
FC5 |
Electrodo FC5 - Fronto-central izquierdo | Numérico | 4,072.82 - 4,232.31 | μV | No |
FC6 |
Electrodo FC6 - Fronto-central derecho | Numérico | 4,109.23 - 4,305.13 | μV | No |
T7 |
Electrodo T7 - Temporal izquierdo | Numérico | 4,310.26 - 4,442.05 | μV | No |
T8 |
Electrodo T8 - Temporal derecho | Numérico | 4,165.64 - 4,331.28 | μV | No |
P7 |
Electrodo P7 - Parietal izquierdo | Numérico | 4,570.26 - 4,747.69 | μV | No |
P8 |
Electrodo P8 - Parietal derecho | Numérico | 4,153.85 - 4,297.44 | μV | No |
O1 |
Electrodo O1 - Occipital izquierdo | Numérico | 4,032.82 - 4,163.59 | μV | No |
O2 |
Electrodo O2 - Occipital derecho | Numérico | 4,567.18 - 4,714.87 | μV | No |
eyeDetection |
Estado ocular (objetivo) | Binario | 0: Ojos abiertos, 1: Ojos cerrados | 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 Estado Ocular por EEG. Comprender estas codificaciones es fundamental para la correcta interpretación de los resultados de clasificación de señales cerebrales.
eyeDetection
🎯 Objetivo
| Código | Significado |
|---|---|
| 0 | Ojos Abiertos (Eye Open) - Clase mayoritaria (~55.1%) |
| 1 | Ojos Cerrados (Eye Closed) - Clase minoritaria (~44.9%) |
Variable Objetivo: Clasifica el estado ocular del sujeto basado en la amplitud de señales EEG de 14 electrodos.
Naturaleza temporal: Los datos son una serie temporal continua de 117 segundos. Existe autocorrelación temporal.
Formato: 0 = Ojos abiertos, 1 = Ojos cerrados
eyeDetection
🎯 Variable Objetivo: Estado ocular (0: Abiertos, 1: Cerrados)
Nota: Única variable binaria en el dataset.
eyeDetection == 1 → O1 > 4500eyeDetection == 1 → O2 > 4500eyeDetection == 0 → O1 < 4450eyeDetection == 0 → O2 < 4450O1 < 4100 → eyeDetection = 0AF3 > 4400 → AF4 > 4200AF3 < 4100 → AF4 < 4300T7 > 4400 → T8 > 4100T7 < 4200 → T8 < 4300P7 > 4600 → P8 > 4300O1 > 4600 → O2 > 4400F7 > 4100 → T7 > 4200F8 > 4600 → T8 > 4200AF3 > 4400 → O1 > 4400eyeDetection == 1 → (P7 > 4550) OR (P8 > 4550) OR (O1 > 4550) OR (O2 > 4550)| 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 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| Smote | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| Borderline SMOTE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| ADASYN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| SMOTE RSB* Adaptado | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| SMOTE RSB* Adaptado + Reglas | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| OOF PSO para Balanceo | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
| OOF PSO para Balanceo + Reglas | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| Algoritmo | Ratio | N° Ejemplos | AUC-ROC | F1 | Accuracy | TabDSFidelity | Jensen-Shannon | Kolmogorov-Smirnov | Kullback-Leibler | Correlación | Tiempo Total (s) | Dist. Promedio | Copias Exactas | Ataque MIA | Mejor |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SMOTE RSB* + Ruido Gaussiano | 1.227 | 7277 | 0.910 | 0.721 | 0.720 | 5.538 | 0.770 | 0.840 | 0.000 | 0.993 | 80.278 | 0.074 | 0 | 0.451 | |
| SMOTE RSB* + Ruido Gaussiano + Reglas | 15.729 | 7277 | 0.556 | 0.484 | 0.585 | 2.475 | 0.770 | 0.840 | 0.611 | 0.961 | 216.591 | 0.074 | 0 | 0.452 | |
| CTGAN | 1.035 | 10000 | 0.638 | 0.600 | 0.600 | 2.767 | 0.338 | 0.010 | 0.004 | 0.713 | 557.664 | 0.061 | 0 | 0.518 | |
| CTGAN + Reglas del Dominio | 90.743 | 10000 | 0.577 | 0.401 | 0.555 | 1.623 | 0.338 | 0.010 | 1.347 | 0.717 | 712.190 | 0.061 | 0 | 0.453 | |
| TVAE | 1.305 | 10000 | 0.797 | 0.727 | 0.730 | 3.882 | 0.806 | 0.039 | 0.000 | 0.886 | 219.574 | 0.036 | 0 | 0.484 | |
| TVAE + Reglas del Dominio | 20.834 | 10000 | 0.576 | 0.464 | 0.585 | 1.309 | 0.806 | 0.039 | 0.722 | 0.867 | 377.118 | 0.036 | 0 | 0.435 | |
| OOF PSO para Aumento | 1 | 10000 | 0.619 | 0.488 | 0.560 | 0.599 | 0.828 | 0.000 | 0.005 | 0.424 | 137.692 | 0.286 | 0 | 0.460 | |
| OOF PSO para Aumento + Reglas | 8.363 | 10000 | 0.595 | 0.428 | 0.560 | 0.340 | 0.828 | 0.000 | 0.379 | 0.453 | 310.989 | 0.287 | 0 | 0.499 | |
| SMOTE RSB* Refinado | 1 | 7000 | 1.000 | 0.995 | 0.995 | 7.961 | 0.813 | 0.785 | 0.005 | 0.991 | 75.204 | 0.010 | 0 | 0.437 | 🏆 |
| SMOTE RSB* Refinado + Reglas | 13.257 | 7000 | 0.558 | 0.512 | 0.610 | 2.536 | 0.813 | 0.785 | 0.545 | 0.958 | 208.350 | 0.020 | 0 | 0.458 |
| 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.227 | 8277 | 0.997 | 0.970 | 0.970 | 5.845 | 0.673 | 0.914 | 0.000 | 0.994 | 153.845 | 0.073 | 0 | 0.430 | |
| SMOTE RSB* + Ruido Gaussiano + Reglas | 8.363 | 8277 | 0.996 | 0.882 | 0.885 | 2.096 | 0.673 | 0.914 | 0.379 | 0.973 | 292.075 | 0.073 | 0 | 0.434 | |
| CTGAN | 1.051 | 11000 | 1.000 | 1.000 | 1.000 | 7.556 | 0.311 | 0.017 | 0.003 | 0.735 | 641.932 | 0.056 | 186 | 0.470 | |
| CTGAN + Reglas del Dominio | 18.713 | 11000 | 1.000 | 1.000 | 1.000 | 7.566 | 0.311 | 0.017 | 0.679 | 0.741 | 791.891 | 0.055 | 186 | 0.426 | |
| TVAE | 1.298 | 11000 | 1.000 | 1.000 | 1.000 | 6.924 | 0.718 | 0.063 | 0.000 | 0.899 | 305.510 | 0.032 | 186 | 0.436 | |
| TVAE + Reglas del Dominio | 11.128 | 11000 | 1.000 | 0.995 | 0.995 | 6.730 | 0.718 | 0.063 | 0.480 | 0.887 | 473.473 | 0.033 | 186 | 0.445 | |
| OOF PSO para Aumento | 1.019 | 11000 | 1.000 | 1.000 | 1.000 | 6.000 | 0.728 | 0.000 | 0.004 | 0.435 | 227.962 | 0.261 | 186 | 0.427 | |
| OOF PSO para Aumento + Reglas | 6.251 | 11000 | 1.000 | 1.000 | 1.000 | 6.050 | 0.728 | 0.000 | 0.283 | 0.463 | 401.552 | 0.261 | 186 | 0.437 | |
| SMOTE RSB* Refinado | 1.026 | 8000 | 1.000 | 1.000 | 1.000 | 8.038 | 0.695 | 0.880 | 0.004 | 0.992 | 147.628 | 0.008 | 254 | 0.431 | 🏆 |
| SMOTE RSB* Refinado + Reglas | 7.511 | 8000 | 1.000 | 0.990 | 0.990 | 7.655 | 0.695 | 0.880 | 0.342 | 0.970 | 280.499 | 0.017 | 254 | 0.434 |
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 EEG-Based Eye State Detection (Version 1). figshare. https://doi.org/10.6084/m9.figshare.32946797.v1