getaround

Python MLflow FastAPI Streamlit Docker Live CCDS |docs|


snap



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 /predict conforme aux spĂ©cifications ci-dessus. Il doit ĂȘtre possible d’interroger l’endpoint /predict via curl :
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 :

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 :

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.