Tesis de la maestria en ciencia de los datos FOC
Este proyecto implementa un marco experimental para evaluar métodos de oversampling en problemas de clasificación binaria con fuertes desbalances de clase, comparando:
- Métodos clásicos:
- SMOTE
- Borderline-SMOTE
- KMeans-SMOTE
- ADASYN
- Random OverSampler
- Sin oversampling (
none)
- Una R-GAN tabular (GAN robusta) diseñada para generar muestras sintéticas de la clase minoritaria.
El código está pensado como soporte empírico para una tesis de maestría sobre generación de muestras sintéticas en bases desbalanceadas con GANs.
-
Generar escenarios sintéticos controlados variando:
- número de muestras,
- número de características,
- grado de correlación,
- solapamiento entre clases,
- nivel de desbalance,
- nivel de complejidad cualitativa (
baja,media,alta).
-
Evaluar, en cada escenario, el desempeño de distintos métodos de oversampling.
-
Entrenar varios modelos de clasificación:
- Logistic Regression
- Perceptron
- Random Forest
- SVM
- XGBoost
con búsqueda de hiperparámetros mediante
RandomizedSearchCVy validación cruzada estratificada. -
Realizar tuning específico de la R-GAN, eligiendo configuraciones de hiperparámetros que maximizan el F1-Score de la clase minoritaria.
La estructura puede lucir (aprox.) así:
.
├── GAN.py # Implementación de la R-GAN y pipeline de oversampling
├── metodos.py # Función resampling_method con SMOTE/ADASYN/etc. y GAN
├── modelos.py # Definición de modelos base (get_modelos)
├── main.py # Script principal de experimentos
├── generacion.py # Función data_sintetica_make_classification, Bases de prueba
├── modelos_hiperparam.py # Grid de hiperparametros de modelos
├── metricas.py # evaluar_modelos, results_to_dataframe, etc.
├── input/
│ └── escenarios_full.csv # Definición de escenarios sintéticos
└── output/
└── results/ # Archivos de resultados por escenario
Dependencias
Python >= 3.9 (recomendado)
NumPy
Pandas
scikit-learn
imbalanced-learn
xgboost
PyTorch
## Escenarios sintéticos
El archivo ./input/escenarios_full.csv describe los escenarios a simular. Cada fila representa un escenario y típicamente incluye:
muestras: número de instancias totales
caracteristicas: número de features
correlacion: grado de correlación entre variables
solapamiento: solapamiento entre clases
proporcion: proporción de la clase minoritaria (antes de simular)
nivel: complejidad cualitativa (baja, media, alta)
## La generación de datos se hace con la función:
dataset = data_sintetica_make_classification(
muestras,
caracteristicas,
correlacion,
solapamiento,
proporcion
)
Flujo completo del experimento (main.py)
Para cada escenario:
Se lee la fila de escenarios_full.csv.
Se genera el dataset sintético (data_sintetica_make_classification).
Se divide en train/test (70/30).
Para cada método de oversampling:
Si es GAN → tuning de la GAN .
Se obtienen X_res, y_res (train re-balanceado).
Se hace tuning de modelos (RandomizedSearchCV) usando validación cruzada.
Se evalúa cada modelo en el test original:
F1-Score (clase 1),
Precision, Recall,
Balanced accuracy,
PR (Average Precision / PR-AUC).
Se consolidan los resultados en un DataFrame y se guardan en:
./output/results/<nivel>_<muestras>_<caracteristicas>_<correlacion>_<solapamiento>_<proporcion>.csv
Si hay errores, se registran en ./output/maya/errores.csv.