veranoscience commited on
Commit
c6ebe06
·
1 Parent(s): 9f0dbb9

docs: Space metadata + README

Browse files
Files changed (1) hide show
  1. README.md +12 -301
README.md CHANGED
@@ -1,306 +1,17 @@
1
- # Prédiction de l’Attrition des Employés – TechNova Partners
2
-
3
- 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.
4
-
5
- Ce dépôt contient l’ensemble du travail réalisé en tant que **Consultant Data Scientist** pour :
6
- - comprendre les **facteurs clés** derrière les démissions,
7
- - construire un **modèle de prédiction de l’attrition**,
8
- - produire des **insights actionnables** pour les équipes RH
9
-
10
- ## Table des Matières
11
-
12
-
13
- - [Contexte](#-contexte)
14
- - [Objectifs](#-objectifs)
15
- - [Jeux de données](#-jeux-de-données)
16
- - [Approche](#-approche)
17
- - [Structure du dépôt](#️-structure-du-dépôt)
18
- - [Mise en place du modèle](#-mise-en-place-du-modèle)
19
- - [Interprétabilité avec SHAP](#-interprétabilité-avec-shap)
20
- - [Installation](#️-installation)
21
- - [Utilisation](#️-utilisation)
22
- - [Livrables](#-livrables)
23
- - [Auteur](#-auteur)
24
-
25
- ---
26
- <a id="-contexte"></a>
27
- ## Contexte
28
-
29
- TechNova Partners constate un **taux de démission supérieur à la normale**.
30
-
31
- Le responsable SIRH, souhaite :
32
- - **objectiver** les hypothèses issues des entretiens de départ,
33
- - **identifier** les **causes racines** de l’attrition,
34
- - **anticiper** les risques de démission.
35
-
36
- Accompagnement avec un **pipeline robuste** de modélisation + **restitution claire** pour les RH.
37
-
38
- ---
39
-
40
- <a id="-objectifs"></a>
41
- ## Objectifs
42
-
43
- - **Analyser** les profils "démissionnaires vs non-démissionnaires"
44
- - **Identifier** les facteurs associés au risque de démission (ancienneté, salaire, satisfaction, performance, etc.).
45
- - **Construire un modèle de classification** capable de prédire la probabilité de départ d’un employé.
46
- - **Interpréter le modèle** (via SHAP) (globale & locale)
47
- - **Fournir des livrables clairs** : notebooks, scripts, environnement reproductible et support de présentation.
48
-
49
  ---
50
-
51
- <a id="-jeux-de-données"></a>
52
- ## Jeux de données
53
-
54
- Trois sources principales sont mises à disposition :
55
-
56
- 1. **SIRH**: poste, département, contrat, âge, ancienneté, salaire, etc.
57
-
58
- 2. **Évaluations de performance**: notes annuelles, engagement/satisfaction, historiques RH.
59
- 3. **Sondage annuel employés**: bien-être, charge, management, équilibre vie pro/perso.
60
- **Variable cible** (attrition = 1/0)
61
-
62
- Ces différentes sources sont **fusionnées et préparées** pour construire un dataset modélisable.
63
-
64
  ---
65
- <a id="-approche"></a>
66
- ## Approche
67
-
68
- L’analyse suit les grandes étapes suivantes :
69
-
70
- 1. **Compréhension métier & des données**
71
- - Lecture des descriptions,
72
- - Mapping des variables,
73
- - Identification de la cible.
74
-
75
- 2. **Nettoyage & préparation**
76
- - Gestion des valeurs manquantes,
77
- - Encodage des variables catégorielles,
78
- - Transformation / normalisation des variables numériques,
79
- - Jointure des différentes sources de données.
80
-
81
- 3. **Analyse Exploratoire (EDA)**
82
- - Statistiques descriptives générales,
83
- - Comparaisons _démissionnaires_ vs _non-démissionnaires_,
84
- - Visualisation des distributions et corrélations,
85
- - Identification de pistes d’explication à tester dans le modèle.
86
-
87
- 4. **Modélisation**
88
- - Séparation train/test,
89
- - Entraînement de plusieurs modèles de classification (Dummy, Logistic Regression, Random Forest),
90
- - Recherche d’hyperparamètres,
91
- - Évaluation via des métriques adaptées (PR AUC, ROC-AUC, AUC, Précision, Rappel, F1-score, Seuil de décision )
92
-
93
- 5. **Interprétabilité**
94
- - Utilisation de **SHAP** pour comprendre l’impact des variables,
95
- - Analyse globale (features les plus importantes),
96
- - Analyse locale (explication de cas particuliers).
97
-
98
- 6. **Restitution**
99
- - Synthèse des résultats pour les RH,
100
- - Recommandations opérationnelles et pistes d’actions.
101
-
102
- ---
103
- <a id="-structure-du-dépôt"></a>
104
- ## Structure du dépôt
105
-
106
- ```text
107
- .
108
- ├── src/
109
- │ ├── __init__.py
110
- │ ├── data_preparation.py. # chargement & split X/y (données traitées)
111
- │ ├── train_model.py # entraînement + sauvegarde artefact
112
- │ └── utils.py # utilitaires (chargement modèle, prédiction unitaire)
113
- ├── tests/
114
- │ ├── test_data_preparation.py
115
- │ └── test_predict.py
116
- ├── models/ # artefact modèle
117
- ├── data/
118
- │ ├── raw/ # fichiers brutsv(privé, ignoré) – .gitkeep
119
- │ └── processed/ # données traités (visibles)
120
- ├── notebooks/
121
- │ ├── 01_analyse_exploratoire.ipynb
122
- │ ├── 02_preprocessing.ipynb
123
- │ └── 03_modelisation.ipynb
124
- ├── reports
125
- ├── main.py # entraînement
126
- ��── pyproject.toml # configuration de l'environnement & dépendances
127
- ├── requirements.txt. # exporté depuis uv
128
- ├── README.md
129
- ├── .gitignore
130
- └── uv.lock # verrouillage précis des versions
131
-
132
- ```
133
- <a id="-mise-en-place-du-modèle"></a>
134
-
135
- ## Mise en place du modèle
136
-
137
- 1. **Chargement et préparation**
138
-
139
- - Import des trois extraits (SIRH, performance, sondage),
140
-
141
- - Jointure sur l’identifiant employé,
142
-
143
- - Construction de la variable cible (attrition).
144
-
145
- 2. **Prétraitement**
146
-
147
- - Gestion des valeurs manquantes,
148
-
149
- - Encodage des variables catégorielles (One-Hot, Ordinal, …),
150
-
151
- - Normalisation / standardisation de certaines variables,
152
-
153
- - Séparation train/test.
154
-
155
- 3. **Modélisation**
156
-
157
- Plusieurs modèles de classification sont testés :
158
-
159
- - Régression Logistique
160
-
161
- - Random Forest
162
-
163
- - Dummy
164
-
165
- **Évaluation à l’aide de :**
166
-
167
- - Accuracy
168
-
169
- - Precision / Recall
170
-
171
- - F1-score
172
-
173
- - ROC-AUC
174
-
175
- - PR AUC
176
-
177
- - Matrices de confusion et courbes ROC/PR
178
-
179
- Le modèle final retenu est celui offrant **le meilleur compromis entre performance et interprétabilité** pour les RH.
180
 
181
- ---
182
- <a id="-interprétabilité-avec-shap"></a>
183
- ## Interprétabilité avec SHAP
184
-
185
- - Importance globale des variables: Quelles caractéristiques influencent le plus la probabilité de démission ? (summary plot)
186
-
187
- - Explication de cas individuels: Pourquoi tel employé est-il jugé “à risque” par le modèle ? (force plot)
188
-
189
- - Aide à la décision RH: leviers d’action (ajustement salarial, mobilité interne, charge de travail, reconnaissance, etc.)
190
-
191
- ---
192
- <a id="-installation"></a>
193
- ## Installation
194
-
195
- **Prérequis**
196
-
197
- - Python 3.10+
198
-
199
- - git
200
-
201
- - [uv](https://github.com/astral-sh/uv)
202
-
203
- ## Étapes d’installation
204
-
205
- 1. **Cloner le dépôt**
206
-
207
- ```bash
208
- git clone https://github.com/veranoscience/OpenclassroomsProject.git
209
-
210
- cd OpenclassroomsProject
211
- ```
212
-
213
- 2. **Créer un environnement virtuel**
214
-
215
- ```bash
216
- uv venv && source .venv/bin/activate
217
- ```
218
-
219
- 3. **Installer les dépendances**
220
-
221
- ```bash
222
- uv sync
223
- ```
224
-
225
- ---
226
-
227
- <a id="-utilisation"></a>
228
- ## Utilisation
229
-
230
- 1. Lancer les notebooks
231
-
232
- Depuis la racine du projet, avec l’environnement activé :
233
-
234
- ```bash
235
- jupyter notebook
236
- ```
237
-
238
- Puis ouvrir:
239
-
240
- - `notebooks/01_analyse_exploratoire.ipynb` pour l’analyse exploratoire
241
-
242
- - `notebooks/02_preprocessing.ipynb` pour le nettoyage & feature engineering
243
-
244
- - `notebooks/03_modelisation.ipynb` pour la modélisation et SHAP
245
-
246
- Script (entrai&nement rapide)
247
-
248
- ```bash
249
- python main.py
250
- ```
251
- Un artefact est sauvegardé dans `models/model.joblib`
252
-
253
- ---
254
-
255
- ## Workflow Git (branches / commits / tags)
256
-
257
- - Branche principale : `main` (protégée)
258
- - Conventions de branches : `<type><-resume->`
259
- - Types : `feat`, `fix`, `docs`, `refactor`, `chore`, `test`, `data`
260
- - Examples : `docs/mise-a-jour-readme`
261
- - Commits descriptifs: `feat: ...`, `chore: ...`
262
- - Tags de version : `v0.1.0`, `v0.2.0`, ...
263
- - Créer : `git tag -a v0.1.0 -m "v0.1.0: base"`
264
- - Pousser : `git push origin v0.1.0`
265
-
266
- Résolution de conflits : utiliser l’outil intégré **VS Code**
267
- (Accept Current/Incoming → `git add .` → `git rebase --continue`).
268
-
269
- ## Authentification & Sécurité
270
-
271
- Aucun secret n’est committé
272
- **Compte GitHub** : 2FA activée, Secret Scanning & Dependabot activés.
273
-
274
- ---
275
-
276
- <a id="-livrables"></a>
277
- ## Livrables
278
-
279
- Le projet fournit :
280
-
281
- - **Code source** (notebooks + src/ + main.py)
282
-
283
- - **Environnement reproductible** : `pyproject.toml` (uv), `uv.lock`, `requirements.txt` exporté.
284
-
285
- - **README** complet (installation, utilisation, sécurité, workflow)
286
-
287
- - **Versioning** : historique de commits clair, branches dédiées, tags (ex. v0.1.0).
288
-
289
- - **Présentation** : `reports/` (PDF)
290
-
291
- ---
292
-
293
- ## Versioning / Changelog
294
-
295
- - Version courante : voir tags Git.
296
-
297
- - `CHANGELOG.md` pour tracer les évolutions :
298
-
299
- v0.1.0 — structure, dépendances, notebooks, entraînement minimal, SHAP.
300
-
301
- ---
302
 
303
- <a id="-auteur"></a>
304
- ## Auteur
305
 
306
- Kseniia Dautel
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Attrition API (FastAPI)
3
+ colorFrom: blue
4
+ colorTo: indigo
5
+ sdk: docker
6
+ app_port: 7860
7
+ pinned: false
8
+ license: mit
 
 
 
 
 
 
 
9
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
+ # Attrition API
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
+ FastAPI + scikit-learn (pipeline préproc + RandomForest).
14
+ Le modèle est chargé depuis le Hub : `veranoscience/attrition-model`.
15
 
16
+ - **Docs Swagger** : `/docs`
17
+ - **Healthcheck** : `/health`