SaidaAourras/Pr-diction-du-Temps-de-Livraison
Machine learning regression pipeline to predict delivery time using feature engineering, GridSearchCV optimization, automated testing and CI with GitHub Actions.
📦 Modèle de Prédiction du Temps de Livraison
🎯 Vue d'ensemble du projet
Ce projet vise à développer un modèle de Machine Learning capable de prédire le temps total d'une livraison, depuis la commande jusqu'à la réception. L'objectif est de permettre à l'entreprise de logistique et de livraison d'anticiper les retards, d'informer les clients en temps réel et d'optimiser l'organisation des tournées.
🚀 Objectifs principaux
- Développer une preuve de concept fiable et automatisée
- Remplacer les estimations manuelles par des prédictions basées sur le ML
- Réduire les retards et améliorer la satisfaction client
- Optimiser les tournées de livraison
📊 Contexte et Problématique
Situation actuelle
- ❌ Estimations de temps de livraison faites manuellement
- ❌ Pas de modèle de prédiction fiable
- ❌ Suivi des expérimentations absent
- ❌ Retards fréquents créant une insatisfaction client
Variables d'entrée
Le modèle prend en compte les facteurs suivants :
| Variable | Type | Description |
|---|---|---|
Distance_km |
Numérique | Distance entre le restaurant et l'adresse de livraison |
Traffic_Level |
Catégorie | Niveau de trafic (faible, moyen, élevé) |
Vehicle_Type |
Catégorie | Type de véhicule utilisé (vélo, scooter, voiture) |
Time_of_Day |
Catégorie | Heure de la journée (matin, midi, soir, nuit) |
Courier_Experience |
Numérique | Années d'expérience du livreur |
Weather |
Catégorie | Conditions météorologiques |
Preparation_Time |
Numérique | Temps de préparation de la commande |
Variable cible
DeliveryTime: Temps total de livraison (en minutes)
🛠️ Architecture du Projet
Pr-diction-du-Temps-de-Livraison/
├── dataset.csv
├── EDA.ipynb
├── pipeline.py
├── test_pipeline.py
├── .github/workflows/
│ └── python-tests.yml
GitHub Actions
├── requirements.txt
Dépendances du projet
└── README.md Configuration du projet
📋 Mission Détaillée
Phase 1️⃣ : Analyse et Exploration des Données (EDA)
Visualisations requises
1. Heatmap de corrélation
- Identifier les variables numériques les plus corrélées avec
DeliveryTime - Détection de corrélation avec la cible
- Détection de multicolinéarité entre variables
2. Countplots
- Analyser la distribution des variables catégorielles
Traffic_LevelVehicle_TypeTime_of_DayWeather
3. Boxplots
- Analyser la relation entre la cible et les variables catégorielles
- Trafic vs Temps de livraison
- Type de véhicule vs Temps de livraison
- Heure de la journée vs Temps de livraison
- Conditions météorologiques vs Temps de livraison
4. Distribution de la variable cible
- Analyser la distribution de
DeliveryTime - Histogramme et statistiques descriptives
- Détection d'outliers
- Vérification de la normalité
Objectif
Identifier les variables les plus explicatives avant la modélisation.
Phase 2️⃣ : Prétraitement et Sélection de Features
Prétraitement
Variables numériques : StandardScaler (normalisation)
Distance_kmCourier_ExperiencePreparation_Time
Variables catégorielles : OneHotEncoder (encodage one-hot)
Traffic_LevelVehicle_TypeTime_of_DayWeather
Sélection de Features
- Méthode : SelectKBest avec test statistique
f_regression - Objectif : Sélectionner les k meilleures features pour réduire la dimensionnalité
- Validation : Comparer les performances avec/sans sélection
Phase 3️⃣ : Modélisation avec GridSearchCV
Modèles à tester
-
RandomForestRegressor
-
Support Vector Regressor (SVR)
Métriques d'évaluation
-
MAE (Mean Absolute Error)
- Métrique de sélection principale
- Interprétable en minutes
- Robuste aux outliers
-
R² (Coefficient de détermination)
- Évaluation supplémentaire
- Proportion de variance expliquée
- Cible : R² > 0.85
Justification du modèle final
- Comparer MAE et R² entre les deux modèles
- Analyser le temps de prédiction
- Évaluer la stabilité et la robustesse
Phase 4️⃣ : Pipeline sklearn (Bonus)
Objectifs
- Automatiser le flux de traitement
- Éviter les fuites de données
- Faciliter le déploiement en production
Phase 5️⃣ : Tests Automatisés
Tests de validation des données
# test_data.py
- Vérifier le format des données (types, dimensions)
# test_mae
- Vérifier que la MAE maximale ne dépasse pas un seuil définiPhase 6️⃣ : CI/CD avec GitHub Actions (Bonus)
Objectif
Exécuter automatiquement les tests à chaque push sur le repository.
Fichier de configuration
.github/workflows/python-tests.yml
name: Run Unit Tests
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout du code
uses: actions/checkout@v4
- name: Installer Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Installer les dépendances
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest joblib scikit-learn pandas
- name: Exécuter les tests
run: pytest -vAvantages
- ✅ Garantit que le code reste fonctionnel
- ✅ Détecte les régressions automatiquement
- ✅ Valide les PR avant merge
- ✅ Génère des rapports de couverture de code
📦 Dépendances
pandas
numpy
scikit-learn
matplotlib
seaborn
pytest
Installez-les avec :
pip install -r requirements.txt🚀 Guide de démarrage rapide
1. Cloner le repository
git clone https://github.com/SaidaAourras/Pr-diction-du-Temps-de-Livraison.git
cd Pr-diction-du-Temps-de-Livraison2. Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Sur Windows : venv\Scripts\activate3. Installer les dépendances
pip install -r requirements.txt4. Exécuter les tests
pytest -v📈 Résultats attendus
| Métrique | Cible |
|---|---|
| MAE (test) | < 7 minutes |
| R² (test) | > 0.78 |
📝 Résumé des livrables
- ✅ Analyse exploratoire complète avec visualisations
- ✅ Prétraitement des données automatisé
- ✅ Sélection de features basée sur la statistique
- ✅ Modélisation avec GridSearchCV (2 modèles)
- ✅ Pipeline sklearn automatisé
- ✅ Suite de tests complète
- ✅ CI/CD avec GitHub Actions
- ✅ Documentation du projet
👥 Contributeurs
- Data Scientist Junior : Saida Aourras
Dernière mise à jour : Octobre 2025