Sistema de Minería de Datos para la Clasificaciones de Patologías
mediante Aprendizaje Supervisado en Datos Epidemiológicos Masivos
1 Planeación
1.1 Definición del Problema
Durante los años 2020-2024, se presento una alta concentración de diagnóstico sobre
el COVID-19 provocando:
▪ Subregistro de gripe e influencia.
▪ Clasificaciones erróneas de neumonía como COVID.
▪ Sesgos clínicos durante picos epidemiológicos.
▪ Cambios en la relevancia de síntomas a lo largo de tiempo.
Sin embargo, al analizar datasets actuales, se observa que estos contienen información
diversa que no se limita unicamente a COVID-19, sino que incluye múltiples
variables,clínicas,demográficas y epistemológicas.
1.2 Objetivo General
Desarrollar un sistema de minería de datos basados en aprendizaje supervisado capaz de
procesar grandes volúmenes de datos epidemiología, identificar patrones y clasificar
distintas patologías de forma automatizada.
1.3 Objetivo Especifico
▪ Integrar datasets epidemiológicos de gran escala.
▪ Implementar un flujo automatizado de limpieza y transformación de datos.
▪ Implementación modelos como:
• Random Forest.
• Support Vector Machines(SVM).
• K-Nearest Neighbors(KNN).
▪ Aplicar técnicas de balanceo de clases (submestreo, SMOTE).
▪ Evaluar el desempeño de los modelos mediante métricas y visualización.
▪ Analizar la adaptabilidad del sistema a distintos tipos de datasets.
1.4 Alcance del Proyecto
El sistema desarrollado permite:
▪ Procesar datasets masivos.
▪ Adaptarse a distintos problemas de clasificación.
▪ Aplicarse en múltiples áreas.
No contempla:
Modelos de deep lerning.
Implementación en tiempo real.
Validación clínica directa.
1.5 Cronograma
2 Organigrama y Lista de Recursos
2.1 Organigrama Funcional
2.2 Recursos Tecnológicos
Lenguaje Principal
◦ Python
Librerías
◦ Pandas
◦ Numpy
◦ Scikit-learn
◦ Matplotlib
Entorno
◦ Entorno virtual(.venv)
◦ Visual Studio Code
3 Documento de Decisiones y Acciones de Dirección
La dirección implicara la toma de decisiones estratégicas y ajustes metodológicos durante
el desarrollo.
3.1 Dirección Estratégica
Registrare los cambios estratégicos para el entendimiento de la influencia del COVID,
ejemplo:
Decisión Estratégica Justificación Acción Impacto
Generalización del Los datasets contienen información El sistema ya no depende solo de
sistema diversa COVID
Discretización Variables numéricas causaban Permite convertir problemas a
automática errores clasificación
Clases desbalanceadas afectan el
Balanceo de clases Mejora de rendimiento
modelo
Uso de múltiples
Evita sesgo de un solo algoritmo Comparación mas robusta
modelos
3.2 Tratamiento Técnico de variables
En esta etapa se preparan los datos antes de entrenar los modelos. El sistema ahora no
esta orientado al uso de datos médicos, sino que puede trabajar con cualquier dataset,
ajustándose al tipo de información.
3.2.1 Carga y limpieza inicial de datos
▪ Script : [Link]
El dataset se carga en bloques, evitando problemas de memoria, debido al manejo de
millones de registros.
Durante este proceso:
• Se eliminan registros duplicados.
• Se corrigen valores faltantes automáticamente.
Funcionamiento:
• Si la columna es numérica→ se rellena con el promedio.
• Si es categórica→ se rellena con el valor mas frecuente.
Esto permite que el sistema funcione incluso si los datos están incompletos.
3.2.2 Eliminación de variables innecesarias
▪ Script : [Link]
▪ Clase: EliminadorVariables
▪ Método: transformar()
El sistema elimina columnas que no aportan valor,como:
• Identificadores(ID)
• Fechas(FECHA)
Ademas:
• El usuario puede eliminar variables manualmente desde la interfaz de usuario.
• La variable objetivo se protege automáticamente.
3.2.3 Codificación de variables categóricas
▪ Script : [Link]
▪ Método: codificar_categoricas()
Las variables de texto se convierten a formato numérico mediante:
• pd.get_dummies()
Regla adicional:
• Si una columna tiene demasiados valores únicos → se elimina.
Esto evita que el modelo se vuelva lento o ineficiente.
3.2.4 Discretización inteligente de la variable objetivo
▪ Script : [Link]
▪ Método: codificar_categoricas()
El sistema aplica discretización solo en casos específicos, transformando valores
numéricos a valores categóricos, creando rangos:
• Cuando la variable objetivo es EDAD
Con los grupos:
• Niño
• Joven
• Adulto
• Mayor
• Anciano
Luego:
• Se eliminan valores nulos generados
• Se elimina la columna original
• Se actualiza la variable objetivo
Este paso evita problemas cuando hay demasiados valores únicos.
3.2.5 Balanceo de Datos
▪ Script : [Link]
▪ Método: balanceo_por_submuestreo()
Este proceso ajusta el tamaño de las clases
El sistema:
• Detecta cada clase
• Si una clase supera 50,000 registros → la reduce.
• Mantiene intactas las clases pequeñas
• Une todo con “[Link]()”
Beneficios:
• Reduce uso de memoria
• Evita sobreentrenamiento
• Mejora el equilibrio del modelo
3.2.6 División de Datos
▪ Script : [Link]
▪ Método: dividir_datos(
Se divide el dataset en:
• 80% entrenamiento
• 20% prueba
• Si hay clases con pocos datos → se desactiva “stratify”
• Esto evita errores durante la división
3.2.7 Balanceo avanzado(SMOTE )
▪ Script : [Link]
▪ Método: aplicar_smote()
Se usa la técnica SMOTE solo si es seguro.
Condiciones:
Si se cumplen:
Si no:
• Se omite automáticamente.
• Esto evita errores y sobrecarga del sistema.
3.2.8 Normalización de Datos
▪ Script : [Link]
▪ Método: normalizar_datos()
Se aplica la transformación :
Beneficios:
• Mejora modelos como SVM
• Evita que una variable domine
• Hace mas estable el entrenamiento
3.2.9 Evaluación de modelos
▪ Script : [Link]
▪ Método: evaluar_modelo()
Se calculan las métricas:
◦ Accuracy → accuracy_score
◦ Precision → precision_score
◦ Recall → recall_score
◦ F1 → f1_score
Visualización generadas:
• Matriz de confusion → confusion_matrix()
• Histograma de errores → [Link]()
• Curva ROC → roc_curve() y auc() (solo si es aplicable)
3.2.10 Visualización exploratoria
▪ Script : [Link]
Métodos disponibles:
• grafica_distribucion()
• grafica_correlacion()
• grafica_histogramas()
• grafica_boxplots()
• importancia_varables()
4 Reporte de Control y Ajuste Propuestos
Durante el desarrollo del sistema se realizaron múltiples pruebas con datasets grandes, lo
que permitió identificar errores importantes.
Aparir de los errores, se hicieron ajustes directos en el código para el funcionamiento
4.1 Hallazgo 1: Errores al dividir los datos
◦ Problema detectado
Durante la ejecución se presentaba el error:
ValueError: The least populated classes in y have only 1 member
◦ Que significa esto?
Algunas clases tenían muy pocos datos(presentaban al menos 1 solo registro).
El método train_test_split() con stratify necesitaba al menos 2 datos por clases,
provocando que el software se detenía de manera inesperada.
◦ Por que ocurrió?
Esto sucedía porque :
• La variable objetivo tenia demasiados valores diferentes
• Algunas edades aparecían solo una vez.
◦ Solución
Script : [Link]
Método: dividir_datos()
4.2 Hallazgo 2
◦ Problema detectado
El sistema generaba errores y resultados incorrectos al usar EDAD como variable
objetivo. Provocando :
• Clase con 1 dato
• Modelo de aprendizaje inestable
◦ Por que ocurrió?
Porque EDAD es una variable continua, por lo cual cada numero se trataba como una
clase diferente.
◦ Solución
Script : [Link]
Método: discretizar_variable()
◦ Resultados
▪ Se reducen la clase a solo 5 grupos
▪ Se eliminan clases con pocos datos
▪ Mejora el rendimiento del modelo
4.3 Hallazgo 3: SMOTE no funcionaba correctamente
◦ Problema detectado
En algunos casos :
• SMOTE fallaba
• O hacia el sistema muy lento
• O generaba errores con clases pequeñas
◦ Por que ocurrió?
Porque SMOTE ncesita:
• Suficiente datos en cada clase
• Dataset pequeños
◦ Solución
Script : [Link]
Método: aplicar_smote()
◦ Resultado
▪ SMOTE solo se aplica cuando es seguro
▪ Se evita errores
▪ Mejora el rendimiento
4.4 Hallazgo 4 : Problemas de rendimiento con datasets grandes
◦ Problema detectado
El sistema :
• Se volvía lento
• Podría congelarse
• Consumo excesivo memoria
◦ Por que ocurrió?
Los datasets utilizados para el análisis presentan millones de registro, debido a esto y las
limitadas características del equipo utilizado el sistema era incapaz de procesar la
información.
◦ Solución
Script : [Link]
Método: cargar_datos_streaming()
Carga los datos por bloques , evitando cargarlos todo de golpe
Flujo de trabajo:
➢ Carga de datos
➢ Selección de variables objetivo
➢ Eliminación de variables irrelevantes
➢ Selección de variables predictivas
➢ Discretización (si se aplica)
➢ Limpieza y codificación
➢ Balanceo
➢ División de datos
➢ Entrenamiento
➢ Evaluación
5 Código y Resultados del Procesamiento de Dataset
5.1 Estructuras del código
Se propone la siguiente organización para el repositorio en
◦ /data
▪ <dataset_original>
▪ <dataset_limpio>
◦ /src
▪ [Link]
▪ [Link]
▪ [Link]
▪ evaluació[Link]
◦ /resultados
▪ métricas_modelo
▪ matriz_confusión
▪ importancia_variables
5.2 Procesamiento del dataset
▪ Carga de datos.
▪ Eliminación de duplicados.
▪ Imputación de valores faltantes.
▪ Codificación de variables categóricas.
▪ Balanceo con SMOTE.
▪ Normalización
▪ División Train/Test
5.3 Reusltados Esperados del Procesamiento
5.4 Interpretacion de Resultados
5.5 Evidencia Documental