Este proyecto tiene como objetivo predecir la nota final de estudiantes de secundaria en Madrid utilizando modelos de aprendizaje supervisado. Se construyen y comparan dos modelos predictivos: uno que utiliza las notas previas (T1 y T2) y otro que no, permitiendo evaluar el desempeño en ambos escenarios. Además, se incluye una parte creativa de análisis no supervisado (PCA y clustering) para extraer patrones ocultos en los datos.
Santiago Córdoba Artieda
Ingeniería Matemática e Inteligencia Artificial
Universidad Pontificia de Comillas de Madrid - ICAI
.
├── config
│ └── hyperparams.json # Hiperparámetros seleccionados vía GridSearch
│
├── data
│ ├── rendimiento_estudiantes_train.csv # Dataset original de entrenamiento
│ ├── rendimiento_estudiantes_test_vacio.csv# Test sin variable objetivo (T3)
│ ├── re_train_preprocessed_modelo1.csv # Train preprocesado para modelo i (con T1 y T2)
│ └── re_train_preprocessed_modelo2.csv # Train preprocesado para modelo ii (sin T1 y T2)
│
├── notebooks
│ ├── exploratory_data_analysis.ipynb # Análisis exploratorio y visualización inicial
│ ├── modelo1.ipynb # Entrenamiento y evaluación de modelo i
│ ├── modelo2.ipynb # Entrenamiento y evaluación de modelo ii
│ └── exploracion_adicional.ipynb # PCA y clustering (análisis no supervisado)
│
├── src
│ ├── preprocess_data.py # Funciones de preprocesado para ambos modelos
│ ├── model_train.py # Funciones para entrenar modelo i y ii
│ └── generar_predicciones.py # Pipeline completo: preprocesa, entrena, predice
│
├── predictions
│ └── predicciones_finales.csv # Predicciones para el conjunto de test entregable
│
├── reports
│ └── MemoriaML.pdf # Informe final en formato NeurIPS
│
└── README.md
- Requisitos previos
Asegurarse de tener Python 3.8+ y las siguientes librerías instaladas:
pip install pandas numpy scikit-learn matplotlib seaborn- Ejecución del pipeline completo
Desde la raíz del proyecto, ejecutar:
python src/generar_predicciones.pyEste script:
- Preprocesa los datos originales para ambos modelos.
- Entrena
ElasticNetpara el modelo (i) yRandomForestpara el modelo (ii) con los hipérparametros encontrados en los notebooks guaradados enconfig/hyperparams.json. - Preprocesa el conjunto de test vacío.
- Genera las predicciones para ambos modelos.
- Guarda el archivo
data/predicciones_finales.csven el formato requerido.
- Modelo i: ElasticNet con
T1,T2. Alto rendimiento predictivo (R² ≈ 0.91). - Modelo ii: RandomForest sin
T1,T2. Mejor desempeño entre los no lineales (R² ≈ 0.41).
En notebooks/exploracion_adicional.ipynb se encuentra un análisis no supervisado:
- PCA: Reducción de dimensionalidad para visualizar patrones.
- Clustering (KMeans y jerárquico): Identificación de subgrupos de estudiantes según características comunes.
El objetivo fue explorar estructuras latentes en el conjunto de datos y descubrir agrupaciones naturales entre los estudiantes.
Este proyecto se entrega como parte del curso de Aprendizaje Automático, Universidad Pontificia de Comillas de Madrid - ICAI. Uso académico únicamente.