Machine Learning & Data Science

Guide pratique : Structuration d'un projet de Machine Learning

Organisez efficacement vos projets ML et Deep Learning avec une arborescence claire, des bonnes pratiques éprouvées et des exemples concrets pour garantir reproductibilité et collaboration.

Publié en : mars 2025 | Mis à jour : mars 2026

1. Pourquoi structurer un projet de Machine Learning ?

Lorsqu'on travaille sur un projet de Machine Learning ou Deep Learning, une bonne organisation des fichiers est essentielle pour assurer la clarté, la réplicabilité et la scalabilité du projet. Cette structuration permet d'éviter les désordres, d'améliorer la collaboration et de faciliter le suivi des expérimentations.

47%
du temps perdu à chercher des fichiers
Étude internaute Kaggle, 2025
+63%
de collaboration efficace avec structure
Enquête Data Science, 2026

Un projet ML mal organisé conduit rapidement à des erreurs difficiles à tracer, des expériences impossibles à reproduire et des pertes de temps considérables. À l'inverse, une arborescence pensée dès le départ permet de :

  • Reproduire facilement les résultats : chaque version du modèle est conservée avec ses données et hyperparamètres.
  • Collaborer sereinement en équipe : chaque membre sait où trouver les données, les scripts et les résultats.
  • Automatiser les pipelines : entraînement, évaluation et déploiement deviennent reproductibles.
  • Gagner en sérénité lors du passage en production : un code structuré est plus facile à industrialiser.

Vue d'ensemble d'une structure de projet Machine Learning

Schéma global de l’arborescence ML (assisté par Nano Banana)

2. Arborescence recommandée pour un projet ML

Voici une structure type de projet, largement adoptée par les équipes data science en entreprise :

Arborescence standard
projet_ml/
│-- models/         # Contient les différentes versions des modèles (v1/, v2/, etc.)
│   │-- train_model.py       # Script d'entraînement
│   │-- predict.py           # Script de prédiction
│   │-- evaluate.py          # Script d'évaluation
│
│-- data/           # Stocke les jeux de données bruts et traités
│   │-- raw/                 # Données brutes
│   │-- processed/           # Données prétraitées
│   │-- dataset.csv          # Fichier CSV principal
│
│-- utils/          # Fonctions utilitaires
│   │-- preprocessing.py     # Prétraitement des données
│   │-- feature_engineering.py # Ingénierie des caractéristiques
│   │-- metrics.py           # Fonctions pour les métriques d'évaluation
│
│-- tests/          # Tests unitaires pour garantir la robustesse du code
│   │-- test_models.py       # Tests pour les modèles
│   │-- test_utils.py        # Tests pour les utilitaires
│
│-- notebooks/      # Notebooks Jupyter pour l'EDA, l'entraînement et l'évaluation
│   │-- eda.ipynb            # Analyse exploratoire des données
│   │-- training.ipynb       # Entraînement du modèle
│   │-- evaluation.ipynb     # Évaluation des performances
│
│-- scripts/        # Automatisation des tâches via des scripts bash
│   │-- train.sh            # Script d'entraînement automatique
│   │-- evaluate.sh         # Script d'évaluation
│
│-- logs/           # Historique des entraînements et des prédictions
│   │-- training_logs.txt   # Logs des entraînements
│   │-- prediction_logs.txt # Logs des prédictions
│
│-- config.yaml     # Stocke les hyperparamètres et configurations du projet
│
│-- requirements.txt # Liste des dépendances pour une installation rapide
│
│-- .github/workflows/ci.yml # Configuration CI/CD pour automatiser les tests et le déploiement

Arborescence visuelle d'un projet ML

Arborescence illustrée sous forme d’arbre (assisté par Nano Banana)

3. Explication détaillée des dossiers et fichiers

models/

Ce dossier contient les différentes versions des modèles entraînés, les scripts d'entraînement (train_model.py), de prédiction (predict.py) et d'évaluation (evaluate.py). Cela permet de suivre l'évolution du modèle au fil du temps. Une bonne pratique consiste à versionner les modèles dans des sous-dossiers v1/, v2/, etc., chacun contenant le fichier du modèle (.pkl, .h5, .joblib) et ses métriques associées.

data/

  • raw/ : Stocke les données brutes issues de la collecte. Ces fichiers ne doivent jamais être modifiés directement.
  • processed/ : Contient les jeux de données après nettoyage et transformation. C'est à partir de ces données que l'on entraîne les modèles.
  • dataset.csv : Un exemple de fichier de données structuré.

utils/

Contient des fonctions utiles au projet, comme le prétraitement (preprocessing.py), l'ingénierie des caractéristiques (feature_engineering.py) et les métriques (metrics.py). Ces fonctions sont réutilisables dans les scripts et les notebooks.

tests/

Garde les tests unitaires pour assurer la fiabilité du code. Chaque composant (modèle, utilitaires) doit être testé séparément. Des frameworks comme pytest ou unittest sont couramment utilisés.

notebooks/

Stocke les notebooks Jupyter permettant d'explorer les données (eda.ipynb), d'entraîner les modèles (training.ipynb) et d'évaluer les performances (evaluation.ipynb). Il est conseillé de numéroter les notebooks (01_, 02_) pour indiquer l'ordre d'exécution.

scripts/

Automatise certaines tâches comme l'entraînement et l'évaluation des modèles via des scripts bash (train.sh, evaluate.sh). Ces scripts sont particulièrement utiles pour lancer des entraînements sur des serveurs ou dans des pipelines CI/CD.

logs/

Stocke l'historique des entraînements et des prédictions, utile pour le suivi des performances et le debugging. On y trouve généralement les courbes d'apprentissage, les temps d'exécution et les erreurs éventuelles.

config.yaml

Fichier de configuration centralisé contenant les hyperparamètres et les configurations essentielles du projet (chemins de fichiers, réglages des modèles, etc.). L'utilisation d'un fichier YAML permet de modifier les paramètres sans toucher au code.

requirements.txt

Liste des dépendances Python nécessaires à l'exécution du projet. Permet une installation rapide via pip install -r requirements.txt. Pour des projets plus complexes, on peut utiliser environment.yml (Conda) ou pyproject.toml (Poetry).

.github/workflows/ci.yml

Fichier de configuration pour l'intégration et le déploiement continus (CI/CD), qui automatise les tests et le déploiement du projet. Avec GitHub Actions, on peut par exemple lancer automatiquement les tests à chaque git push.

4. Bonnes pratiques pour un projet ML

  1. Versionner les modèles : Conserver différentes versions des modèles (v1/, v2/) permet de revenir à une version précédente si nécessaire.
  2. Séparer les données brutes et traitées : Éviter d'écraser les données originales pour garantir la reproductibilité des expériences.
  3. Utiliser un gestionnaire de versions (Git) : Suivre les modifications et collaborer efficacement. Attention toutefois à ne pas versionner de gros fichiers de données ou modèles (utiliser Git LFS ou DVC).
  4. Documenter le projet : Ajouter un README.md décrivant l'objectif du projet, comment l'exécuter et les dépendances nécessaires.
  5. Écrire des tests unitaires : Vérifier la fiabilité des composants avec des tests (tests/).
  6. Automatiser les tâches répétitives : Scripts bash et pipelines CI/CD pour l'entraînement et l'évaluation des modèles.
  7. Stocker les métriques et les logs : Suivre les performances du modèle avec logs/.
  8. Utiliser un framework d'expérimentation : Des outils comme MLflow, Weights & Biases ou DVC permettent de tracer automatiquement les hyperparamètres, métriques et artefacts.
Astuce de pro

Adoptez un cookiecutter ou un template de projet (ex. cookiecutter-data-science) pour générer automatiquement cette arborescence en une seule commande. Cela fait gagner un temps précieux au lancement de chaque nouveau projet.

5. Exemples concrets par cas d'usage

Exemple 1 : Détection de fraudes bancaires

Fraud detection
fraud_detection_project/  
│── data/  
│   ├── raw/  # Données brutes  
│   │   ├── transactions_2024.csv  
│   │   ├── clients_2024.csv  
│   ├── processed/  # Données prétraitées  
│   │   ├── transactions_cleaned.csv  
│   │   ├── features_engineered.csv  
│  
│── models/  # Versions du modèle entraîné  
│   ├── v1/  
│   │   ├── model.pkl  
│   │   ├── evaluation_metrics.json  
│   ├── v2/  
│   │   ├── model.pkl  
│   │   ├── evaluation_metrics.json  
│  
│── notebooks/  # Explorations en notebooks Jupyter  
│   ├── 01_eda.ipynb  # Analyse exploratoire  
│   ├── 02_feature_engineering.ipynb  # Extraction de caractéristiques  
│   ├── 03_model_training.ipynb  # Entraînement du modèle  
│  
│── scripts/  # Scripts d'automatisation  
│   ├── train_model.py  # Script d'entraînement  
│   ├── evaluate_model.py  # Script d'évaluation  
│   ├── predict.py  # Script pour effectuer des prédictions  
│  
│── tests/  # Tests unitaires  
│   ├── test_data_preprocessing.py  
│   ├── test_model_performance.py  
│  
│── utils/  # Fonctions utiles  
│   ├── data_preprocessing.py  
│   ├── feature_engineering.py  
│   ├── metrics.py  
│  
│── logs/  # Logs des entraînements  
│   ├── training.log  
│   ├── predictions.log  
│  
│── config.yaml  # Hyperparamètres et configuration  
│── requirements.txt  # Dépendances Python  
│── .github/workflows/ci.yml  # Pipeline CI/CD  
│── README.md  # Description du projet  

Exemple 2 : Classification d'images (Détection d'objets)

Image classification
image_classification_project/  
│── data/  
│   ├── raw/  # Images brutes  
│   ├── processed/  # Images redimensionnées et normalisées  
│  
│── models/  
│   ├── v1/  
│   ├── v2/  
│  
│── notebooks/  
│   ├── 01_data_preprocessing.ipynb  
│   ├── 02_model_training.ipynb  
│   ├── 03_evaluation.ipynb  
│  
│── scripts/  
│   ├── train.py  
│   ├── predict.py  
│  
│── tests/  
│   ├── test_preprocessing.py  
│  
│── utils/  
│   ├── image_augmentation.py  
│   ├── model_utils.py  
│  
│── logs/  
│── config.yaml  
│── requirements.txt  
│── README.md  

Exemple 3 : Analyse de sentiments sur des avis clients

Sentiment analysis
sentiment_analysis_project/  
│── data/  
│   ├── raw/  # Avis clients bruts  
│   ├── processed/  # Données nettoyées et vectorisées  
│  
│── models/  
│   ├── v1/  
│   ├── v2/  
│  
│── notebooks/  
│   ├── 01_eda.ipynb  
│   ├── 02_text_preprocessing.ipynb  
│   ├── 03_model_training.ipynb  
│  
│── scripts/  
│   ├── train.py  
│   ├── predict.py  
│  
│── tests/  
│   ├── test_text_processing.py  
│  
│── utils/  
│   ├── text_cleaning.py  
│   ├── model_utils.py  
│  
│── logs/  
│── config.yaml  
│── requirements.txt  
│── README.md  

Exemple 4 : Système de recommandation de films

Recommendation system
project_movie_recommendation/
│── models/
│   ├── collaborative_filtering/
│   ├── content_based/
│── data/
│   ├── raw/
│   ├── processed/
│── utils/
│   ├── similarity_metrics.py
│   ├── recommendation_engine.py
│── tests/
│   ├── test_recommendation.py
│── notebooks/
│   ├── exploratory_analysis.ipynb
│── scripts/
│   ├── generate_recommendations.sh
│── logs/
│── config.yaml
│── requirements.txt
│── .github/workflows/ci.yml

Exemple 5 : Prédiction de la demande en énergie

Energy forecasting
project_energy_forecasting/
│── models/
│   ├── lstm/
│   ├── xgboost/
│── data/
│   ├── raw/
│   ├── processed/
│── utils/
│   ├── data_cleaning.py
│   ├── feature_selection.py
│── tests/
│   ├── test_data_pipeline.py
│── notebooks/
│   ├── forecast_analysis.ipynb
│── scripts/
│   ├── train_model.sh
│   ├── predict_demand.sh
│── logs/
│── config.yaml
│── requirements.txt
│── .github/workflows/ci.yml

Ces arborescences permettent une meilleure organisation et facilitent le travail collaboratif ainsi que le suivi des différentes versions des modèles.

6. Outils complémentaires pour la structuration

Au-delà de l'arborescence, certains outils peuvent grandement faciliter la gestion de vos projets ML :

  • DVC (Data Version Control) : versionne les données et les modèles comme on versionne le code avec Git.
  • MLflow : traque les expérimentations, enregistre les hyperparamètres, métriques et artefacts.
  • Hydra : gestion avancée des fichiers de configuration (héritage, composition).
  • Pre-commit hooks : automatise le formatage du code (black, isort, flake8) avant chaque commit.
  • Poetry ou pipenv : gestion robuste des dépendances et des environnements virtuels.
Recommandation

Pour tout projet ML destiné à la production, associez l'arborescence présentée à un outil de tracking d'expériences comme MLflow. Cela vous évitera de perdre le fil de vos centaines d'entraînements.

7. FAQ — Structuration de projet Machine Learning

Dois-je versionner les données avec Git ?

Non, Git n'est pas adapté aux gros fichiers. Utilisez plutôt DVC (Data Version Control) ou Git LFS. Le data/ peut être ignoré dans .gitignore tandis que les scripts de téléchargement ou de génération des données sont versionnés.

Comment gérer plusieurs environnements (dev, staging, prod) ?

Utilisez plusieurs fichiers de configuration (config_dev.yaml, config_prod.yaml) ou des variables d'environnement. Les pipelines CI/CD peuvent alors choisir le bon fichier au moment de l'exécution.

Faut-il versionner les notebooks Jupyter ?

Oui, mais attention : les notebooks contiennent des métadonnées (cellules d'exécution, sorties) qui génèrent beaucoup de diffs. Avant de committer, nettoyez-les avec jupyter nbconvert --clear-output ou utilisez nbstripout.

Quelle différence entre scripts/ et utils/ ?

utils/ contient des fonctions réutilisables importées par d'autres modules. scripts/ contient des exécutables (souvent bash) qui orchestrent des séquences d'actions (entraînement, évaluation, déploiement).

Comment structurer un projet avec plusieurs modèles en compétition ?

Créez un dossier models/ avec un sous-dossier par type de modèle (random_forest/, xgboost/, neural_net/). Chaque sous-dossier a sa propre logique d'entraînement et son propre fichier de config. Un script global benchmark.py peut les comparer.

Comment intégrer le tracking des expériences (MLflow) dans cette arborescence ?

Ajoutez un dossier mlruns/ (ignoré par Git) où MLflow stocke ses artefacts. Dans config.yaml, précisez l'URI du tracking server. Les scripts d'entraînement appellent mlflow.log_param() et mlflow.log_metric().

Faites parler vos données
Apprenez les méthodes et les outils pour extraire de la valeur stratégique : Data Science : Le guide complet des méthodes et outils.

Sources

  • Cookiecutter Data Science – Projet template de référence (2025)
  • Enquête Kaggle “State of Data Science 2026”
  • Documentation officielle MLflow – Best practices (mars 2026)
  • Retours d’expérience – équipes data iana-data.org (2025–2026)
 

Recevez la veille IA & Data qui compte vraiment

 

    Analyses claires, outils concrets et tendances IA sans bruit.     Rejoignez les lecteurs de IANA Data.