Подход к прогнозированию и управлению здоровьем, основанный на данных

ВВЕДЕНИЕ

Большой объем данных, непрерывно собираемых из различных систем с использованием промышленного интернета вещей и датчиков мониторинга, создает проблемы для интерпретации таких данных, чтобы предвидеть сбои и обеспечивать бесперебойную работу предприятия.

Своевременное обнаружение неисправностей, диагностика и прогнозирование имеют стратегическое значение для обеспечения бесперебойной работы предприятия. Современная промышленность продвинулась в направлении удовлетворения сложных требований, связанных с более высокой доступностью, надежностью, безопасностью и снижением общих затрат на техническое обслуживание. Растет потребность во внедрении подходов к техническому обслуживанию, которые не только своевременно обнаруживают неисправности оборудования, но и помогают снизить затраты в связи с простоями и общие экономические потери для клиентов. Ключом к созданию такой оптимальной модели является точная технология прогнозирования. Прогностика и управление состоянием здоровья (PHM) фокусируется на обнаружении, прогнозировании и управлении состоянием и состоянием сложных инженерных систем. Прогнозирование оставшегося срока полезного использования (RUL) системы путем точной оценки времени отказа и связанных с ним рисков одного или нескольких существующих или будущих отказов является центральным видом деятельности по прогнозированию и планированию технического обслуживания [1].

На приведенной выше блок-схеме показана взаимозависимая взаимосвязь диагностики неисправностей и доли прогноза в техническом обслуживании на основе состояния (CBM). поскольку целью диагностики неисправности является идентификация и количественная оценка неисправности, данные, собранные на этом этапе, используются для прогнозирования степени ущерба, который еще предстоит.

Основная цель этой статьи — предложить прогностический подход на основе данных, сочетающий метод машинного обучения, такой как анализ основных компонентов (PCA), с моделью экспоненциальной деградации в качестве инструмента проектирования надежности, который экстраполирует прошлое поведение для точного прогнозирования RUL турбовентиляторного двигателя. на основе данных о наработке до отказа парка аналогичных реактивных двигателей код этого проекта доступен на github.

Набор данных, используемый в этом проекте, включает в себя временные ряды измерений различных давлений, температур, вибраций и скоростей вращающегося оборудования. В дополнение к этим функциям существуют три рабочих параметра, которые можно использовать для изменения характеристик каждого двигателя (высота, число число и угол резольвера дроссельной заслонки), каждый двигатель имеет 21 датчик, собирающий различные измерения, связанные с состоянием двигателя во время работы.

Чтобы уменьшить зашумленность наших данных, были приняты скользящее среднее машинного обучения и сокращение признаков. В данном случае, когда известны неисправности машины и пороговые данные, в этом проекте используется метод неконтролируемого обучения анализа основных компонентов для извлечения важной диагностической информации из записанных сигналов датчиков, после чего в качестве компонента будет создан индикатор работоспособности. Подход, основанный на данных, принятый в этом проекте для оценки RUL, разделен на процессы обучения и тестирования данных. В то время как PCA используется для уменьшения размерности и прокладки пути для оптимального извлечения признаков, RUL рассчитывается с использованием модели экспоненциальной деградации, которая будет подгонять модели временных рядов к показателям состояния, извлеченным из данных датчиков, которые со временем увеличиваются или уменьшаются. Эти модели деградации оценивают RUL, предсказывая, когда индикатор состояния преодолеет пороговое значение.

ОБРАБОТКА ДАННЫХ И ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА

dependent_var = ["RUL"]
id_columns = ["UnitNumber","Cycle"]
Op_settings_columns = ["OpSet"+str(i) for i in range(1,4)]
sensors_columns = ["Sensor"+str(i) for i in range(1,22)]
input_columns = id_columns + Op_settings_columns + sensors_columns
df_train = pd.read_csv('train_FD001.txt', delim_whitespace=True, names=input_columns)
rul = pd.DataFrame(df_train.groupby("UnitNumber")["Cycle"].max()).reset_index()
rul.columns = ["UnitNumber", "Max_Cycle"]
df_train = df_train.merge(rul, on="UnitNumber", how="left")
df_train["RUL"] = df_train["Max_Cycle"] - df_train["Cycle"]
df_train.drop("Max_Cycle", axis=1, inplace=True)
df_train.head()

Резюме исследования данных:

  • Рабочие настройки 1 и 2 не показывают четких сигналов об ошибке, но они могут быть важны. Рабочая настройка 3 остается неизменной на протяжении всего срока службы двигателя. Кроме того, его значение одинаково (т.е. 100) среди всех единиц. Поэтому мы можем отказаться от этой функции.
  • Sensor1, Sensor5, Sensor10, Sensor16, Sensor18 и Sensor19 не добавляют ценности, и мы можем удалить их из анализа, чтобы уменьшить сложность нашей модели.
  • Датчик 6 также остается почти постоянным с небольшими колебаниями, и его также можно удалить.
  • Датчик 14 и датчик 9 сильно коррелируют друг с другом, а датчик 9 сильно коррелирует с RUL, поэтому мы опускаем датчик 14.

  • оставшиеся функции:
[‘OpSet1’,
 ‘OpSet2’,
 ‘Sensor2’,
 ‘Sensor3’,
 ‘Sensor4’,
 ‘Sensor7’,
 ‘Sensor8’,
 ‘Sensor9’,
 ‘Sensor11’,
 ‘Sensor12’,
 ‘Sensor13’,
 ‘Sensor15’,
 ‘Sensor17’,
 ‘Sensor20’,
 ‘Sensor21’]

Шумоподавление:

Чтобы уменьшить шум в наших данных, мы будем использовать алгоритм скользящего среднего, последний указывает, что выходная переменная линейно зависит от текущих и различных прошлых значений стохастического (несовершенно предсказуемого) члена, а не от использования прошлых значений прогноза. переменная в регрессии, модель скользящего среднего использует прошлые ошибки прогноза в модели, подобной регрессии.

#Reduce noise using moving averages
df_train_mean = df_train.groupby('UnitNumber')[features].rolling(window = 5).mean()
df_train_mean = df_train_mean.reset_index()
df_train_mean.dropna(inplace = True)
df_train_mean.head()

Рейтинг важности функции:

Суть упрощения прогноза и точной оценки RUL заключается в разработке алгоритма извлечения, который выбирает только признаки с наиболее релевантной диагностической информацией. Таким образом, ранжирование ранее полученных характеристик разломов на основе их важности может оптимизировать структуру прогнозирования RUL. Saidi et al [2] предлагают ранжировать важность признаков по их монотонности.

Монотонность описывает принцип положительного или отрицательного показателя процесса деградации. iя монотонность данного признака xi может быть выражена уравнением (1)

Где n — количество измеренных моментов времени, m — количество контролируемых машин, а абсолютный числитель — разница между количеством положительных и отрицательных приростов.

def monotonicity(data):    
    num_pos = data[data > 0].shape[0]    
    num_neg = data[data < 0].shape[0]   
    tot_n = data.shape[0] - 1  
    mon_val = np.abs(num_pos - num_neg)/tot_n    
    return mon_val
mon_df = pd.DataFrame(columns = ['feature', 'monotonicity_val'])
for col in features :
    mon_val =[]
    for unit in df_diff.UnitNumber.unique():
        mon_val.append(monotonicity(df_diff.loc[df_diff.UnitNumber == unit, col]))
    mon_df = mon_df.append({'feature': col, 'monotonicity_val': np.mean(mon_val)},ignore_index = True)
mon_df = mon_df.sort_values(by = 'monotonicity_val', ascending=False)
fig,ax = plt.subplots(figsize = (7,10))
sns.barplot(y=mon_df.feature, x=mon_df.monotonicity_val)

Чтобы точно оценить RUL, мы выберем только признаки со значением монотонности больше 0,08.

feats = mon_df.feature[mon_df.monotonicity_val > 0.08]
feats
7      Sensor9
8     Sensor11
9     Sensor12
4      Sensor4
10    Sensor13
6      Sensor8
Name: feature, dtype: object

Уменьшение размерности и объединение датчиков:

Этот проект использует PCA в первую очередь для уменьшения размерности и объединения функций. PCA служит многомерным статистическим методом, который может уменьшить количество измерений данных во взаимосвязанном наборе данных путем преобразования его в новые линейные некоррелированные переменные (основные компоненты). Как автономный инструмент распознавания образов PCA пытается переориентировать исходные данные таким образом, чтобы только первые несколько измерений могли сохранить как можно больше доступных деталей в исходных данных.

Представление второго основного компонента (PC2) по отношению к первому основному компоненту (PC1) способно выделить любую дисперсию, достаточно большую, чтобы определить взаимосвязь между PC исходного набора данных.

на рисунке выше показаны два ПК в текущем контексте, нанесенные друг на друга в качестве индикаторов работоспособности. Результаты PCA показывают, что PC1 увеличивается по мере того, как оборудование переходит к отказу, в отличие от PC2, в котором наблюдается некоторый уровень перекрытия. Следовательно, PC1 может быть многообещающим индикатором работоспособности слияния.

Теперь мы рассматриваем PC1 как индикатор работоспособности и визуализируем его на фоне цикла:

МОДЕЛЬ ДЕГРАДАЦИИ

Модели деградации экстраполируют прошлое поведение, чтобы предсказать будущие условия. Этот тип расчета RUL соответствует линейной или экспоненциальной модели профилю деградации индикатора состояния с учетом профилей деградации в вашем ансамбле. Затем он использует профиль деградации тестового компонента для статистического расчета времени, оставшегося до тех пор, пока индикатор не достигнет некоторого заданного порога. Эти модели наиболее полезны, когда есть известное значение индикатора состояния, указывающее на сбой.

В этом случае мы будем использовать модель экспоненциальной деградации, которая описывает поведение деградации как экспоненциальный стохастический процесс со смещением. модель может быть математически выражена в виде уравнения (2) ниже:

Где h(t) – показатель работоспособности, зависящий от времени, φ  – член пересечения, считающийся константой, θ  и β — случайные параметры, определяющие наклон модели.

def degradation_model(parameters, cycle):
    phi = parameters[0]
    theta = parameters[1]
    beta = parameters[2]
    ht = phi + theta*np.exp(beta*cycle)
    return ht

Получение данных индикатора работоспособности для каждого движка поможет нам оптимизировать параметры модели деградации с помощью OptimizeResult scipy:

def residuals(parameters, data, y_observed, func):
    return func(parameters, data) - y_observed

#initial values of parameters 
param_0 = [-1,0.01,0.01]
exp_param_df = pd.DataFrame(columns=['UnitNumber', 'phi', 'theta', 'beta'])
for i in range(1,101):
    ht = pca_df.PC1[pca_df.UnitNumber == i]
    cycle = pca_df.Cycle[pca_df.UnitNumber == i]
    OptimizeResult = optimize.least_squares(residuals, param_0, args = (cycle,ht,degradation_model))
    phi, theta, beta = OptimizeResult.x
    exp_param_df = exp_param_df.append({'UnitNumber': i, 'phi': phi, 'theta' : theta, 'beta' : beta}, ignore_index = True)
exp_param_df.head()

Мы собираемся создать модель экспоненциальной деградации для каждого двигателя, а затем использовать эту экспоненциальную модель HI для прогнозирования RUL, используя сходство между прогнозируемым HI и истинным HI для нового двигателя. на графике ниже показана кривая экспоненциально подобранного HI для репрезентативного двигателя вместе с истинным HI.

Визуализация подобранной экспоненциальной кривой для всех единиц измерения:

fig, ax = plt.subplots(nrows = 20, ncols = 5, figsize =(30,50))
ax = ax.ravel()
for i in range(0,100):
    phi = exp_param_df.phi[exp_param_df.UnitNumber == i+1].values
    theta = exp_param_df.theta[exp_param_df.UnitNumber == i+1].values
    beta = exp_param_df.beta[exp_param_df.UnitNumber == i+1].values
    cycle = pca_df.Cycle[pca_df.UnitNumber == i+1].values
    pred_hi = degradation_model([phi,theta,beta],cycle)
    sns.lineplot(data=pca_df[pca_df.UnitNumber == i+1], y='PC1', x='Cycle', ax = ax[i])
    sns.lineplot(y=pred_hi, x=cycle, ax= ax[i], color= 'green')
    ax[i].axhline(threshold, color = 'r')
    ax[i].set_title("Unit"+str(i+1))
    ax[i].set_ylabel("")
    ax[i].set_xlabel("")
plt.tight_layout()

ПРОГНОЗ RUL ПО ИСПЫТАТЕЛЬНЫМ ДАННЫМ

прогноз нового двигателя RUL принимает в качестве входных данных совмещенный датчик с наблюдением, равным текущему жизненному циклу нового двигателя и подобранной экспоненциальной модели HI для всех обученных двигателей, затем модель пытается сравнить наблюдения совмещенного датчика для нового двигателя. с моделями HI (экспоненциально подобранные кривые) в библиотеке моделей с этапа обучения.

Чтобы точно предсказать оставшийся полезный срок службы, мы должны подобрать экспоненциальную модель для тестовых данных, используя параметры в качестве средних значений и границы в качестве значений 25-го и 75-го процентиля экспоненциальных моделей, найденных с использованием обучающих данных;

Наконец, мы получаем оставшийся срок полезного использования для каждого двигателя на основе RUL моделей двигателей:

Код на гитхабе:

https://github.com/LEMMAO/Predictive_Maintenance

Использованная литература :

[1] Международная организация по стандартизации (ИСО). Мониторинг состояния и диагностика машин, прогностическая часть 1: Общие рекомендации. ISO13381–1: 2004 (е). об. Директивы ISO/IEC Часть 2, IO f. С. 2004:14.

[2] Саиди Л., Али Дж. Б., Беххофер Э., Бенбоузид М. Прогноз состояния подшипников высокоскоростного вала ветряной турбины с помощью спектральных индексов, полученных на основе эксцесса, и SVR. Прикладная акустика. 2017 1 мая; 120:1–8.

[3] Чжаои Сюй, Джозеф Гомер Салех. Машинное обучение для приложений обеспечения надежности и безопасности: обзор текущего состояния и будущих возможностей. Школа аэрокосмической техники, Технологический институт Джорджии, США

[4] Яго Лэй. Интеллектуальная диагностика неисправностей и прогнозирование оставшегося срока полезного использования вращающихся механизмов.