getaround
|docs|
Projet d'évaluation des impacts de retard sur les locations de getaround.
Description et contexte du projet
GetAround est lâĂ©quivalent dâAirbnb pour les voitures. Il est possible de louer des vĂ©hicules appartenant Ă des particuliers pour quelques heures ou plusieurs jours. FondĂ©e en 2009, cette entreprise a connu une croissance rapide. En 2019, elle comptait plus de 5 millions dâutilisateurs et environ 20 000 vĂ©hicules disponibles dans le monde.
En tant que partenaire de Jedha, GetAround a proposé le challenge suivant :
Contexte
Lors de la location dâun vĂ©hicule, les utilisateurs doivent rĂ©aliser :
- un check-in au début de la location,
- un check-out Ă la fin de la location,
afin de :
- Ă©valuer lâĂ©tat du vĂ©hicule et signaler aux autres parties les dommages prĂ©existants ou survenus pendant la location ;
- comparer les niveaux de carburant ;
- mesurer le nombre de kilomĂštres parcourus.
Le check-in et le check-out peuvent ĂȘtre rĂ©alisĂ©s selon trois modalitĂ©s distinctes :
- đ± Mobile : contrat de location signĂ© via lâapplication mobile, le conducteur et le propriĂ©taire se rencontrent et signent tous deux sur le smartphone du propriĂ©taire ;
- Connect : le conducteur ne rencontre pas le propriĂ©taire et ouvre le vĂ©hicule Ă lâaide de son smartphone ;
- đ Papier : contrat papier (cas nĂ©gligeable).
Projet đ§
Pour cette Ă©tude de cas, nous vous proposons de vous placer dans notre situation et de reproduire une analyse que nous avons menĂ©e en 2017 đźđȘ
Sur GetAround, les conducteurs rĂ©servent des vĂ©hicules pour une pĂ©riode donnĂ©e, allant dâune heure Ă plusieurs jours. Ils sont censĂ©s restituer le vĂ©hicule Ă lâheure prĂ©vue, mais il arrive que certains conducteurs soient en retard lors du check-out.
Ces retards peuvent gĂ©nĂ©rer une forte friction pour le conducteur suivant lorsque le vĂ©hicule est relouĂ© le mĂȘme jour. Le service client rapporte frĂ©quemment des utilisateurs mĂ©contents ayant dĂ» attendre le retour du vĂ©hicule depuis la location prĂ©cĂ©dente, voire contraints dâannuler leur rĂ©servation parce que le vĂ©hicule nâavait pas Ă©tĂ© restituĂ© Ă temps.
Objectifs đŻ
Afin de limiter ces problĂšmes, nous avons dĂ©cidĂ© dâimplĂ©menter un dĂ©lai minimum entre deux locations. Un vĂ©hicule ne sera pas affichĂ© dans les rĂ©sultats de recherche si les heures de check-in ou de check-out demandĂ©es sont trop proches dâune location dĂ©jĂ existante.
Cette solution permet de réduire les problÚmes de retard au check-out, mais elle peut également impacter négativement les revenus de GetAround et des propriétaires : il est donc nécessaire de trouver le bon compromis.
Notre Product Manager doit encore trancher sur les points suivants :
- seuil : quelle doit ĂȘtre la durĂ©e minimale du dĂ©lai entre deux locations ?
- périmÚtre : faut-il activer cette fonctionnalité pour tous les véhicules ou uniquement pour les véhicules Connect ?
Afin de lâaider Ă prendre la bonne dĂ©cision, il vous est demandĂ© de produire des analyses de donnĂ©es pertinentes. Voici quelques premiĂšres pistes de rĂ©flexion pour lancer la discussion (nâhĂ©sitez pas Ă approfondir avec des analyses supplĂ©mentaires) :
- Quelle part des revenus des propriétaires serait potentiellement affectée par cette fonctionnalité ?
- Combien de locations seraient impactées en fonction du seuil et du périmÚtre choisis ?
- Ă quelle frĂ©quence les conducteurs sont-ils en retard pour le check-in suivant ? Quel est lâimpact pour le conducteur suivant ?
- Combien de situations problématiques seraient résolues selon le seuil et le périmÚtre retenus ?
Tableau de bord web
Commencez par construire un dashboard destinĂ© Ă aider lâĂ©quipe Produit Ă rĂ©pondre aux questions ci-dessus. Vous pouvez utiliser streamlit ou toute autre technologie que vous jugerez appropriĂ©e.
Machine Learning â endpoint /predict
En complĂ©ment des analyses prĂ©cĂ©dentes, lâĂ©quipe Data Science travaille sur un sujet dâoptimisation de la tarification. Des donnĂ©es ont Ă©tĂ© collectĂ©es afin de proposer des prix optimaux aux propriĂ©taires Ă lâaide de modĂšles de Machine Learning.
Vous devez fournir au minimum un endpoint /predict. LâURL complĂšte pourrait par exemple ĂȘtre : https://your-url.com/predict.
Cet endpoint doit accepter des requĂȘtes POST avec des donnĂ©es dâentrĂ©e au format JSON et retourner les prĂ©dictions correspondantes. On suppose que les donnĂ©es dâentrĂ©e sont toujours correctement formatĂ©es ; la gestion des erreurs est donc optionnelle.
Exemple dâentrĂ©e :
{
"input": [[7.0, 0.27, 0.36, 20.7, 0.045, 45.0, 170.0, 1.001, 3.0, 0.45, 8.8],
[7.0, 0.27, 0.36, 20.7, 0.045, 45.0, 170.0, 1.001, 3.0, 0.45, 8.8]]
}
La réponse attendue est un JSON contenant une clé prediction correspondant aux valeurs prédites.
Exemple de réponse :
{
"prediction": [6, 6]
}
Page de documentation
Vous devez fournir aux utilisateurs une documentation décrivant votre API.
Cette documentation doit ĂȘtre accessible Ă lâURL /docs de votre site (par exemple : https://your-url.com/docs).
Cette documentation devra au minimum contenir :
- un titre de niveau h1 (le titre est libre) ;
- une description de chaque endpoint disponible, prĂ©cisant le nom de lâendpoint, la mĂ©thode HTTP, les entrĂ©es requises et les sorties attendues (des exemples peuvent ĂȘtre fournis).
Vous ĂȘtes libre dâajouter toute information pertinente et de styliser la page HTML comme vous le souhaitez.
Mise en production en ligne
Vous devez hĂ©berger votre API en ligne. Nous vous recommandons dâutiliser Hugging Face, qui est gratuit, mais vous pouvez choisir tout autre fournisseur dâhĂ©bergement.
Aides đŠź
Pour vous aider à démarrer ce projet, voici quelques recommandations :
- prenez le temps de bien comprendre les données ;
- ne nĂ©gligez pas la phase dâanalyse de donnĂ©es, qui recĂšle de nombreux enseignements ;
- lâanalyse de donnĂ©es devrait prendre entre 2 et 5 heures ;
- la partie Machine Learning devrait prendre entre 3 et 6 heures ;
- lâutilisation dâoutils de gestion du cycle de vie des modĂšles (comme
mlflow) nâest pas obligatoire mais fortement recommandĂ©e.
Partage du code
Afin de permettre lâĂ©valuation, nâoubliez pas de partager votre code dans un dĂ©pĂŽt GitHub. Vous pouvez y inclure un fichier README.md dĂ©crivant briĂšvement le projet, la procĂ©dure dâinstallation locale et lâURL de la version en ligne.
Livrables đŹ
Pour valider ce projet, vous devrez fournir :
- un dashboard déployé en production (accessible via une page web) ;
- lâensemble du code source dans un dĂ©pĂŽt GitHub, dont vous fournirez lâURL ;
- une API documentée et accessible en ligne (Hugging Face ou autre) contenant au moins un endpoint
/predictconforme aux spĂ©cifications ci-dessus. Il doit ĂȘtre possible dâinterroger lâendpoint/predictviacurl:
curl -i -H "Content-Type: application/json" -X POST -d '{"input": [[7.0, 0.27, 0.36, 20.7, 0.045, 45.0, 170.0, 1.001, 3.0, 0.45, 8.8]]}' http://your-url/predict
Ou en Python :
import requests
response = requests.post("https://your-url/predict", json={
"input": [[7.0, 0.27, 0.36, 20.7, 0.045, 45.0, 170.0, 1.001, 3.0, 0.45, 8.8]]
})
print(response.json())
Données
Deux fichiers de données sont nécessaires :
- Delay Analysis đ Analyse de donnĂ©es
- Pricing Optimization đ Machine Learning
Bon courage et bon code đ©âđ»
Organisation du projet
Structure du projet
Le projet est inclus dans ce dépÎt et il a la structure de fichier suivante :
âââ LICENSE <- Licence open source ici MIT
âââ Makefile <- Makefile avec des commandes pratiques comme `make data` ou `make train`
âââ README.md <- README principal du projet Ă destination des dĂ©veloppeurs
âââ data
â âââ external <- DonnĂ©es provenant de sources tierces
â âââ interim <- DonnĂ©es intermĂ©diaires ayant dĂ©jĂ subi des transformations
â âââ processed <- Jeux de donnĂ©es finaux et canoniques utilisĂ©s pour la modĂ©lisation
â âââ raw <- DonnĂ©es brutes dâorigine, immuables
â
âââ docs <- Projet mkdocs par dĂ©faut ; voir www.mkdocs.org pour plus de dĂ©tails
â
âââ models <- ModĂšles entraĂźnĂ©s et sĂ©rialisĂ©s, prĂ©dictions des modĂšles ou rĂ©sumĂ©s
â
âââ notebooks <- Notebooks Jupyter. Convention de nommage : un numĂ©ro (pour lâordre),
â les initiales de lâauteur, et une courte description sĂ©parĂ©e par des `-`,
â par exemple : `1.0-jqp-exploration-initiale-des-donnees`
â
âââ pyproject.toml <- Fichier de configuration du projet avec les mĂ©tadonnĂ©es du package
â getaround et la configuration dâoutils comme black
â
âââ references <- Dictionnaires de donnĂ©es, manuels et autres documents explicatifs
â
âââ reports <- Analyses gĂ©nĂ©rĂ©es (HTML, PDF, LaTeX, etc.)
â âââ figures <- Graphiques et figures gĂ©nĂ©rĂ©s pour les rapports
â
âââ requirements.txt <- Fichier des dĂ©pendances pour reproduire lâenvironnement dâanalyse,
â par exemple gĂ©nĂ©rĂ© avec `pip freeze > requirements.txt`
â
âââ setup.cfg <- Fichier de configuration pour flake8
â
âââ getaround <- Code source utilisĂ© dans ce projet
â
âââ __init__.py <- DĂ©clare getaround comme un module Python
â
âââ config.py <- Stockage des variables utiles et de la configuration
â
âââ dataset.py <- Scripts pour tĂ©lĂ©charger ou gĂ©nĂ©rer les donnĂ©es
â
âââ features.py <- Code de construction des features pour la modĂ©lisation
â
âââ modeling
â âââ __init__.py
â âââ predict.py <- Code pour exĂ©cuter lâinfĂ©rence avec des modĂšles entraĂźnĂ©s
â âââ train.py <- Code dâentraĂźnement des modĂšles
â
âââ plots.py <- Code pour crĂ©er des visualisations
Données
Les données du projet sont rangées dans le repertoire data/raw :
- data/raw/get_around_delay_analysis.xlsx : Données pour l'analyse des retards
- data/raw/get_around_pricing_project.csv : Données pour l'optimisation des retards
Point d'entrée
Le point d'entrée pour l'analyse du projet est le notebook : 01-Getaround_analysis_FR.ipynb.
Le point d'entrée pour l'entraßnement des modÚles est le script : train_model.py.
Le point d'entrée pour les prédictions des modÚles est le script : predict_model.py.
Le point d'entrée pour l'API webservice des modÚles est le script : getaround_api.py.