technova-api / README.md
SteGONZALEZ's picture
documentation
fe0d439
|
Raw
History Blame Contribute Delete
5.83 kB
---
title: technova-api
sdk: docker
app_port: 7860
---
# TechNova Partners – Déploiement d’un modèle de Machine Learning
Ce projet met en œuvre le **déploiement d’un modèle de Machine Learning** de prédiction du **turnover employé** via une **API FastAPI**, connectée à une **base de données PostgreSQL**, et pilotée par un **dashboard Streamlit**.
L’objectif est de proposer une architecture **production-ready**, respectant les bonnes pratiques **MLOps** :
- séparation ingestion / préparation / inference,
- API sans logique de preprocessing,
- traçabilité des prédictions,
- tests automatisés,
- CI/CD,
- déploiement reproductible.
---
## Live API
Base URL:
https://stegonzalez-technova-api.hf.space
Swagger UI:
https://stegonzalez-technova-api.hf.space/docs
Health checks:
- /health
- /ready
---
## Architecture du projet
Projet_TechNova_Partners/
├── app/
│ ├── api.py # API FastAPI (routes, orchestration)
│ ├── database.py # Connexion DB (SQLAlchemy)
│ ├── main.py # Launcher API + Dashboard
│ ├── models.py # Modèles ORM
│ └── security.py # Sécurité via API Key
├── artifacts/
│ ├── modele_classification_technova.joblib # Modèle ML entraîné
│ └── threshold.json # Seuil de décision
├── dashboard/
│ ├── dshbd.py # Dashboard Streamlit
│ └── feature_schema.py # Schéma des features (source de vérité UI)
├── domain/
│ └── domain.py # Schémas Pydantic (ModelRequest / ModelResponse)
├── my-postgres/
│ └── docker-compose.yml # PostgreSQL via Docker
├── scripts/
│ ├── build_ml_features.py # Création des tables clean
│ ├── create_db.py # Création DB + tables (one-shot)
│ ├── seed_from_csv.py # Seed optionnel depuis CSV
│ ├── seed_ml_features.py # Nettoyage + feature engineering
│ ├── init_project_technova.py # Lance tous les scripts nécessaires
│ └── generate_docs.py # Génération de documentation
├── service/
│ └── technova_service.py # Logique ML (chargement modèle + prédiction)
├── tests/ # Tests Pytest
├── Dockerfile
├── pyproject.toml
├── .env
├── .env.example
└── README.md
---
---
## Principe de fonctionnement
### Séparation des pipelines
- Les **données brutes** sont stockées dans des tables dédiées.
- Un **pipeline de nettoyage et de transformation** est exécuté via des scripts indépendants.
- Les données transformées sont stockées dans des tables **clean**.
- **L’API consomme uniquement les tables clean**, directement compatibles avec le modèle.
**Aucun preprocessing n’est effectué dans l’API**.
Cette approche améliore :
- la performance,
- la robustesse,
- la reproductibilité,
- la conformité aux standards MLOps.
---
## API – Endpoints
### Sécurité
Tous les endpoints sont protégés par une **API Key**, transmise via le header :
X-API-Key: <API_KEY>
---
### 🔹 Prédiction – mode production (recommandé)
POST /predict/by-id/{employee_id}
- Récupère les features depuis la table **clean**
- Effectue la prédiction
- Enregistre la requête et la réponse en base
---
### 🔹 Prédiction – mode scoring (features prêtes)
POST /predict/by-features
- Attend des **features déjà préparées au format attendu par le modèle**
- Aucun nettoyage ou feature engineering dans l’API
- Utile pour intégration externe, tests ou scoring
---
### 🔹 Logs & monitoring
GET /predictions/latest
Retourne les dernières prédictions stockées en base.
GET /health
GET /ready
- `/health` : API disponible
- `/ready` : API + base de données + modèle opérationnels
---
## Dashboard Streamlit
Le dashboard permet :
- la saisie des features métier,
- l’appel à l’API,
- la visualisation des prédictions,
- la consultation de l’historique des prédictions stockées en base.
---
## Installation & exécution (Quickstart)
### 🔹 Cloner le projet
git clone <repo_url>
cd Projet_TechNova_Partners
### 🔹 Installer les dépendances
poetry install
### 🔹 Configurer l’environnement
cp .env.example .env
### 🔹 Lancer PostgreSQL via Docker
cd my-postgres
docker-compose up -d
### 🔹 Initialiser la base (une seule fois)
poetry run python scripts/init_project_technova.py
### 🔹 Lancer l’API et le dashboard
poetry run technova
### Accès
API : http://127.0.0.1:8000
Swagger : http://127.0.0.1:8000/docs
Dashboard : http://127.0.0.1:8501
---
## Example Request
curl -X POST "https://stegonzalez-technova-api.hf.hf.space/predict/by-features" \
-H "X-API-Key: technova-secret-2026" \
-H "Content-Type: application/json" \
-d '{"feature_1": 1.2, "feature_2": 0.8}'
## Tests & Qualité
## Lancement des tests
poetry run pytest
## Couverture de tests
poetry run pytest --cov=app --cov=service
. Couverture actuelle : > 90 %
. Tests exécutés sur SQLite pour rapidité et portabilité
. PostgreSQL utilisé pour le développement et la production
---
## CI/CD
CI :
. Tests et coverage exécutés automatiquement à chaque Pull Request
. Branche main protégée : merge bloqué si la CI échoue
CD :
. Build de l’image Docker après merge sur main
. Push automatique de l’image vers GitHub Container Registry (GHCR)
---
## Documentation
- [Accueil](docs/index.md)
- [Architecture](docs/architecture.md)
- [API](docs/api.md)
- [Base de données](docs/database.md)
## Auteur
Projet réalisé par Stéphane Gonzalez
Formation OpenClassrooms — Data Scientist / AI Engineer