## 📂 Estructura del código

| Archivo            | Descripción                                                                                                                                                                                                                                                                           |
| ------------------ |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `run.py`           | Orquestador principal. Ejecuta el pipeline completo: carga de datos, entrenamiento con validación cruzada anidada y evaluación en test de Alzheimer y Esquizofrenia. Guarda resultados y figuras.                                                                                     |
| `models.py`        | Define los clasificadores (`KNN`, `Random Forest`, `XGBoost`, etc.) y los espacios de hiperparámetros para `GridSearchCV`.                                                                                                                                                            |
| `preprocessing.py` | Almacena las funciones de preparación de los datos: escalado, split, SMOTE, y clustering para downsampling. Centraliza toda la lógica previa al modelado.                                                                                                                             |
| `metrics.py`       | Contiene métricas personalizadas utilizadas en la evaluación: F1 por clase, `recall@K`, `precision@K`, cálculo de umbrales óptimos, etc.                                                                                                                                              |
| `pipelines/`       | Implementa las distintas estrategias de balanceo: `no_sampling.py`, `oversampling.py`, `oversampling_gridsearch.py`, `downsampling.py`, `cost_sensitive.py`. Cada archivo define la función `prepare(df, model_name)` que devuelve los conjuntos de datos ya preparados para modelar. |
| `export_tables/`   | Contiene notebooks para extracción y exportación de datos desde la base de datos DRIVE.                                                                                                                                                                                               |
