Overview
A comprehensive, production-grade sales forecasting solution developed during my internship at Decathlon Belgium. This project industrializes the prediction of 8 key sales KPIs (GMV, items sold) segmented by channel (InStore/OutStore, 1P/3P) for all 64 sports departments.
Replaced manual forecasting processes with an automated, scalable ML solution. Achieved 15% improvement in forecast accuracy (MAPE) through rigorous model comparison and advanced feature engineering.
Une solution de prévision des ventes complète et prête pour la production, développée lors de mon stage chez Decathlon Belgique. Ce projet industrialise la prédiction de 8 KPIs de vente clés (GMV, articles vendus) segmentés par canal (InStore/OutStore, 1P/3P) pour l'ensemble des 64 départements sportifs.
Remplacement des processus de prévision manuels par une solution ML automatisée et scalable. Amélioration de 15% de la précision des prévisions (MAPE) grâce à une comparaison rigoureuse de modèles et un feature engineering avancé.
Technical Architecture
ML & Data Processing
- Prophet - Facebook's time-series forecasting library for multi-output predictions (selected after benchmarking)
- Model Comparison - Rigorous evaluation of Prophet, XGBoost, LightGBM, Chronos-Bolt to select best approach
- Apache Spark / PySpark - Distributed data processing at scale
- Delta Lake - ACID transactions and versioned data storage
- Pandas / NumPy - Data manipulation and numerical computing
- scikit-learn - Feature engineering and preprocessing
- joblib - Parallel processing with threading backend for concurrent model training
MLOps Platform
- Databricks - Unified analytics platform for notebooks, compute, and orchestration
- Apache Airflow - Workflow orchestration for the entire data pipeline (ingestion to prediction delivery)
- MLflow - Complete ML lifecycle management:
- Experiment tracking with metrics and parameters
- Model Registry with versioning (prophet-sport-<sport_code>)
- Model serving and deployment
- Databricks Bundles - Infrastructure-as-code for Databricks deployments
Cloud Infrastructure
- AWS S3 - Data lake storage for inputs, intermediate outputs, and final predictions
- Amazon SageMaker - ML model training and experimentation environment
- Amazon Bedrock - Foundation models exploration
- AWS SSO - Identity and access management
Data Pipeline
| Stage | Description |
|---|---|
| Feature Engineering | Parallel sub-jobs: SalesFeaturesJob (lag features, rolling averages), WeatherJob (temperature, precipitation), HolidaysJob (Belgian holidays, school vacations) |
| Model Training | One Prophet model per sport with multi-output forecasting, MLflow registration |
| Prediction | Latest model retrieval, forecast generation, YoY progression analysis |
| Export | Google Sheets integration with department-specific tabs |
CI/CD & Quality
- GitHub Actions - Multiple workflows:
- checkers.yml - Code quality checks
- sonarcloud.yml - Security and coverage reports
- sphinxdocs.yml - Auto-generated documentation
- publication-preprod.yml / publication-prod.yml - Deployment pipelines
- SonarCloud - Code quality dashboards and vulnerability scanning
- Pre-commit hooks - Automated checks before commits
Code Quality Tools
- Ruff - Fast Python linting and formatting
- Mypy - Static type checking
- Bandit - Security vulnerability scanner
- Sphinx - API documentation hosted on GitHub Pages
Development Tools
- uv - Modern Python package manager
- Makefile - Task automation (install, format, test, deploy)
- VS Code Workspace - Configured IDE settings
- Cookiecutter / Cruft - Template-based project structure
Project Management
- Confluence - Technical documentation and specs
- Jira - Sprint planning and task tracking
ML & Traitement de Données
- Prophet - Bibliothèque de prévision de séries temporelles de Facebook pour les prédictions multi-sorties (sélectionnée après benchmarking)
- Comparaison de modèles - Évaluation rigoureuse de Prophet, XGBoost, LightGBM, Chronos-Bolt pour sélectionner la meilleure approche
- Apache Spark / PySpark - Traitement distribué de données à grande échelle
- Delta Lake - Transactions ACID et stockage de données versionné
- Pandas / NumPy - Manipulation de données et calcul numérique
- scikit-learn - Feature engineering et prétraitement
- joblib - Traitement parallèle avec backend threading pour l'entraînement concurrent de modèles
Plateforme MLOps
- Databricks - Plateforme analytique unifiée pour les notebooks, le calcul et l'orchestration
- Apache Airflow - Orchestration de workflows pour l'ensemble du pipeline de données (de l'ingestion à la livraison des prédictions)
- MLflow - Gestion complète du cycle de vie ML :
- Suivi d'expériences avec métriques et paramètres
- Model Registry avec versioning (prophet-sport-<sport_code>)
- Serving et déploiement de modèles
- Databricks Bundles - Infrastructure-as-code pour les déploiements Databricks
Infrastructure Cloud
- AWS S3 - Stockage data lake pour les entrées, sorties intermédiaires et prédictions finales
- Amazon SageMaker - Environnement d'entraînement et d'expérimentation ML
- Amazon Bedrock - Exploration de modèles fondation
- AWS SSO - Gestion des identités et des accès
Pipeline de Données
| Étape | Description |
|---|---|
| Feature Engineering | Sous-jobs parallèles : SalesFeaturesJob (features de lag, moyennes glissantes), WeatherJob (température, précipitations), HolidaysJob (jours fériés belges, vacances scolaires) |
| Entraînement | Un modèle Prophet par sport avec prédiction multi-sorties, enregistrement MLflow |
| Prédiction | Récupération du dernier modèle, génération des prévisions, analyse de progression YoY |
| Export | Intégration Google Sheets avec onglets par département |
CI/CD & Qualité
- GitHub Actions - Workflows multiples :
- checkers.yml - Vérifications de qualité du code
- sonarcloud.yml - Rapports de sécurité et de couverture
- sphinxdocs.yml - Documentation auto-générée
- publication-preprod.yml / publication-prod.yml - Pipelines de déploiement
- SonarCloud - Tableaux de bord de qualité de code et scan de vulnérabilités
- Pre-commit hooks - Vérifications automatisées avant les commits
Outils de Qualité de Code
- Ruff - Linting et formatage Python rapide
- Mypy - Vérification statique de types
- Bandit - Scanner de vulnérabilités de sécurité
- Sphinx - Documentation API hébergée sur GitHub Pages
Outils de Développement
- uv - Gestionnaire de paquets Python moderne
- Makefile - Automatisation des tâches (install, format, test, deploy)
- VS Code Workspace - Paramètres IDE configurés
- Cookiecutter / Cruft - Structure de projet basée sur des templates
Gestion de Projet
- Confluence - Documentation technique et spécifications
- Jira - Planification de sprints et suivi des tâches
Pipeline Architecture
1. Feature Engineering (Parallel Execution)
Three sub-jobs run concurrently:- SalesFeaturesJob: Temporal attributes, YoY lag features, 28-day rolling averages
- WeatherJob: Historical and forecast weather alignment
- HolidaysJob: Belgian public holidays and school vacation features
2. Model Training
- Iterates through configured sports_to_train list
- Trains multi-output Prophet model per sport
- Registers in MLflow Model Registry with unique naming
- Logs transformation parameters for prediction context
3. Prediction & Export
- Retrieves latest model version from registry
- Generates forecasts for specified date range
- Calculates YoY progression metrics
- Exports to Google Sheets with department-specific tabs
1. Feature Engineering (Exécution Parallèle)
Trois sous-jobs s'exécutent simultanément :- SalesFeaturesJob : Attributs temporels, features de lag YoY, moyennes glissantes sur 28 jours
- WeatherJob : Alignement des données météo historiques et prévisionnelles
- HolidaysJob : Jours fériés belges et features de vacances scolaires
2. Entraînement des Modèles
- Itère sur la liste configurée sports_to_train
- Entraîne un modèle Prophet multi-sorties par sport
- Enregistre dans le MLflow Model Registry avec un nommage unique
- Journalise les paramètres de transformation pour le contexte de prédiction
3. Prédiction & Export
- Récupère la dernière version du modèle depuis le registre
- Génère les prévisions pour la plage de dates spécifiée
- Calcule les métriques de progression YoY
- Exporte vers Google Sheets avec des onglets par département
Key Features
Parallel Processing
Uses joblib threading backend (n_jobs=-1) for concurrent sport processing, ideal for I/O-bound MLflow operations.Resilient Execution
Errors in individual sports don't halt the pipeline - other sports continue processing.Environment Support
- Local: File-based I/O with SQLite MLflow backend
- Dev: S3 data lake with Databricks MLflow tracking
Traitement Parallèle
Utilise le backend threading de joblib (n_jobs=-1) pour le traitement concurrent des sports, idéal pour les opérations MLflow à forte composante I/O.Exécution Résiliente
Les erreurs sur un sport individuel n'interrompent pas le pipeline — les autres sports continuent leur traitement.Support Multi-Environnement
- Local : I/O fichier avec backend MLflow SQLite
- Dev : Data lake S3 avec tracking MLflow Databricks
Technologies Summary
| Category | Technologies |
|---|---|
| ML | Prophet, XGBoost, LightGBM, Chronos-Bolt, scikit-learn, joblib |
| Data | PySpark, Delta Lake, Pandas, NumPy |
| MLOps | Databricks, MLflow, Apache Airflow, Databricks Bundles |
| Cloud | AWS S3, SageMaker, Bedrock |
| CI/CD | GitHub Actions, SonarCloud |
| Quality | Ruff, Mypy, Bandit, Sphinx |
| Tools | uv, Makefile, Cookiecutter |
| Integrations | Google Sheets API |
| Catégorie | Technologies |
|---|---|
| ML | Prophet, XGBoost, LightGBM, Chronos-Bolt, scikit-learn, joblib |
| Données | PySpark, Delta Lake, Pandas, NumPy |
| MLOps | Databricks, MLflow, Apache Airflow, Databricks Bundles |
| Cloud | AWS S3, SageMaker, Bedrock |
| CI/CD | GitHub Actions, SonarCloud |
| Qualité | Ruff, Mypy, Bandit, Sphinx |
| Outils | uv, Makefile, Cookiecutter |
| Intégrations | Google Sheets API |
Results
- 15% improvement in forecast accuracy (MAPE) vs previous manual process
- Predicts sales for 64 sports categories
- Forecasts 8 KPIs per sport (GMV, items by channel)
- Replaced manual forecasting with automated, scalable ML pipeline
- Processes multi-source data (sales, weather, holidays)
- Runs on scheduled production jobs with automated retraining
- Exports to Google Sheets for business stakeholders
- Amélioration de 15% de la précision des prévisions (MAPE) par rapport au processus manuel précédent
- Prédiction des ventes pour 64 catégories sportives
- Prévision de 8 KPIs par sport (GMV, articles par canal)
- Remplacement de la prévision manuelle par un pipeline ML automatisé et scalable
- Traitement de données multi-sources (ventes, météo, jours fériés)
- Exécution via des jobs de production planifiés avec réentraînement automatisé
- Export vers Google Sheets pour les parties prenantes métier
Bonus: Jupiler Pro League Ball Launch
During this internship, I also contributed to the official launch of the new Jupiler Pro League ball. Performed a freestyle football demonstration and appeared in the official presentation video alongside Antoine Griezmann, showcasing the synergy between employee passions and brand projects at Decathlon.
Au cours de ce stage, j'ai également contribué au lancement officiel du nouveau ballon de la Jupiler Pro League. J'ai réalisé une démonstration de football freestyle et suis apparu dans la vidéo de présentation officielle aux côtés d'Antoine Griezmann, illustrant la synergie entre les passions des collaborateurs et les projets de marque chez Decathlon.
