ENSAM-Mèknes, 4AS4, Filière : GIPR 2024/2025
TP. Data intelligence
Pr. Fatima Zohra El Hlouli
🛠️ Atelier 2 Machine Learning: Prédiction de Pannes
Industrielles
🎯 Objectif général :
Mettre en œuvre un modèle de machine learning pour prédire les pannes d’un système industriel
à partir de données capteurs.
🛠️ Outils: Python, Jupyter Notebook,
Bibliothèques : pandas, numpy, matplotlib, seaborn, scikit-learn
📦 Matériel fourni :
Jeu de données : machine_panne.csv
📊 Description des colonnes du dataset :
Nom de la colonne Description
temperature 🌡️ Température de fonctionnement de la
machine (en °C) – plus elle est élevée,
plus le risque de panne peut augmenter.
humidity 💧 Humidité ambiante autour de la
machine – peut affecter l’électronique ou
accélérer l’usure.
vibration 📉 Niveau de vibration enregistré – des
vibrations anormales peuvent indiquer un
dysfonctionnement mécanique.
pressure 🔧 Pression interne du système – une
pression trop faible ou trop élevée peut
être un signe de problème.
rpm ⚙️ Vitesse de rotation (en tours par
minute) – trop rapide ou trop lente peut
causer des dysfonctionnements.
panne 🚨 Variable cible : 1 si une panne est
survenue, 0 sinon. C’est ce que le modèle
va apprendre à prédire.
Template de notebook Jupyter
ENSAM-Mèknes, 4AS4, Filière : GIPR 2024/2025
TP. Data intelligence
Pr. Fatima Zohra El Hlouli
Partie 1 : Exploration des données
Objectifs :
Charger et comprendre le dataset
Identifier les relations entre les variables
Activités :
1. Charger les données avec pandas.
2. Afficher les premières lignes, les types de colonnes, et vérifier les valeurs
manquantes.
3. Calculer quelques statistiques descriptives (moyenne, écart-type...).
o Visualiser : Heatmap de corrélations
import pandas as pd
import seaborn as sns
import [Link] as plt
df = pd.read_csv("machine_panne.csv")
print([Link]())
[Link]()
[Link]([Link](), annot=True)
[Link]()
Questions :
Quelles variables semblent liées à la panne ?
Y a-t-il un déséquilibre de classes (panne = 1 vs 0) ?
📊 Histogramme des pannes vs non-pannes
import seaborn as sns
import [Link] as plt
# Histogramme des valeurs de la variable 'panne'
[Link](x='panne', data=df, palette='Set2')
# Personnalisation
[Link]("Taux de pannes et de non-pannes")
[Link]("Panne (1 = oui, 0 = non)")
[Link]("Nombre d'observations")
# Affichage
[Link]()
Partie 2 : Entraînement d’un modèle de base
ENSAM-Mèknes, 4AS4, Filière : GIPR 2024/2025
TP. Data intelligence
Pr. Fatima Zohra El Hlouli
Objectifs :
Créer un modèle supervisé de classification
Évaluer les performances
Étapes :
1. Séparer les données en X (features) et y (cible panne).
2. Diviser en jeu d’entraînement/test (80% / 20%).
3. Entraîner un modèle de régression logistique.
4. Évaluer :
o Matrice de confusion
o Accuracy, precision, recall
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from [Link] import confusion_matrix ,accuracy_score, precision_score,
recall_score, f1_score
X = [Link]("panne", axis=1)
y = df["panne"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = LogisticRegression()
[Link](X_train, y_train)
y_pred = [Link](X_test)
print("=== Résultats sur les données de test ===")
print("Accuracy test :", accuracy_score(y_test, y_pred))
print("Recall test :",recall_score(y_test, y_pred))
print("Precision test :", precision_score(y_test, y_pred))
print("F1-score test :",f1_score(y_test, y_pred))
ENSAM-Mèknes, 4AS4, Filière : GIPR 2024/2025
TP. Data intelligence
Pr. Fatima Zohra El Hlouli
Partie 3 : Amélioration et analyse
Objectifs :
Tester un autre modèle
Interpréter les résultats
Explorer la robustesse
Étapes :
1. Essayer un Random Forest Classifier.
# 1. Importation des bibliothèques nécessaires
from [Link] import RandomForestClassifier
# 2. Création du modèle Random Forest
rf_model = RandomForestClassifier(n_estimators=100, random_state=0)
rf_model.fit(X_train, y_train)
# 3. Prédictions sur le jeu de test
y_pred_rf = rf_model.predict(X_test)
# 4. Évaluation du modèle
print("Matrice de confusion (Random Forest) :")
print(confusion_matrix(y_test, y_pred_rf))
print("=== Résultats sur les données de test ===")
print("Accuracy test :", accuracy_score(y_test, y_pred_rf))
print("Recall test :",recall_score(y_test, y_pred_rf))
print("Precision test :", precision_score(y_test, y_pred_rf))
print("F1-score test :",f1_score(y_test, y_pred_rf))
2. Comparer les scores avec la régression logistique.
Utilisez par exemple l’accuracy, le F1-score, le rappel (recall) ou la précision
(precision) :
# Régression Logistique
y_pred = logistic_model.predict(X_test)
print("Régression Logistique - Accuracy :", accuracy_score(y_test, y_pred))
# Random Forest
y_pred_rf = rf_model.predict(X_test)
print("Random Forest - Accuracy :", accuracy_score(y_test, y_pred_rf))
3. Observer l’importance des features.
ENSAM-Mèknes, 4AS4, Filière : GIPR 2024/2025
TP. Data intelligence
Pr. Fatima Zohra El Hlouli
feature_importances = [Link](rf_model.feature_importances_,
index=[Link])
feature_importances.sort_values().plot(kind='barh', title="Importance des
variables")
[Link]("Importance")
[Link]()
📝 Partie 4 : Conclusion
Analyser les résultats
Quelle méthode donne les meilleurs résultats ?
Quelles données ajouter pour améliorer la prédiction ?
Quel est le coût d’une fausse alerte ou d’un faux négatif en industrie ?