Spaces:
Running
Running
Commit ·
e707bc9
1
Parent(s): d96476a
Docs: README.md update + adding .env.example file
Browse files- .env.example +7 -0
- README.md +100 -34
.env.example
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Fichier d'exemple pour la configuration de l'environnement de la base de données
|
| 2 |
+
# Copiez ce fichier en .env et remplissez les valeurs pour votre environnement local.
|
| 3 |
+
|
| 4 |
+
POSTGRES_USER=your_db_user
|
| 5 |
+
POSTGRES_PASSWORD=your_strong_password
|
| 6 |
+
POSTGRES_DB=your_db_name
|
| 7 |
+
DB_HOST_PORT=5432 # Port sur localhost pour accéder à la base de données
|
README.md
CHANGED
|
@@ -10,47 +10,77 @@ license: mit # Ou apache-2.0, etc. - Mettez la licence que vous souhaitez
|
|
| 10 |
|
| 11 |
# Projet : Prédiction de l'Attrition des Employés et API
|
| 12 |
|
| 13 |
-
Ce projet a pour objectif d'analyser les données RH afin de construire un modèle de Machine Learning capable de prédire le départ volontaire (attrition) des employés. Le modèle est ensuite exposé via une API RESTful construite avec FastAPI, prête à être déployée.
|
| 14 |
|
| 15 |
## 🎯 Objectifs
|
| 16 |
|
| 17 |
* **Analyser** les facteurs clés influençant l'attrition des employés.
|
| 18 |
* **Construire et Entraîner** un modèle de classification binaire performant.
|
| 19 |
* **Développer une API** pour obtenir des prédictions en temps réel pour un ou plusieurs employés.
|
| 20 |
-
* **
|
|
|
|
| 21 |
* **Déployer** l'API sur Hugging Face Spaces.
|
| 22 |
-
* *(Futur)* Intégrer les données avec une base de données PostgreSQL.
|
| 23 |
|
| 24 |
## 🛠️ Technologies Utilisées
|
| 25 |
|
| 26 |
* **Langage :** Python 3.12
|
| 27 |
* **Analyse & ML :** Pandas, NumPy, Scikit-learn, Joblib
|
| 28 |
* **API :** FastAPI, Uvicorn, Pydantic
|
|
|
|
| 29 |
* **Gestion de Dépendances :** Poetry
|
| 30 |
-
* **Conteneurisation :** Docker
|
| 31 |
* **Déploiement :** Hugging Face Spaces
|
|
|
|
| 32 |
|
| 33 |
## 📂 Structure du Projet
|
| 34 |
|
| 35 |
Le projet est organisé de la manière suivante :
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
-
|
| 38 |
-
* **`/notebooks`**: Pour l'exploration, les tests et la mise au point des modèles.
|
| 39 |
-
* **`/src`**: Le cœur de l'application Python.
|
| 40 |
-
* **`/src/data_processing`**: Scripts pour charger et prétraiter les données.
|
| 41 |
-
* **`/src/modeling`**: Scripts pour entraîner et utiliser le modèle.
|
| 42 |
-
* **`/src/api`**: Scripts définissant l'API FastAPI (endpoints, schémas).
|
| 43 |
-
* **`/models`**: Stocke les modèles entraînés (potentiellement via Git LFS).
|
| 44 |
-
* **`/tests`**: Contient les tests unitaires et d'intégration.
|
| 45 |
-
* **Fichiers Racine**: `pyproject.toml`, `Dockerfile`, `README.md`, etc., pour la configuration et la documentation.
|
| 46 |
-
|
| 47 |
-
## 🚀 Installation Locale
|
| 48 |
|
| 49 |
**Prérequis :**
|
| 50 |
|
| 51 |
* [Git](https://git-scm.com/)
|
| 52 |
* [Python 3.12+](https://www.python.org/)
|
| 53 |
-
* [Poetry](https://python-poetry.org/docs/#installation)
|
|
|
|
| 54 |
|
| 55 |
**Étapes :**
|
| 56 |
|
|
@@ -59,48 +89,84 @@ Le projet est organisé de la manière suivante :
|
|
| 59 |
git clone [URL_DE_VOTRE_REPO_GITHUB]
|
| 60 |
cd mon_projet_attrition
|
| 61 |
```
|
| 62 |
-
|
|
|
|
| 63 |
```bash
|
| 64 |
poetry install
|
| 65 |
```
|
| 66 |
-
|
| 67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
```bash
|
| 69 |
poetry shell
|
| 70 |
```
|
|
|
|
| 71 |
|
| 72 |
## 📈 Usage
|
| 73 |
|
| 74 |
-
*(Assurez-vous d'être dans l'environnement Poetry : `poetry shell`)*
|
| 75 |
|
| 76 |
-
1. **
|
| 77 |
-
|
| 78 |
```bash
|
| 79 |
python -m src.modeling.train_model
|
| 80 |
```
|
| 81 |
-
|
|
|
|
|
|
|
| 82 |
```bash
|
| 83 |
uvicorn src.api.main:app --reload
|
| 84 |
```
|
|
|
|
| 85 |
|
| 86 |
## 🔌 API Endpoints
|
| 87 |
|
| 88 |
-
Une fois l'API lancée
|
| 89 |
|
| 90 |
* **Documentation Interactive (Swagger UI) :** [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)
|
|
|
|
| 91 |
* **Health Check :** `GET /`
|
| 92 |
* **Prédiction Unique :** `POST /predict`
|
| 93 |
* **Prédiction en Masse :** `POST /predict_bulk`
|
| 94 |
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
Cette application est conçue pour être déployée sur [Hugging Face Spaces](https://huggingface.co/spaces) en utilisant le `Dockerfile` fourni.
|
| 98 |
-
|
| 99 |
-
## 💡 Améliorations Futures
|
| 100 |
|
| 101 |
-
|
| 102 |
-
* Mise en place d'un monitoring du modèle.
|
| 103 |
-
* Création d'une interface utilisateur simple.
|
| 104 |
-
* Ajout de tests unitaires et d'intégration.
|
| 105 |
|
| 106 |
-
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
# Projet : Prédiction de l'Attrition des Employés et API
|
| 12 |
|
| 13 |
+
Ce projet a pour objectif d'analyser les données RH afin de construire un modèle de Machine Learning capable de prédire le départ volontaire (attrition) des employés. Le modèle est ensuite exposé via une API RESTful construite avec FastAPI, prête à être déployée, et les interactions avec l'API sont enregistrées dans une base de données PostgreSQL.
|
| 14 |
|
| 15 |
## 🎯 Objectifs
|
| 16 |
|
| 17 |
* **Analyser** les facteurs clés influençant l'attrition des employés.
|
| 18 |
* **Construire et Entraîner** un modèle de classification binaire performant.
|
| 19 |
* **Développer une API** pour obtenir des prédictions en temps réel pour un ou plusieurs employés.
|
| 20 |
+
* **Intégrer une base de données PostgreSQL** pour la gestion des données d'entraînement et l'enregistrement des prédictions de l'API.
|
| 21 |
+
* **Conteneuriser** l'application avec Docker pour un déploiement facile de l'API.
|
| 22 |
* **Déployer** l'API sur Hugging Face Spaces.
|
|
|
|
| 23 |
|
| 24 |
## 🛠️ Technologies Utilisées
|
| 25 |
|
| 26 |
* **Langage :** Python 3.12
|
| 27 |
* **Analyse & ML :** Pandas, NumPy, Scikit-learn, Joblib
|
| 28 |
* **API :** FastAPI, Uvicorn, Pydantic
|
| 29 |
+
* **Base de Données :** PostgreSQL, SQLAlchemy
|
| 30 |
* **Gestion de Dépendances :** Poetry
|
| 31 |
+
* **Conteneurisation :** Docker, Docker Compose (pour la BDD locale)
|
| 32 |
* **Déploiement :** Hugging Face Spaces
|
| 33 |
+
* **CI/CD :** GitHub Actions
|
| 34 |
|
| 35 |
## 📂 Structure du Projet
|
| 36 |
|
| 37 |
Le projet est organisé de la manière suivante :
|
| 38 |
+
```
|
| 39 |
+
mon_projet_attrition/
|
| 40 |
+
│
|
| 41 |
+
├── .github/
|
| 42 |
+
│ └── workflows/
|
| 43 |
+
│ └── ci.yml # Workflow d'Intégration Continue
|
| 44 |
+
├── .gitignore
|
| 45 |
+
├── README.md # Ce fichier
|
| 46 |
+
├── pyproject.toml # Dépendances et configuration Poetry
|
| 47 |
+
├── poetry.lock
|
| 48 |
+
├── requirements.txt # Export pour Docker/HF
|
| 49 |
+
├── Dockerfile # Fichier de build Docker pour l'API
|
| 50 |
+
├── docker-compose.yml # Pour lancer PostgreSQL localement
|
| 51 |
+
├── .env.example # Fichier d'exemple pour les variables d'environnement
|
| 52 |
+
│
|
| 53 |
+
├── data/
|
| 54 |
+
│ └── raw/ # Données brutes CSV (source initiale)
|
| 55 |
+
│
|
| 56 |
+
├── notebooks/ # Notebooks d'exploration et de tests initiaux
|
| 57 |
+
│
|
| 58 |
+
├── src/
|
| 59 |
+
│ ├── init.py
|
| 60 |
+
│ ├── api/ # Code de l'API FastAPI (main.py, schemas.py)
|
| 61 |
+
│ ├── config.py # Configurations globales (chemins, params, mappings)
|
| 62 |
+
│ ├── data_processing/ # Modules de chargement et preprocessing
|
| 63 |
+
│ ├── database/ # Modules liés à la base de données (setup, models, init_db)
|
| 64 |
+
│ └── modeling/ # Modules d'entraînement et prédiction du modèle
|
| 65 |
+
│
|
| 66 |
+
├── models/ # Modèles ML entraînés (ex: .joblib)
|
| 67 |
+
│
|
| 68 |
+
├── scripts/ # Scripts utilitaires (ex: peuplement de la BDD)
|
| 69 |
+
│ └── populate_employees_table.py
|
| 70 |
+
│
|
| 71 |
+
└── tests/
|
| 72 |
+
├── unit/ # Tests unitaires
|
| 73 |
+
└── functional/ # Tests fonctionnels/API
|
| 74 |
+
```
|
| 75 |
|
| 76 |
+
## 🚀 Installation et Configuration Locale
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
|
| 78 |
**Prérequis :**
|
| 79 |
|
| 80 |
* [Git](https://git-scm.com/)
|
| 81 |
* [Python 3.12+](https://www.python.org/)
|
| 82 |
+
* [Poetry](https://python-poetry.org/docs/#installation) (pour la gestion des dépendances Python)
|
| 83 |
+
* [Docker Desktop](https://www.docker.com/products/docker-desktop/) (ou Docker Engine + Docker Compose séparément sur Linux) pour la base de données PostgreSQL.
|
| 84 |
|
| 85 |
**Étapes :**
|
| 86 |
|
|
|
|
| 89 |
git clone [URL_DE_VOTRE_REPO_GITHUB]
|
| 90 |
cd mon_projet_attrition
|
| 91 |
```
|
| 92 |
+
|
| 93 |
+
2. **Installez les dépendances Python avec Poetry :**
|
| 94 |
```bash
|
| 95 |
poetry install
|
| 96 |
```
|
| 97 |
+
*(Cela créera un environnement virtuel et installera toutes les dépendances listées dans `pyproject.toml`)*.
|
| 98 |
+
|
| 99 |
+
3. **Configurez les Variables d'Environnement pour la Base de Données :**
|
| 100 |
+
* Copiez le fichier d'exemple `.env.example` en `.env` :
|
| 101 |
+
```bash
|
| 102 |
+
cp .env.example .env
|
| 103 |
+
```
|
| 104 |
+
* Modifiez le fichier `.env` avec vos propres identifiants pour la base de données locale. Ce fichier est ignoré par Git.
|
| 105 |
+
```env
|
| 106 |
+
# .env - VOS SECRETS LOCAUX
|
| 107 |
+
POSTGRES_USER=votre_user_pg
|
| 108 |
+
POSTGRES_PASSWORD=votre_mot_de_passe_pg_solide
|
| 109 |
+
POSTGRES_DB=attrition_db_dev
|
| 110 |
+
DB_HOST_PORT=5432
|
| 111 |
+
```
|
| 112 |
+
|
| 113 |
+
4. **Démarrez le Service PostgreSQL avec Docker Compose :**
|
| 114 |
+
Assurez-vous que Docker Desktop est en cours d'exécution.
|
| 115 |
+
```bash
|
| 116 |
+
docker-compose up -d
|
| 117 |
+
```
|
| 118 |
+
* Pour arrêter le service : `docker-compose down`
|
| 119 |
+
* Pour voir les logs de la base de données : `docker-compose logs db`
|
| 120 |
+
|
| 121 |
+
5. **Initialisez la Base de Données (Création des Tables) :**
|
| 122 |
+
Activez d'abord l'environnement Poetry si ce n'est pas déjà fait (`poetry shell`).
|
| 123 |
+
```bash
|
| 124 |
+
poetry run python -m src.database.init_db
|
| 125 |
+
```
|
| 126 |
+
|
| 127 |
+
6. **Peuplez la Table `employees` (Données Initiales) :**
|
| 128 |
+
Ce script charge les données des CSV, les nettoie et les insère dans la table `employees`.
|
| 129 |
+
```bash
|
| 130 |
+
poetry run python -m scripts.populate_employees_table
|
| 131 |
+
```
|
| 132 |
+
|
| 133 |
+
7. **Activez l'Environnement Virtuel Poetry (si pas déjà fait) :**
|
| 134 |
```bash
|
| 135 |
poetry shell
|
| 136 |
```
|
| 137 |
+
*(Votre terminal est maintenant configuré pour utiliser l'interpréteur Python et les librairies de cet environnement).*
|
| 138 |
|
| 139 |
## 📈 Usage
|
| 140 |
|
| 141 |
+
*(Assurez-vous d'être dans l'environnement Poetry : `poetry shell`, et que votre base de données PostgreSQL Docker est démarrée).*
|
| 142 |
|
| 143 |
+
1. **Entraîner le modèle :**
|
| 144 |
+
Le modèle sera entraîné en utilisant les données de la table `employees` de votre base PostgreSQL.
|
| 145 |
```bash
|
| 146 |
python -m src.modeling.train_model
|
| 147 |
```
|
| 148 |
+
*(Le modèle entraîné est sauvegardé dans `models/`)*.
|
| 149 |
+
|
| 150 |
+
2. **Lancer l'API FastAPI :**
|
| 151 |
```bash
|
| 152 |
uvicorn src.api.main:app --reload
|
| 153 |
```
|
| 154 |
+
*(Le serveur démarrera sur `http://127.0.0.1:8000`. `--reload` permet le redémarrage automatique lors de modifications).*
|
| 155 |
|
| 156 |
## 🔌 API Endpoints
|
| 157 |
|
| 158 |
+
Une fois l'API lancée :
|
| 159 |
|
| 160 |
* **Documentation Interactive (Swagger UI) :** [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)
|
| 161 |
+
* Explorez et testez les endpoints ici.
|
| 162 |
* **Health Check :** `GET /`
|
| 163 |
* **Prédiction Unique :** `POST /predict`
|
| 164 |
* **Prédiction en Masse :** `POST /predict_bulk`
|
| 165 |
|
| 166 |
+
Les appels à `/predict` et `/predict_bulk` sont enregistrés dans la table `api_prediction_logs` de la base de données PostgreSQL.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
|
| 168 |
+
## ✅ Tests
|
|
|
|
|
|
|
|
|
|
| 169 |
|
| 170 |
+
Pour lancer la suite de tests (unitaires et fonctionnels) :
|
| 171 |
+
```bash
|
| 172 |
+
poetry run pytest
|