Spaces:
Sleeping
Prédiction de l’Attrition des Employés – TechNova Partners
Bienvenue dans ce projet de classification en Machine Learning dont l’objectif est d’analyser et prédire les démissions d’employés (attrition) au sein de l’ESN TechNova Partners, spécialisée dans le conseil en transformation digitale et la vente de solutions SaaS.
Ce dépôt contient l’ensemble du travail réalisé en tant que Consultant Data Scientist pour :
- comprendre les facteurs clés derrière les démissions,
- construire un modèle de prédiction de l’attrition,
- produire des insights actionnables pour les équipes RH
Table des Matières
- Contexte
- Objectifs
- Jeux de données
- Approche
- Structure du dépôt
- Mise en place du modèle
- Interprétabilité avec SHAP
- Installation
- Utilisation
- Livrables
- Auteur
Contexte
TechNova Partners constate un taux de démission supérieur à la normale.
Le responsable SIRH, souhaite :
- objectiver les hypothèses issues des entretiens de départ,
- identifier les causes racines de l’attrition,
- anticiper les risques de démission.
Accompagnement avec un pipeline robuste de modélisation + restitution claire pour les RH.
Objectifs
- Analyser les profils "démissionnaires vs non-démissionnaires"
- Identifier les facteurs associés au risque de démission (ancienneté, salaire, satisfaction, performance, etc.).
- Construire un modèle de classification capable de prédire la probabilité de départ d’un employé.
- Interpréter le modèle (via SHAP) (globale & locale)
- Fournir des livrables clairs : notebooks, scripts, environnement reproductible et support de présentation.
Jeux de données
Trois sources principales sont mises à disposition :
SIRH: poste, département, contrat, âge, ancienneté, salaire, etc.
Évaluations de performance: notes annuelles, engagement/satisfaction, historiques RH.
Sondage annuel employés: bien-être, charge, management, équilibre vie pro/perso.
Variable cible (attrition = 1/0)
Ces différentes sources sont fusionnées et préparées pour construire un dataset modélisable.
Approche
L’analyse suit les grandes étapes suivantes :
Compréhension métier & des données
- Lecture des descriptions,
- Mapping des variables,
- Identification de la cible.
Nettoyage & préparation
- Gestion des valeurs manquantes,
- Encodage des variables catégorielles,
- Transformation / normalisation des variables numériques,
- Jointure des différentes sources de données.
Analyse Exploratoire (EDA)
- Statistiques descriptives générales,
- Comparaisons démissionnaires vs non-démissionnaires,
- Visualisation des distributions et corrélations,
- Identification de pistes d’explication à tester dans le modèle.
Modélisation
- Séparation train/test,
- Entraînement de plusieurs modèles de classification (Dummy, Logistic Regression, Random Forest),
- Recherche d’hyperparamètres,
- Évaluation via des métriques adaptées (PR AUC, ROC-AUC, AUC, Précision, Rappel, F1-score, Seuil de décision )
Interprétabilité
- Utilisation de SHAP pour comprendre l’impact des variables,
- Analyse globale (features les plus importantes),
- Analyse locale (explication de cas particuliers).
Restitution
- Synthèse des résultats pour les RH,
- Recommandations opérationnelles et pistes d’actions.
Structure du dépôt
.
├── src/
│ ├── __init__.py
│ ├── data_preparation.py. # chargement & split X/y (données traitées)
│ ├── train_model.py # entraînement + sauvegarde artefact
│ └── utils.py # utilitaires (chargement modèle, prédiction unitaire)
├── tests/
│ ├── test_data_preparation.py
│ └── test_predict.py
├── models/ # artefact modèle
├── data/
│ ├── raw/ # fichiers brutsv(privé, ignoré) – .gitkeep
│ └── processed/ # données traités (visibles)
├── notebooks/
│ ├── 01_analyse_exploratoire.ipynb
│ ├── 02_preprocessing.ipynb
│ └── 03_modelisation.ipynb
├── reports
├── main.py # entraînement
├── pyproject.toml # configuration de l'environnement & dépendances
├── requirements.txt. # exporté depuis uv
├── README.md
├── .gitignore
└── uv.lock # verrouillage précis des versions
Mise en place du modèle
- Chargement et préparation
Import des trois extraits (SIRH, performance, sondage),
Jointure sur l’identifiant employé,
Construction de la variable cible (attrition).
- Prétraitement
Gestion des valeurs manquantes,
Encodage des variables catégorielles (One-Hot, Ordinal, …),
Normalisation / standardisation de certaines variables,
Séparation train/test.
- Modélisation
Plusieurs modèles de classification sont testés :
Régression Logistique
Random Forest
Dummy
Évaluation à l’aide de :
Accuracy
Precision / Recall
F1-score
ROC-AUC
PR AUC
Matrices de confusion et courbes ROC/PR
Le modèle final retenu est celui offrant le meilleur compromis entre performance et interprétabilité pour les RH.
Interprétabilité avec SHAP
Importance globale des variables: Quelles caractéristiques influencent le plus la probabilité de démission ? (summary plot)
Explication de cas individuels: Pourquoi tel employé est-il jugé “à risque” par le modèle ? (force plot)
Aide à la décision RH: leviers d’action (ajustement salarial, mobilité interne, charge de travail, reconnaissance, etc.)
Installation
Prérequis
Python 3.10+
git
Étapes d’installation
- Cloner le dépôt
git clone https://github.com/veranoscience/OpenclassroomsProject.git
cd OpenclassroomsProject
- Créer un environnement virtuel
uv venv && source .venv/bin/activate
- Installer les dépendances
uv sync
Utilisation
- Lancer les notebooks
Depuis la racine du projet, avec l’environnement activé :
jupyter notebook
Puis ouvrir:
notebooks/01_analyse_exploratoire.ipynbpour l’analyse exploratoirenotebooks/02_preprocessing.ipynbpour le nettoyage & feature engineeringnotebooks/03_modelisation.ipynbpour la modélisation et SHAP
Script (entrai&nement rapide)
python main.py
Un artefact est sauvegardé dans models/model.joblib
Workflow Git (branches / commits / tags)
- Branche principale :
main(protégée) - Conventions de branches :
<type><-resume->- Types :
feat,fix,docs,refactor,chore,test,data - Examples :
docs/mise-a-jour-readme
- Types :
- Commits descriptifs:
feat: ...,chore: ... - Tags de version :
v0.1.0,v0.2.0, ...- Créer :
git tag -a v0.1.0 -m "v0.1.0: base" - Pousser :
git push origin v0.1.0
- Créer :
Résolution de conflits : utiliser l’outil intégré VS Code
(Accept Current/Incoming → git add . → git rebase --continue).
Authentification & Sécurité
Aucun secret n’est committé Compte GitHub : 2FA activée, Secret Scanning & Dependabot activés.
Livrables
Le projet fournit :
Code source (notebooks + src/ + main.py)
Environnement reproductible :
pyproject.toml(uv),uv.lock,requirements.txtexporté.README complet (installation, utilisation, sécurité, workflow)
Versioning : historique de commits clair, branches dédiées, tags (ex. v0.1.0).
Présentation :
reports/(PDF)
Versioning / Changelog
Version courante : voir tags Git.
CHANGELOG.mdpour tracer les évolutions :
v0.1.0 — structure, dépendances, notebooks, entraînement minimal, SHAP.
Auteur
Kseniia Dautel