Random Forest asistido por simulación termodinámica: Diagnóstico explicable de fallos para componentes de la cámara de combustión en motores diésel marinos

Congcong Luo a , Minghang Zhao a,* , Xuyun Fu a , Shisheng Zhong a , Song Fu b , Kai Zhang c , Xiaoxia Yu d
a Department of Mechanical Engineering, Harbin Institute of Technology, Weihai, Weihai 264209, China
b School of Mechatronics Engineering, Harbin Institute of Technology, Harbin 150001, China
c School of Mechanical Engineering, Southwest Jiaotong University, Chengdu 610031, China
d School of Mechanical Engineering, Chongqing University of Technology, Chongqing 400054, China

Resumen

Los métodos tradicionales de diagnóstico inteligente de fallos en motores diésel marinos suelen adolecer de una escasa capacidad de generalización debido a la falta de muestras de entrenamiento de fallos, así como de una baja explicabilidad por no integrar suficientemente el conocimiento a priori sobre los mecanismos de fallo. Para abordar estos problemas, este artículo propone un método de Random Forest Asistido por Simulación Termodinámica (TSRF) .

Este método revela las características de la evolución de los fallos mediante simulación termodinámica y las integra como conocimiento a priori en el diseño del modelo de diagnóstico inteligente. En primer lugar, se desarrollaron cinco modelos termodinámicos de fallos ajustando los parámetros básicos del sistema para simular las características significativas de diferentes averías. Posteriormente, basándose en los resultados de la simulación numérica, se identificaron los indicadores termodinámicos potenciales que caracterizan la degradación de los componentes de la cámara de combustión.

Se realizó una selección de características calculando los valores SHapley Additive exPlanations (SHAP), conservando únicamente las variables con una correlación significativa con el estado del fallo. Finalmente, se evaluó el estado de salud de la cámara de combustión utilizando los parámetros seleccionados. Los resultados experimentales muestran que el método TSRF propuesto presenta un rendimiento de clasificación excelente, con una precisión media del 99,07% en el conjunto de datos de fallos.

Palabras clave:
Motor diésel marino Diagnóstico de fallos IA explicable Valores SHAP

Motivación

En el campo de la ingeniería marina y la Gestión de Pronósticos y Salud (PHM), la industria se enfrenta a dos grandes obstáculos a largo plazo:

  • Escasez de datos: Los motores diésel marinos (especialmente los motores principales de buques oceánicos) son el corazón del barco. Un fallo grave en alta mar puede provocar pérdida de propulsión, varamiento o incluso naufragios. Por ello, sus factores de seguridad en el diseño son extremadamente altos y la probabilidad de fallos graves es intrínsecamente muy baja. Además, la industria marítima aplica estrictos sistemas de mantenimiento preventivo (como revisiones programadas por horas de funcionamiento). La gran mayoría de las piezas de desgaste se reemplazan forzosamente antes de que fallen realmente y generen datos de avería. Esto conduce a una gran cantidad de datos de salud y desgaste temprano, pero a una carencia extrema de datos reales sobre fallos completos o averías graves.
  • El problema de la "Caja Negra": Dado que los modelos de aprendizaje profundo suelen carecer de transparencia, es difícil para los ingenieros confiar en ellos si no pueden explicar las causas físicas de un fallo. En la industria naviera, estrictamente regulada por las sociedades de clasificación, esta opacidad es crítica. Si una IA diagnostica erróneamente (o pasa por alto) un gripado de pistón o una rotura de cigüeñal, y el sistema no puede rastrear si el error se debe a un sesgo en los datos, un defecto del algoritmo o una deriva del sensor, esta falta de trazabilidad es inaceptable en las investigaciones de accidentes marítimos.

Para afrontar estos desafíos, propusimos el método TSRF. Al fusionar modelos mecanicistas basados en la física con técnicas avanzadas de explicabilidad y utilizar modelos de simulación de alta fidelidad para resolver el problema de la escasez de datos, garantizamos que las decisiones de diagnóstico se ajusten a los principios termodinámicos fundamentales.


Metodología

El flujo de trabajo de este estudio comprende las siguientes cuatro fases principales (ver figura):

  1. Modelado termodinámico: En lugar de depender únicamente de bancos de pruebas físicos, construimos un modelo termodinámico unidimensional de alta fidelidad de un motor diésel marino de seis cilindros. El modelo fue rigurosamente calibrado basándose en datos reales de funcionamiento, manteniendo el error de simulación por debajo del 5%.
  2. Inyección de fallos: Basándonos en el modelo calibrado, simulamos cinco fallos específicos de la cámara de combustión (como grietas en la culata, ablación del pistón, etc.) ajustando los parámetros físicos, generando así un conjunto de datos que cubre diversos grados de fallos reales del motor.
  3. Selección de características basada en SHAP: Utilizamos valores SHAP para identificar cuantitativamente las características clave, seleccionando 14 parámetros críticos que dominan la decisión de diagnóstico.
  4. Diagnóstico por clasificación: Utilizando este conjunto de datos físicamente aumentado, entrenamos un clasificador Random Forest (RF) y logramos un diagnóstico de fallos de alta precisión.
Structure of TSRF method combining Thermodynamic Simulation and Random Forest for Explainable AI

Fig. 1: Arquitectura del método TSRF.


Detalles del modelado termodinámico

Para garantizar una alta fidelidad, construimos un modelo de simulación de motor diésel unidimensional. Este modelo mecanicista equilibra la precisión física con la eficiencia computacional necesaria para la generación de conjuntos de datos.

Topología del modelo

El sistema del motor se discretiza como una red de conductos de fluidos y componentes funcionales:

  • Unidad de potencia central: Configuración en línea, seis cilindros, dos tiempos.
  • Sistema de aire: Los colectores de admisión/escape (PL1, PL2) están conectados mediante una compleja red de tuberías.
  • Sistema de sobrealimentación: Turbocompresor (TC1) acoplado a un intercooler (CO1).

Calibración y validación

Antes de realizar la inyección de fallos, el modelo base se calibró rigurosamente con datos medidos.

  • Fuente de datos: Datos reales de funcionamiento del buque adquiridos a través del Módulo de Adquisición de Datos (DCM).
  • Validación: Las desviaciones de los parámetros clave (como potencia, temperatura de escape) se controlaron estrictamente dentro de un rango de error de ±5% .
1-D thermodynamic simulation model

Fig. 2: Esquema del modelo termodinámico unidimensional del motor diésel.

Model Validation Results

Fig. 5: Módulo de Adquisición de Datos (DCM).

Mecanismo de inyección de fallos

Dado que los modelos unidimensionales no pueden representar directamente defectos estructurales 3D, adoptamos un método de mapeo fenomenológico para traducir los mecanismos de degradación física en desviaciones equivalentes de parámetros termodinámicos.

Tipo de fallo Mecanismo físico Implementación del modelado
F1: Grieta en culata Conducción térmica obstaculizada. Aumento de la temperatura superficial de la culata ($T_H$) a 346°C.
F2: Ablación del pistón Pérdida de material y fallo de sellado. Aumento de la temperatura del pistón ($T_P$) + ligera fuga de gases (blow-by) (0,01 kg/s).
F3: Desgaste de la camisa Aumento del diámetro interior por desgaste. Aumento del diámetro + fuga de gases severa (0,03 kg/s).
F4: Desgaste de anillos Fuga de gas. Ajuste del flujo másico de fuga de gases (0,02 kg/s).
F5: Agarrotamiento de anillos Aumento de fricción y fallo de sellado. Cambio en el diámetro interior + aumento de temperatura de la camisa + fuga de gases.

Análisis de explicabilidad

Una innovación central de este estudio radica en cambiar el enfoque de "¿Qué es el fallo?" a "¿Por qué se diagnosticó este fallo?". Demostramos esta capacidad mediante el análisis del desgaste de los anillos del pistón (F4):

  • Explicación local (Gráfico de cascada): El gráfico de cascada desglosa la lógica de predicción específica. Por ejemplo, el modelo predijo "desgaste de anillos" porque el flujo térmico de fuga de gases (P06) y el flujo másico de fuga de gases (P07) presentaron valores específicos, aumentando así la probabilidad de predicción de este fallo. Esto es consistente con las leyes físicas: el desgaste de los anillos destruye la estanqueidad, provocando fugas de gas.
  • Explicación global (Gráfico de enjambre): El análisis global revela las leyes generales aprendidas por el modelo. Encontramos que una baja presión de escape antes de la turbina (P11) es un fuerte indicador de desgaste de anillos. Físicamente, esto es coherente: los anillos desgastados provocan fugas de gas del cilindro, reduciendo así la energía disponible para impulsar la turbina.
SHAP Analysis,including Waterfall plot, beeswarm plot, interaction plot and dependence plot

Fig. 11: Análisis de fallo de desgaste de anillos (F4) basado en valores SHAP: (a) Gráfico de cascada; (b) Gráfico de enjambre; (c) Gráfico de interacción; (d) Gráfico de dependencia.

Ver código de visualización SHAP (Python)

Si le interesan los detalles de implementación de los gráficos anteriores, aquí tiene un código de ejemplo para generar los gráficos de cascada, enjambre, interacción y dependencia.👇

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()

Puntos destacados de la investigación

Consideramos que este trabajo ha realizado las siguientes contribuciones clave al campo:

  • Establecimiento de modelos parametrizados para cinco fallos típicos de componentes de la cámara de combustión en motores diésel marinos.
  • Validación de la eficacia del método SHAP mediante la comparación con múltiples métodos de selección de características.
  • Aportación de una nueva perspectiva para el diagnóstico explicable de fallos mediante la fusión de métodos basados en datos con modelos mecanicistas termodinámicos.

Cita

Si encuentra útil este trabajo para su investigación, por favor considere leer el siguiente artículo 😊

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},
}

Formato estándar

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.