Random Forest assisté par simulation thermodynamique : Vers un diagnostic explicable des pannes des composants de la chambre de combustion des moteurs diesel marins

Congcong Luo a , Minghang Zhao a,* , Xuyun Fu a , Shisheng Zhong a , Song Fu b , Kai Zhang c , Xiaoxia Yu d
a Département de génie mécanique, Institut de technologie de Harbin, Weihai 264209, Chine
b École d'ingénierie mécatronique, Institut de technologie de Harbin, Harbin 150001, Chine
c École de génie mécanique, Université Jiaotong du Sud-Ouest, Chengdu 610031, Chine
d Collège de génie mécanique, Université de technologie de Chongqing, Chongqing 400054, Chine

Résumé

Les méthodes traditionnelles de diagnostic intelligent des pannes pour les moteurs diesel marins souffrent souvent de faibles capacités de généralisation en raison de la rareté des échantillons d'entraînement de pannes. De plus, leur interprétabilité est limitée par l'échec à intégrer pleinement les connaissances préalables du domaine des mécanismes de pannes. Pour résoudre ces problèmes, cet article propose une méthode Random Forest assisté par simulation thermodynamique (TSRF) .

Cette approche utilise la simulation thermodynamique pour révéler les caractéristiques d'évolution des pannes, les intégrant comme connaissances préalables dans la conception du modèle de diagnostic intelligent. Premièrement, cinq modèles thermodynamiques de pannes ont été développés en ajustant les paramètres de base du système pour simuler les caractéristiques distinctives de différentes pannes. Ensuite, des indicateurs thermodynamiques potentiels caractérisant la dégradation des composants de la chambre de combustion ont été identifiés sur la base des résultats de simulation numérique.

La sélection des caractéristiques a été effectuée en calculant les valeurs SHapley Additive explanations (SHAP), ne conservant que les variables significativement corrélées aux états de panne. Enfin, les paramètres sélectionnés ont été utilisés pour évaluer l'état de santé de la chambre de combustion. Les résultats expérimentaux démontrent que la méthode TSRF proposée atteint des performances de classification supérieures, avec une précision moyenne de 99,07% sur le jeu de données de pannes.

Mots-clés :
Moteur diesel marin Diagnostic de pannes IA explicable Valeurs SHAP

Motivation

Dans les domaines de l'ingénierie océanique et de la gestion pronostique et de la santé (PHM), l'industrie fait face à deux goulots d'étranglement persistants :

  • Rareté des données : Les moteurs diesel marins (en particulier les moteurs principaux des navires océaniques) sont le cœur du navire. Des pannes graves en mer peuvent entraîner une perte de puissance, un échouage ou des catastrophes maritimes. Par conséquent, ils sont conçus avec des facteurs de sécurité extrêmement élevés, rendant la probabilité de défaillance catastrophique intrinsèque très faible. De plus, l'industrie maritime adhère à des régimes de maintenance préventive stricts (par exemple, des révisions basées sur le temps). La plupart des composants usés sont obligatoirement remplacés avant qu'ils ne se détériorent suffisamment pour générer des données de panne réelles. Cela se traduit par une abondance de données « saines » et « d'usure précoce », mais un manque sévère de données réelles représentant des défaillances complètes ou des pannes critiques.
  • Le problème de la « boîte noire » : En raison du manque de transparence des modèles d'apprentissage profond, il est difficile pour les ingénieurs de faire confiance à un système s'ils ne peuvent pas expliquer la cause physique fondamentale d'une panne. Dans l'industrie maritime, strictement réglementée par les sociétés de classification, cette opacité est critique. Si un mauvais diagnostic de l'IA conduit à un grippage de cylindre ou à une fracture de vilebrequin, et que le système ne peut pas retracer si l'erreur provient d'un biais de données, de défauts algorithmiques ou d'une dérive de capteur, une telle non-traçabilité est inacceptable dans les enquêtes sur les accidents maritimes.

Pour relever ces défis, nous avons proposé la méthode TSRF. En intégrant des modèles mécanistes basés sur la physique avec des techniques d'interprétabilité avancées et en utilisant des simulations haute fidélité, nous résolvons le problème de rareté des données tout en garantissant que les décisions de diagnostic s'alignent sur les principes thermodynamiques fondamentaux.


Méthodologie

Le flux de travail de cette étude comprend quatre phases principales (comme illustré dans la figure) :

  1. Modélisation thermodynamique : Au lieu de s'appuyer uniquement sur des bancs d'essai physiques, nous avons construit un modèle thermodynamique 1D haute fidélité d'un moteur diesel marin à six cylindres. Ce modèle a été rigoureusement calibré sur la base de données de fonctionnement réelles, maintenant les erreurs de simulation dans les 5%.
  2. Injection de pannes : Sur la base du modèle calibré, nous avons simulé cinq pannes spécifiques de la chambre de combustion (par exemple, fissures de culasse, ablation de piston) en ajustant les paramètres physiques. Cela a généré un jeu de données couvrant différents degrés de sévérité de panne.
  3. Sélection de caractéristiques basée sur SHAP : Nous avons utilisé les valeurs SHAP pour identifier quantitativement les caractéristiques clés, filtrant 14 paramètres critiques qui dominent le processus de prise de décision diagnostique.
  4. Diagnostic de classification : En utilisant ce jeu de données amélioré par la physique, nous avons entraîné un classificateur Random Forest (RF), atteignant un diagnostic de panne de haute précision.
Structure of TSRF method combining Thermodynamic Simulation and Random Forest for Explainable AI

Figure 1 : Architecture de la méthode TSRF.


Détails de la modélisation thermodynamique

Pour garantir une haute fidélité, nous avons construit un modèle de simulation de moteur diesel 1D. Ce modèle mécaniste établit un équilibre entre la précision physique et l'efficacité de calcul requise pour la génération de jeux de données.

Topologie du modèle

Le système moteur est discrétisé en un réseau de conduites de fluide et de composants fonctionnels :

  • Unité de puissance centrale : Configuration en ligne à six cylindres, deux temps.
  • Système de voie d'air : Collecteurs d'admission/échappement (PL1, PL2) connectés via un réseau de tuyauterie complexe.
  • Système de turbocompression : Turbocompresseur (TC1) couplé à un refroidisseur intermédiaire (CO1).

Calibration et validation

Avant l'injection de pannes, le modèle de base a été rigoureusement calibré par rapport aux données mesurées.

  • Source de données : Données d'exploitation réelles du navire acquises via un module d'acquisition de données (DCM).
  • Validation : Les écarts dans les paramètres clés (par exemple, puissance, température d'échappement) ont été strictement contrôlés dans une marge d'erreur de ±5% .
1-D thermodynamic simulation model

Figure 2 : Schéma du modèle thermodynamique 1D du moteur diesel.

Model Validation Results

Figure 5 : Module d'acquisition de données (DCM).

Mécanisme d'injection de pannes

Étant donné que les modèles 1D ne peuvent pas représenter directement les défauts structurels 3D, nous avons utilisé une approche de cartographie phénoménologique, traduisant les mécanismes de dégradation physique en décalages équivalents de paramètres thermodynamiques.

Type de panne Mécanisme physique Implémentation de modélisation
F1 : Fissure de culasse Transfert de chaleur entravé. Augmenter la température de surface de la culasse ($T_H$) à 346°C.
F2 : Ablation de piston Perte de matériau et défaillance d'étanchéité. Augmenter la température du piston ($T_P$) + Léger blow-by (0,01 kg/s).
F3 : Usure de chemise Élargissement de l'alésage dû à l'usure. Augmenter l'alésage du cylindre + Blow-by significatif (0,03 kg/s).
F4 : Usure des segments de piston Fuite de gaz. Ajuster le débit massique de blow-by (0,02 kg/s).
F5 : Collage des segments Friction accrue et défaillance d'étanchéité. Changement d'alésage de cylindre + Température de chemise augmentée + Blow-by.

Analyse d'explicabilité

Une innovation fondamentale de cette étude est de déplacer l'accent de « Quelle est la panne ? » vers « Pourquoi cette panne a-t-elle été prédite ? ». Nous avons démontré cette capacité à travers l'analyse de l'usure des segments de piston (F4) :

  • Explication locale (Graphique en cascade) : Le graphique en cascade analyse la logique de prédiction spécifique. Par exemple, le modèle prédit « Usure des segments de piston » parce que le flux de chaleur de blow-by (P06) et le débit massique de blow-by (P07) présentent des valeurs spécifiques, augmentant ainsi la probabilité de cette prédiction de panne. Cela s'aligne avec les lois physiques : les segments usés compromettent l'étanchéité, entraînant une fuite de gaz (blow-by).
  • Explication globale (Graphique en essaim d'abeilles) : L'analyse globale révèle les modèles universels appris par le modèle. Nous avons constaté qu'une faible pression d'échappement pré-turbine (P11) est un indicateur fort de l'usure des segments de piston. D'un point de vue physique, cela est cohérent : le gaz qui fuit réduit l'énergie disponible pour entraîner la turbine.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

Figure 11 : Analyse basée sur SHAP de l'usure des segments de piston (F4) : (a) Graphique en cascade ; (b) Graphique en essaim d'abeilles ; (c) Graphique d'interaction ; (d) Graphique de dépendance.

Cliquez pour voir le code de visualisation SHAP (Python)

Si vous êtes intéressé par les détails d'implémentation des graphiques ci-dessus, voici le code exemple utilisé pour générer les graphiques en cascade, en essaim d'abeilles, d'interaction et de dépendance. 👇

import shap
import matplotlib.pyplot as plt
import numpy as np

# --- 0. Setup & Global Settings ---
plt.rcParams['font.family'] = 'Arial'
plt.rcParams['font.size'] = '24'
plt.rcParams['axes.unicode_minus'] = False

# Assumption: 'best_model' is your trained XGBoost/RF model
# Assumption: 'X_train' and 'X_test' are pandas DataFrames

# 1. Calculate SHAP values as Numpy Arrays (for Beeswarm, Dependence, Interaction)
explainer_tree = shap.TreeExplainer(best_model)
shap_values_numpy = explainer_tree.shap_values(X_train) 

# 2. Calculate SHAP values as Explanation Object (Specifically for Waterfall)
explainer_obj = shap.Explainer(best_model, X_test)
shap_values_obj = explainer_obj(X_test)


##################################################################
#                                                                #
#                      (a) Waterfall Plot                        #
#          Visualizes contribution for a single sample           #
#                                                                #
##################################################################

class_idx = 4  # Target class
sample_idx = 3 # Specific sample to explain

plt.figure()
shap.plots.waterfall(
    shap_values_obj[sample_idx, :, class_idx], 
    max_display=9, 
    show=False
)

# Customizing style
ax = plt.gca()
ax.set_xlabel(ax.get_xlabel(), fontsize=36)
ax.set_ylabel(ax.get_ylabel(), fontsize=36)
ax.spines['bottom'].set_linewidth(3)
plt.show()


##################################################################
#                                                                #
#                      (b) Beeswarm Plot                         #
#              Global summary of feature importance              #
#                                                                #
##################################################################

class_idx = 5
plt.figure(figsize=(10, 8))

shap.summary_plot(
    shap_values_numpy[..., class_idx], 
    X_train, 
    feature_names=X_train.columns, 
    plot_type="dot", 
    show=False, 
    cmap='Greys' # or 'plasma'
)

# Customize Color Bar
cbar = plt.gcf().axes[-1] 
cbar.set_ylabel('Parameter Value', fontsize=24)
cbar.tick_params(labelsize=20)
plt.show()


##################################################################
#                                                                #
#                     (c) Interaction Plot                       #
#          Visualizes interaction effects between features       #
#                                                                #
##################################################################

# Note: Calculation can be expensive
shap_interaction_values = explainer_tree.shap_interaction_values(X_test)
class_idx = 4

plt.figure()
shap.summary_plot(
    shap_interaction_values[..., class_idx], 
    X_test, 
    show=False, 
    max_display=6, 
    cmap='Greys' 
)

# Clean up subplots
axes = plt.gcf().axes
for ax in axes:
    ax.spines['bottom'].set_linewidth(2)
    ax.tick_params(axis="x", labelsize=18, width=2)
    ax.set_title(ax.get_title(), fontsize=14) 

plt.subplots_adjust(wspace=0.3, hspace=0.4)    
plt.show()


##################################################################
#                                                                #
#                     (d) Dependence Plot                        #
#           Feature relationship colored by interaction          #
#                                                                #
##################################################################

Feature_X = 'P06'  # Main feature
Feature_Y = 'P07'  # Interaction feature
class_idx = 4

shap.dependence_plot(
    Feature_X, 
    shap_values_numpy[..., class_idx], 
    X_train, 
    interaction_index=Feature_Y, 
    dot_size=100, 
    show=False
)

# Customize Axes
ax = plt.gca()
ax.tick_params(axis='both', which='major', labelsize=36, width=2)
ax.set_ylabel(f'SHAP value ({Feature_X})', fontsize=36)
ax.spines['bottom'].set_linewidth(3)
ax.spines['left'].set_linewidth(3)
plt.show()


##################################################################
#                                                                #
#            (e) Advanced Composite Plot (Beeswarm + Bar)        #
#      Combines Beeswarm (Bottom Axis) & Importance (Top Axis)   #
#                                                                #
##################################################################

class_idx = 5
fig, ax1 = plt.subplots(figsize=(10, 8))

# 1. Main Beeswarm Plot (on ax1)
shap.summary_plot(
    shap_values_numpy[..., class_idx], 
    X_train, 
    feature_names=X_train.columns, 
    plot_type="dot", 
    show=False, 
    color_bar=True, 
    cmap='Greys' # or 'plasma'
)

# Customize Color Bar
cbar = plt.gcf().axes[-1] 
cbar.set_ylabel('Parameter Value', fontsize=24)
cbar.tick_params(labelsize=20)

# Adjust layout to make room for the top axis
plt.gca().set_position([0.2, 0.2, 0.65, 0.65]) 

# 2. Feature Importance Bar Plot (on Top Axis ax2)
# Create a twin axis sharing the y-axis
ax2 = ax1.twiny() 

shap.summary_plot(
    shap_values_numpy[..., class_idx], 
    X_train, 
    plot_type="bar", 
    show=False
)

# Align position with the main plot
plt.gca().set_position([0.2, 0.2, 0.65, 0.65]) 

# Style the bars (Transparent & Light Color)
bars = ax2.patches
for bar in bars:
    bar.set_color('#CCE5FB') # Light blue background bars
    bar.set_alpha(0.4)       # Transparency

# Customize Axes Labels
ax1.set_xlabel(f'Shapley Value Contribution (F{class_idx})', fontsize=24, labelpad=5)
ax1.set_ylabel('Parameters', fontsize=24)
ax2.set_xlabel('Mean Shapley Value (Parameter Importance)', fontsize=24, labelpad=10)

# Move ax2 (Bar plot axis) to the top
ax2.xaxis.set_label_position('top') 
ax2.xaxis.tick_top()

# Ensure ax1 (dots) is drawn ON TOP OF ax2 (bars)
ax1.set_zorder(ax1.get_zorder() + 1) 
ax1.patch.set_visible(False) # Make ax1 background transparent

plt.show()

Points forts

Nous pensons que ce travail apporte les contributions clés suivantes au domaine :

  • Établissement de modèles paramétrés pour cinq pannes typiques dans les composants de la chambre de combustion des moteurs diesel marins.
  • Validation de l'efficacité de la méthode SHAP par comparaison avec plusieurs techniques de sélection de caractéristiques.
  • Fourniture d'une nouvelle perspective pour le diagnostic explicable des pannes en intégrant des méthodes basées sur les données avec des modèles mécanistes thermodynamiques.

Citation

Si vous trouvez ce travail utile pour votre recherche, veuillez considérer la lecture de l'article suivant 😊

BibTeX

@article{luo2025thermodynamic,
  title     = {Thermodynamic simulation-assisted random forest: Towards explainable fault diagnosis of combustion chamber components of marine diesel engines},
  author    = {Luo, Congcong and Zhao, Minghang and Fu, Xuyun and Zhong, Shisheng and Fu, Song and Zhang, Kai and Yu, Xiaoxia},
  journal   = {Measurement},
  volume    = {251},
  pages     = {117252},
  year      = {2025},
  publisher = {Elsevier},
  doi       = {10.1016/j.measurement.2025.117252},
}

Format standard

C. Luo, M. Zhao, X. Fu, S. Zhong, S. Fu, K. Zhang, X. Yu. Thermodynamic simulation-assisted random forest: Towards explainable fault diagnosis of combustion chamber components of marine diesel engines[J]. Measurement, 2025, 251: 117252.

Voir sur ScienceDirect