veranoscience commited on
Commit
6ccf152
·
1 Parent(s): c6ebe06

space: sync from mon_projet (pyproject, Dockerfile, server, README)

Browse files
Files changed (2) hide show
  1. README.md +301 -12
  2. pyproject.toml +0 -1
README.md CHANGED
@@ -1,17 +1,306 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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`
 
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
 
pyproject.toml CHANGED
@@ -20,7 +20,6 @@ dependencies = [
20
  "scikit-learn>=1.7.2",
21
  "scipy>=1.16.3",
22
  "seaborn>=0.13.2",
23
- "shap>=0.49.1",
24
  "joblib>=1.4.0",
25
  "uvicorn>=0.38.0",
26
  "huggingface_hub>=0.24.0"
 
20
  "scikit-learn>=1.7.2",
21
  "scipy>=1.16.3",
22
  "seaborn>=0.13.2",
 
23
  "joblib>=1.4.0",
24
  "uvicorn>=0.38.0",
25
  "huggingface_hub>=0.24.0"