marintosti12
final rework
92a1fd3
---
title: "Deploy ML API"
emoji: "🚀"
colorFrom: "blue"
colorTo: "green"
sdk: "docker"
sdk_version: "latest"
app_file: "app.py"
pinned: false
---
📖 Présentation du projet
Cette API permet de prédire l’attrition des employés à partir de données RH.
Elle a pour objectif d’aider les équipes RH à identifier les risques de départ et mettre en place des actions préventives.
- 📊 **Lister** les modèles ML disponibles (`/`)
- 🤖 **Prédire** avec un modèle donné (`/predict`)
- 🗄️ **Sauvegarder** automatiquement les inputs et outputs en base
- 📚 **Documentation Swagger/OpenAPI** générée automatiquement
---
## 📦 Prérequis
- Python 3.12+
- [Poetry](gestion des dépendances)
- Docker (PostgreSQL local via Compose)
---
## Installation
### 1. Cloner le dépôt
~~~bash
git clone https://github.com/marintosti12/deploy-machine-learning.git
cd deploy-machine-learning
~~~
### 2. Créer un environnement virtuel avec Poetry
~~~bash
poetry install
~~~
### 3. Configurer l’environnement
Crée un fichier **.env** à la racine :
~~~env
# PostgreSQL
DATABASE_URL=postgresql+psycopg2://futu:futu_pass@localhost:5432/futurisys
# Hugging Face
HF_TOKEN= Token Hugging Face
HF_REPO_ID= Repo Hugging Face
~~~
### 4. Base de données (PostgreSQL)
~~~bash
sudo docker compose up -d
~~~
🗄️ Base de données
~~~mermaid
classDiagram
direction LR
class MLModel {
+String(36) id
+String name
+Text description
+DateTime created_at
+Boolean is_active
}
class MLInput {
+String(36) id
+DateTime created_at
+Int id_employee
+Int age
+String genre
+Int revenu_mensuel
+String statut_marital
+String departement
+String poste
+Int nombre_experiences_precedentes
+Int nombre_heures_travailless
+Int annee_experience_totale
+Int annees_dans_l_entreprise
+Int annees_dans_le_poste_actuel
+Int nombre_participation_pee
+Int nb_formations_suivies
+Int nombre_employee_sous_responsabilite
+Int code_sondage
+Int distance_domicile_travail
+Int niveau_education
+String domaine_etude
+String ayant_enfants
+String frequence_deplacement
+Int annees_depuis_la_derniere_promotion
+Int annes_sous_responsable_actuel
+Int satisfaction_employee_environnement
+Int note_evaluation_precedente
+Int niveau_hierarchique_poste
+Int satisfaction_employee_nature_travail
+Int satisfaction_employee_equipe
+Int satisfaction_employee_equilibre_pro_perso
+String eval_number
+Int note_evaluation_actuelle
+String heure_supplementaires
+Int augementation_salaire_precedente
}
class MLOutput {
+String(36) id
+DateTime created_at
+String(36) input_id (FK -> MLInput.id)
+String prediction
+Float prob
+String error
}
class EmployeeDataset {
+BigInteger id
+DateTime created_at
+Integer id_employee
+Integer age
+String genre
+Integer revenu_mensuel
+String statut_marital
+String departement
+String poste
+Integer nombre_experiences_precedentes
+Integer nombre_heures_travailless
+Integer annee_experience_totale
+Integer annees_dans_l_entreprise
+Integer annees_dans_le_poste_actuel
+Integer a_quitte_l_entreprise
+Integer nombre_participation_pee
+Integer nb_formations_suivies
+Integer nombre_employee_sous_responsabilite
+Integer code_sondage
+Integer distance_domicile_travail
+Integer niveau_education
+String domaine_etude
+String ayant_enfants
+String frequence_deplacement
+Integer annees_depuis_la_derniere_promotion
+Integer annes_sous_responsable_actuel
+Integer satisfaction_employee_environnement
+Integer note_evaluation_precedente
+Integer niveau_hierarchique_poste
+Integer satisfaction_employee_nature_travail
+Integer satisfaction_employee_equipe
+Integer satisfaction_employee_equilibre_pro_perso
+String eval_number
+Integer note_evaluation_actuelle
+String heure_supplementaires
+Integer augementation_salaire_precedente
+String source_file
}
%% Relations
MLInput "1" --> "0..*" MLOutput
~~~
### 5. Lancer Migrations
~~~bash
export DATABASE_URL='postgresql+asyncpg://futu:futu_pass@localhost:5432/futurisys'
poetry run alembic upgrade head
~~~
### 6. Lancer Seeder
~~~bash
export DATABASE_URL='postgresql+psycopg2://futu:futu_pass@localhost:5432/futurisys'
poetry run python src/seeds/ml_models_seed.py
~~~
### 7. Lancer l’API
~~~bash
poetry run uvicorn main:app --reload --app-dir src
~~~
### 8. Huggings Face
Pour générer les artefacts, exécuter les notebooks de machine learning.
Sur Hugging Face (Models), stocker les artefacts du modèle dans le dépôt du Space (models/) et nommer le fichier exactement comme le nom du modèle en base de données.
### 🧹 Qualité de code
**Lint :**
~~~bash
poetry run ruff check .
~~~
### 🧪 Tests & Couverture
**Lancer les tests :**
```bash
poetry run pytest --maxfail=1 --disable-warnings -q