Skip to content

cesra147/Data-Science-Salary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Prueba Técnica – Predicción Salarial con RL + XGBoost

CESAR RAMIREZ GOMEZ

🎯 Objetivo

Construir un pipeline completo donde un agente de Aprendizaje por Refuerzo (Q-learning) calibre año tras año un modelo XGBoost para predecir salary_in_usd, aplicando este modelo sobre una hoja llamada “Pronosticos” de un archivo Excel base.


⚙️ Stack de herramientas

  • Python 3.10
  • XGBoost
  • scikit-learn
  • Gymnasium
  • Pandas, NumPy
  • Matplotlib

📂 Estructura del Proyecto

Prueba_Tecnica_Bogota/
├── Data/                       # Dataset original Excel
├── Notebooks/                 # Exploración y limpieza
├── Outputs/                   # Mapeos generados manualmente
├── src/
│   ├── agents/                # Agente RL
│   ├── envs/                  # Entorno Gym
│   ├── scoring/               # Evaluación final
│   ├── training/              # Entrenamiento RL
│   ├── utils/                 # Preprocesamiento y logger
│   └── config.py              # Parámetros y rutas globales
└── src/artifacts/             # Resultados y artefactos generados

📒 Detalle de notebooks

Archivo Qué hace
01_exploracion_datos.ipynb Analiza columnas, outliers, tipos de datos y muestra gráficas descriptivas.
02_preprocesamiento.ipynb Agrupa categorías de columnas (job_title, company_location, etc.) y exporta mapeos CSV a Outputs/.

🧾 Archivos .py explicados

📁 src/config.py

Contiene toda la configuración global del proyecto:

  • DATASET_PATH, PRONOS_SRC: rutas base de datos
  • YEARS: años usados como estados
  • XGB_GRID: rejilla de hiperparámetros para XGBoost
  • Q_PARAMS: parámetros del agente Q-learning (epsilon, alpha, gamma, etc.)
  • ARTIFACT_DIR: dónde se guarda todo

📁 src/agents/qlearning_xgb_agent.py

Define el agente Q-learning:

  • Tabla Q (self.Q)
  • Política epsilon-greedy con epsilon_decay
  • Método update() para actualizar los valores de Q
  • Método decay_epsilon() para reducir la exploración con el tiempo

📁 src/envs/salary_rl_env.py

Define el entorno Gym personalizado:

  • Cada step() corresponde a un año (work_year)
  • Cada acción es un conjunto de hiperparámetros de XGBoost
  • Se entrena el modelo y se calcula RMSE como recompensa
  • Solo si update_pronosticos=True, predice sobre “Pronosticos”

📁 src/training/trainer.py

  • Crea el entorno y el agente
  • Ejecuta múltiples episodios de entrenamiento
  • Registra las decisiones y recompensa en training_log.csv
  • Guarda la Q-table aprendida (q_table.npy)

📁 src/training/run_training.py

  • Script principal: ejecuta Trainer.train() y luego el scoring final

📁 src/scoring/final_scoring.py

  • Carga la Q-table final
  • Para cada año, reentrena el mejor modelo encontrado
  • Predice los salarios para ese año en la hoja “Pronosticos”
  • Guarda:
    • pronosticos.xlsx
    • rmse_por_anio.csv
    • Modelos: best_xgb_<year>.joblib
    • Gráficas: plots/convergence_rmse.png, cumulative_reward.png

📁 src/utils/feature_pipeline.py

  • Aplica mapeos de clases (Outputs/) y OneHotEncoding
  • Maneja categorías desconocidas con Other_<col>
  • Se guarda en feature_pipeline.joblib

📁 src/utils/logger.py

  • Logger central para dejar registro de eventos (train.log)

▶️ ¿Cómo se ejecuta?

python -m src.training.run_training

Este único comando hace:

  • Entrenamiento del agente RL
  • Generación de:
    • q_table.npy
    • training_log.csv
    • pronosticos.xlsx⚠️ predicción final actualizada
    • rmse_por_anio.csv
    • Gráficas en src/artifacts/plots/

📈 Archivos generados

Archivo Qué contiene
pronosticos.xlsx Predicciones del salario salary_in_usd hechas con el mejor modelo para cada año
rmse_por_anio.csv Error (RMSE) final por año
convergence_rmse.png Gráfico de mejora de RMSE por año
cumulative_reward.png Recompensa acumulada por episodio

📌 Ubicación del archivo de predicción final

  • Carpeta: src/artifacts/
  • Nombre del archivo: pronosticos.xlsx
  • Pestaña interna: Pronosticos
  • Columna con los valores predichos: salary_in_usd

Al ejecutar:

python -m src.training.run_training


## ✅ Validaciones clave

- Cada predicción usa **solo datos históricos previos** al año objetivo.
- Las categorías desconocidas en el set *Pronosticos* se agrupan como `Other_<col>`.
- El pipeline puede reiniciarse en cualquier momento (artifacts se regeneran).

---

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published