Ce dépôt contient une série de 6 notebooks marimo pour un TP de machine learning appliqué à la maintenance prédictive sur le jeu de données NASA C-MAPSS.
L’objectif pédagogique est progressif :
- Explorer les données
- Découvrir scikit-learn (SVM / Random Forest)
- Comprendre l’intérêt du split et du grid search
- Créer / sélectionner des features
- Montrer l’impact du changement de domaine opératoire (FD001 → FD002)
- Passer de la classification à la régression (RUL)
La structure exacte peut varier légèrement selon votre dépôt, mais l’organisation attendue est de ce type :
.
├── pixi.toml # Configuration de l'environnement pixi
├── README.md # Ce fichier
├── data/ # Données C-MAPSS (non versionnées en général)
├── notebooks/ # Notebooks marimo (noms indicatifs)
│ ├── TP01_aed.py # Analyse exploratoire des données
│ ├── TP02_hello_world.py # Premiers modèles SVM / RF (brut)
│ ├── TP03_grid_search.py # Split, validation, grid search
│ ├── TP04_features.py # Sélection / création de features
│ ├── TP05_domaine_operationnel.py # FD001 -> FD002 (domain shift)
│ └── TP06_regression.py # Régression de RUL (SVR / RF Regressor)
└── reports/ # (optionnel) exports HTML/PDF / corrigés / figures
- Le dossier
data/n’est généralement pas inclus dans Git (poids / licence / réutilisation locale). - Les notebooks marimo sont des scripts Python (
.py) exécutables via marimo. - Certains TPs produisent des artefacts (modèles entraînés, sélection de features) utilisés dans les TPs suivants.
- Python (géré via
pixi) - pixi installé sur votre machine
- Accès au jeu de données NASA C-MAPSS (via Kaggle ou autre source fournie par l’enseignant)
git clone https://github.com/remicastaing/pdm_cmapss.git
cd pdm_cmapssou
gh repo clone remicastaing/pdm_cmapss
cd pdm_cmapssVoir la documentation officielle de pixi (selon votre OS : macOS / Linux / Windows).
Depuis la racine du projet :
pixi installCela installe toutes les dépendances définies dans pixi.toml (ex. : marimo, pandas, numpy, scikit-learn, matplotlib, etc.).
Le projet est configuré pour être lancé avec :
pixi run tpCette commande démarre marimo (serveur local) et permet d’ouvrir le notebook TP prévu par la configuration du projet.
Selon votre pixi.toml, pixi run tp peut :
- lancer un notebook spécifique (ex : TP01),
- ouvrir marimo sur un fichier
.pydonné, - ou démarrer un workflow personnalisé.
Si besoin, vous pouvez aussi lancer directement un notebook marimo (exemples) :
pixi run marimo edit notebooks/TP01_aed.pyou
pixi run marimo run notebooks/TP01_aed.py
edit: mode interactif (édition/exécution)
run: exécution “application”
- Exécuter les cellules dans l’ordre (surtout pour les notebooks de modélisation).
- Éviter de renommer des variables utilisées plus loin (
X_tr,X_te,y_tr,y_te,feature_cols, etc.) sans adapter les cellules suivantes. - Dans marimo, certaines erreurs proviennent de la redéfinition d’une variable existante dans une autre cellule.
- Les temps d’entraînement peuvent augmenter fortement si vous activez trop de features (rolling stats, slopes, etc.).
But : comprendre la structure du dataset C-MAPSS (FD001 en premier), les colonnes, les capteurs, les conditions opératoires, la variable cible RUL / classe à risque.
- Lecture de fichiers texte sans en-tĂŞte
- Compréhension de
unit,cycle,op1..op3,s1..s21 - Construction de la RUL (train)
- Définition d’une cible binaire
yà partir d’un seuilN - Statistiques descriptives, distributions, corrélations, heatmap
Avant de modéliser, il faut comprendre les données (structure, bruit, redondances, colonnes quasi constantes, déséquilibre de classes).
But : prendre en main l’API scikit-learn avec des modèles simples sur les capteurs bruts (sans feature engineering).
fit,predict,predict_proba/decision_function- SVM et Random Forest (classification)
- Pipeline (
StandardScaler+SVC) - Évaluation de base :
- matrice de confusion
- classification report
- accuracy / precision / recall / F1
- ROC-AUC / PR-AUC
- courbes ROC et PR
Une bonne accuracy peut masquer un mauvais modèle en cas de classe déséquilibrée.
But : montrer pourquoi il faut valider correctement un modèle et comment chercher des hyperparamètres.
- Split par moteur (group split) pour éviter la fuite d’information
- Validation croisée avec groupes (
GroupKFold) GridSearchCV- Hyperparamètres SVM (
C,gamma) - Hyperparamètres RF (
max_depth,min_samples_leaf,max_features, éventuellementn_estimators) - Comparaison train / validation / test
Sans split rigoureux (par moteur), les performances peuvent ĂŞtre artificiellement optimistes.
But : construire des features plus informatives que les capteurs bruts, puis réduire leur nombre pour garder un TP praticable.
- Création de features temporelles compactes (par moteur / par fenêtre) :
- moyennes, écarts-types, min/max, amplitude
- slopes / tendances
- EMA, deltas, etc. (selon la recette retenue)
- Gestion des NaN (et suppression cohérente de colonnes)
- Sélection de capteurs / features utiles
- Validation rapide par modèle proxy (souvent RF)
- Réentraînement SVM / RF sur features sélectionnées
- Sauvegarde de la “recette” et des modèles
Plus de features ≠meilleur TP.
Il faut trouver un compromis entre performance, temps de calcul et lisibilité pédagogique.
But : démontrer qu’un modèle entraîné sur FD001 peut mal généraliser à FD002 si le domaine opératoire change.
- Chargement des modèles / recette du TP04
- Prétraitement cohérent de FD002 (mêmes colonnes, mêmes features)
- Évaluation hors domaine
- Analyse du domain shift :
- distributions de
op1..op3 - déplacement des distributions capteurs/features
- chute des métriques (ROC-AUC / PR-AUC / recall positif)
- distributions de
Un modèle ML est valable pour un domaine de données donné.
Changer le domaine (conditions opératoires) peut faire s’effondrer les performances.
But : passer de la classification binaire (“à risque / pas à risque”) à la régression du RUL.
- Construction de la cible continue
RUL - Régression avec :
- SVR (SVM de régression)
- RandomForestRegressor
- Baseline (prédire la moyenne)
- Métriques de régression :
- MAE
- RMSE
- R²
- Visualisation des trajectoires de prédiction par moteur
La régression donne une information plus fine (RUL estimé), mais elle est souvent plus difficile à stabiliser et à interpréter.
- TP01 : compréhension des données
- TP02 : premiers modèles (API scikit-learn)
- TP03 : validation rigoureuse + réglage
- TP04 : features + sélection + sauvegarde
- TP05 : robustesse / domaine opératoire
- TP06 : régression du RUL
Le TP04 peut sauvegarder :
- la recette de features (colonnes retenues, paramètres de calcul, colonnes supprimées)
- les modèles entraînés :
svm_model.joblibrf_model.joblib
Ces artefacts sont ensuite rechargés dans le TP05 pour tester le transfert FD001 → FD002.
Ce matériel est conçu pour un TP de machine learning appliqué à la maintenance prédictive (NASA C-MAPSS), avec une progression pédagogique orientée :
- compréhension des données,
- bonnes pratiques de validation,
- interprétation des métriques,
- robustesse au changement de domaine,
- passage classification → régression.