agritech-api / database /README.md
github-actions
Deploy API from GitHub Actions
42dfbed
|
Raw
History Blame Contribute Delete
6.53 kB
# Base de données de monitoring — Agritech Answers
## Objectif
Cette base PostgreSQL permet de suivre le comportement de l’API en production dans une logique **MLOps**.
Elle centralise :
- les appels API
- les étapes internes du pipeline ML
- les prédictions produites
- le détail des recommandations
- les référentiels métier utilisés par l’API
- les distributions de référence utilisées pour le monitoring du drift
---
# Structure de la base
## Table `api_requests`
Table principale du monitoring.
**1 ligne = 1 appel API**
Cette table contient :
- l’endpoint appelé (`predict` ou `recommend`)
- le statut de la requête
- la latence de traitement
- le modèle utilisé
- les données d’entrée
- la réponse retournée par l’API
- les erreurs éventuelles
---
## Table `inference_steps`
Suivi technique détaillé du pipeline ML.
Cette table permet de tracer :
- la validation métier
- le feature engineering
- la prédiction
- le post-processing
- les erreurs techniques
- la durée de chaque étape
---
## Table `api_predictions`
Résumé métier des prédictions produites.
Cette table contient :
- le pays concerné
- la culture prédite ou recommandée
- le rendement estimé
- le type de prédiction (`predict` ou `recommend`)
- le nombre de candidats évalués
---
## Table `api_recommendation_details`
Détail complet du classement des recommandations.
**1 ligne = 1 culture candidate du Top K**
Cette table permet de conserver :
- le rang de la culture
- la culture recommandée
- le rendement estimé
---
## Table `country_crop_mapping`
Référentiel métier des associations pays / cultures.
Cette table est générée automatiquement depuis le jeu d’entraînement afin de garantir :
- la cohérence des recommandations
- l’absence de fuite de données
- l’utilisation exclusive des cultures réellement observées
Elle est utilisée par l’API pour :
- valider les entrées utilisateur
- limiter les recommandations aux cultures plausibles
---
## Table `reference_distributions`
Référentiel de distributions utilisé pour le monitoring du drift.
Cette table stocke les valeurs de référence issues du jeu d’entraînement pour :
### Variables numériques
- `temp`
- `rainfall_mm`
- `pesticides`
- `trend`
### Variables catégorielles
- `area`
- `item`
Elle permet :
- le calcul du PSI (Population Stability Index)
- le suivi des distributions en production
- la détection de dérive des données
- le monitoring ML avancé
---
# Relations entre les tables
```mermaid
erDiagram
api_requests ||--o{ inference_steps : "décompose"
api_requests ||--o{ api_predictions : "produit"
api_requests ||--o{ api_recommendation_details : "détaille"
```
---
# Schéma de la base
```mermaid
erDiagram
api_requests ||--o{ inference_steps : "trace"
api_requests ||--o{ api_predictions : "produit"
api_requests ||--o{ api_recommendation_details : "detaille"
api_requests {
int id PK
datetime timestamp
string endpoint
int status_code
boolean success
string error_message
float latency_ms
string model_name
string model_version
string input_json
string output_json
}
inference_steps {
int id PK
int request_id FK
string step_name
boolean success
string error_message
float duration_ms
string details_json
}
api_predictions {
int id PK
int request_id FK
string area
string item
string recommended_crop
float predicted_yield
int n_candidates
string prediction_type
}
api_recommendation_details {
int id PK
int request_id FK
int rank
string item
float predicted_yield
}
country_crop_mapping {
int id PK
string area
string item
string source
datetime created_at
}
reference_distributions {
int id PK
string feature_name
string feature_value
string source
datetime created_at
}
```
---
# Initialisation
## 1. Créer la base PostgreSQL
```sql
CREATE DATABASE agritech_monitoring;
```
---
## 2. Exécuter le schéma SQL
```sql
\i database/schema.sql
```
---
# Génération des référentiels métier
## Mapping pays / cultures
Le mapping `country_crop_mapping` est généré automatiquement depuis le notebook de recommandation.
Cette étape permet de :
- construire les associations pays / cultures
- exporter le référentiel en JSON
- enregistrer les données en base PostgreSQL
Le référentiel est construit uniquement à partir du jeu d’entraînement afin d’éviter toute fuite de données.
---
## Distributions de référence
Les distributions de référence sont chargées via :
```bash
python -m scripts.load_reference_distributions
```
Ce script :
- lit le jeu d’entraînement
- extrait les variables suivies
- charge les distributions en base PostgreSQL
- prépare les données nécessaires au calcul du drift et du PSI
---
# Monitoring ML
Le système de monitoring permet de suivre :
## Monitoring système
- nombre de requêtes
- latence moyenne
- latence par endpoint
- latence par étape d’inférence
- erreurs récentes
- volume d’appels API
## Monitoring métier
- cultures les plus recommandées
- utilisation des endpoints
- suivi des prédictions
## Monitoring ML
- distributions des variables d’entrée
- dérive des données
- PSI (Population Stability Index)
- comparaison train vs production
---
# Utilisation dans l’API
La base est utilisée par l’API pour :
- tracer les appels utilisateurs
- suivre les performances du modèle
- analyser les erreurs
- monitorer les temps d’inférence
- conserver l’historique des recommandations
- valider les cultures disponibles selon les pays
- suivre la dérive des données en production
---
# Architecture MLOps
Cette base s’intègre dans une architecture MLOps comprenant :
- FastAPI
- PostgreSQL / Neon
- Docker
- Hugging Face Hub
- GitHub Actions
- Streamlit
- Streamlit Monitoring
---
# Objectif du monitoring
Le système de monitoring a pour objectif de :
- superviser les performances techniques
- suivre le comportement du modèle en production
- détecter les anomalies
- analyser les usages métier
- préparer une industrialisation MLOps complète