GetAround Pricing API

Prédiction du prix journalier par Machine Learning

v1.0.0 — Gradient Boosting
0.75
R2 Score ?
10.29
MAE (EUR) ?
16.22
RMSE (EUR) ?
4 843
Véhicules ?

Constructeur de requête interactif

Construisez votre requête avec les menus ci-dessous, observez le JSON généré en temps réel puis envoyez-le à l'endpoint /predict.

140 000 km
135 ch
Le JSON ci-dessus est celui qui sera envoyé au serveur avec l'en-tête Content-Type: application/json.
En attente d'une requête…

Endpoints disponibles

MéthodeRouteDescription
POST /predict Prédiction du prix journalier à partir de 13 features. Renvoie {"prediction": [float]}.
GET / Page d'accueil (cette page) avec le constructeur de requête interactif.
GET /docs Documentation HTML conçue pour un lecteur humain : tableau des features, exemples curl et Python commentés.
GET /swagger Interface Swagger UI interactive. Branchée sur /openapi.json. Permet de tester la requête avec "Try it out".
GET /openapi.json Descripteur OpenAPI 3.1 brut (JSON). Lisible par n'importe quel client OpenAPI : Postman, Insomnia, generation de SDK.

FAQ technique

Cliquez sur une question pour afficher la réponse.

Pourquoi un Gradient Boosting et pas un réseau de neurones ?

Dataset de 4 843 lignes, pas assez pour un réseau profond. Le Gradient Boosting gère très bien les données tabulaires mixtes (numériques et catégorielles), reste interprétable grâce à la feature importance, s'entraîne en quelques secondes et se déploie dans un fichier joblib de moins de 2 Mo. Régression linéaire testée en baseline : R² 0.69. Gradient Boosting : R² 0.75 sur le test set.

Que se passe-t-il si j'envoie une marque inconnue, par exemple "Tesla" ?

Le OneHotEncoder est configuré avec handle_unknown='ignore' : toutes les variables one-hot de cette marque tombent à 0, le modèle s'appuie alors uniquement sur les autres features (puissance, kilométrage, options). Pas de crash, pas d'erreur HTTP 500, juste une prédiction légèrement moins précise.

Comment le JSON est-il validé avant d'arriver au modèle ?

Pydantic vérifie la structure à l'entrée de FastAPI : clé input présente, liste de listes. Si le body est mal formé, FastAPI renvoie un HTTP 422 avec le détail de l'erreur. Ensuite, les valeurs arrivent dans une pipeline scikit-learn qui applique le preprocessing (StandardScaler, OneHotEncoder) puis prédit.

Pourquoi le body est une liste de listes et pas un objet nommé ?

Choix délibéré : permet d'envoyer plusieurs véhicules en une seule requête (batch). Par exemple 100 véhicules d'un coup, une seule aller-retour réseau, plus performant en production. Le compromis est la lisibilité : l'ordre des 13 features est critique, c'est pour ça que la page /docs détaille le tableau ordonné.

L'API est-elle sécurisée ?

Cette instance est en mode démo : pas d'authentification, pas de rate limiting, HTTPS activé par défaut via Hugging Face. Pour une mise en production réelle : ajouter une API key via fastapi.security, déployer derrière un API Gateway (AWS ou Cloudflare) avec quotas, et versionner les modèles via MLflow Model Registry plutôt qu'un fichier joblib figé.

Comment le modèle est-il versionné ?

MLflow tracke chaque entraînement localement (dossier mlruns/ du notebook). Deux runs sont enregistrés : linear_regression et gradient_boosting, avec paramètres, métriques (R², MAE, RMSE) et pipeline complet loggé. Pour cette démo, le modèle retenu est exporté via joblib.dump(pipeline, 'model.joblib') et chargé au démarrage de l'API.

Pourquoi la couleur est dans le modèle si son impact est quasi nul ?

Le dataset la fournit, donc elle passe dans le pipeline. Le Gradient Boosting l'utilise comme signal faible (importance < 1 %). La retirer aurait nécessité une étape de feature selection explicite, non priorisée ici. En production : on auditerait le dataset, on retirerait cette feature et on aurait un modèle plus simple, sans perte mesurable de performance.

Quelle latence typique pour une prédiction ?

Environ 150 à 300 ms pour un véhicule (réseau + sérialisation + preprocessing + prédiction), essentiellement la latence réseau vers Hugging Face. Le calcul ML pur prend moins de 5 ms. En batch, le coût marginal par véhicule supplémentaire est négligeable.

Que renvoie chaque code HTTP ?

200 OK : prédiction réussie, corps = {"prediction": [...]}. 422 Unprocessable Entity : body JSON mal formé (clé input manquante, nombre de features incorrect, type invalide). 500 Internal Server Error : défaillance côté serveur (rare). Timeout : le Space Hugging Face dort, premier appel plus long (5 à 12 secondes) le temps du réveil.

Top 3 features (importance Gradient Boosting)

46%
Puissance moteur
27%
Kilométrage
5%
GPS