Proyecto de Machine Learning para predecir el desgaste (attrition) de empleados de IBM
Desarrollado por Pablo Martín y Omar Calderón para el Demoday de Saturdays AI — Edición Bilbao
Esta aplicación web interactiva, construida con Streamlit, analiza un dataset de Recursos Humanos de IBM con el objetivo de predecir qué empleados tienen mayor probabilidad de abandonar la empresa (employee attrition). El proyecto recorre de forma visual y didáctica todo el pipeline de Machine Learning: desde la exploración del dato hasta la predicción y simulación de escenarios "what-if".
- Exploración de datos: Muestra las primeras filas, estadísticas descriptivas y valores únicos del dataset IBM-HR (1.470 empleados, 35 variables).
- Preprocesamiento:
- Elimina columnas irrelevantes (
EmployeeCount,StandardHours,Over18,EmployeeNumber). - Separa la variable objetivo (
Attrition) de las features. - Convierte variables categóricas a dummies con
pd.get_dummies().
- Elimina columnas irrelevantes (
- Balanceo de clases: Aplica SMOTE (Synthetic Minority Oversampling Technique) para equilibrar las clases de attrition, ya que los casos positivos son minoría.
- Entrenamiento del modelo: Entrena un Random Forest Classifier sobre el dataset balanceado.
- Distribución de probabilidades: Visualiza un histograma con las probabilidades de desgaste de todos los empleados.
- Simulación "What-if": Selecciona un candidato con alta probabilidad de desgaste (>60%) y simula mejoras en sus condiciones laborales (aumento salarial del 10% y eliminación de horas extra) para ver cómo cambia su probabilidad de abandono.
| Componente | Tecnología |
|---|---|
| Frontend / App Web | Streamlit |
| Lenguaje | Python |
| ML / Modelado | scikit-learn (RandomForestClassifier) |
| Balanceo de clases | imbalanced-learn (SMOTE) |
| Manipulación de datos | Pandas, NumPy |
| Visualización | Matplotlib, Seaborn |
| Despliegue | Heroku |
├── app.py # Aplicación principal de Streamlit
├── data/
│ └── IBM-HR.csv # Dataset de IBM HR (1.470 empleados)
├── requirements.txt # Dependencias de Python
├── setup.sh # Configuración de Streamlit para Heroku
├── Procfile # Proceso web para Heroku
└── README.md
- Python 3.7+
- pip
# 1. Clonar el repositorio
git clone <URL_DEL_REPOSITORIO>
cd <NOMBRE_DEL_PROYECTO>
# 2. Instalar dependencias
pip install -r requirements.txt
# 3. Ejecutar la aplicación
streamlit run app.pyLa aplicación se abrirá automáticamente en http://localhost:8501.
El dataset IBM HR Analytics Employee Attrition & Performance contiene 1.470 registros de empleados ficticios con 35 variables, incluyendo:
- Demográficas: Edad, Género, Estado Civil, Distancia al trabajo
- Laborales: Departamento, Rol, Nivel de cargo, Años en la empresa, Horas extra
- Económicas: Ingreso mensual, Incremento salarial, Stock Options
- Satisfacción: Satisfacción ambiental, laboral, relacional, balance vida-trabajo
- Variable objetivo:
Attrition(Yes/No) — si el empleado dejó la empresa
Dataset IBM-HR (1.470 registros)
│
▼
Limpieza de datos (drop columnas irrelevantes)
│
▼
Separación X / y (features vs. Attrition)
│
▼
One-Hot Encoding (get_dummies)
│
▼
SMOTE (balanceo de clases)
│
▼
Random Forest Classifier (entrenamiento)
│
▼
Predicción de probabilidades
│
▼
Simulación What-If (ajustar salario + horas extra)
El proyecto demuestra cómo RRHH podría usar este modelo para retener talento:
- Se identifica un empleado con probabilidad de desgaste superior al 60%.
- Se simulan cambios en sus condiciones: un aumento salarial del 10% y la eliminación de horas extra.
- Se recalcula la probabilidad de desgaste con las nuevas condiciones.
- El resultado muestra si estos cambios serían efectivos para retener al empleado.
numpy
pandas
matplotlib
sklearn
seaborn
imblearn
streamlit==0.84.0
opencv-python-headless
- Pablo Martín
- Omar Calderón — omarcalderon24@gmail.com
Proyecto realizado en el marco de Saturdays AI — Edición Bilbao.
Proyecto educativo desarrollado para el Demoday de Saturdays AI.