В этом сообщении в блоге мы будем использовать данные 51 датчика, чтобы предсказать вероятность поломки водяного насоса в будущем.

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

Профилактическое обслуживание и OEE

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

Если посмотреть на производительность процесса и машины, теоретически доступная мощность не может быть легко достигнута, и на самом деле это может быть не то, чего компания стремится достичь, если они не производят 24 часа в сутки, 7 дней в неделю. Обычно мы говорим о стоимости девяток, когда время безотказной работы 99,9% будет дороже, чем 99%. Некоторые причины неполного использования машины или процесса во время производства могут быть вызваны изменениями со временем, различными требованиями к разным продуктам и сменами сотрудников. Кроме того, техническое обслуживание оборудования, обучение новых сотрудников, проблемы с качеством (или бракованная продукция), задержки с доставкой сырья, а также поломки оборудования и систем уменьшат использование имеющихся мощностей. Это снижение иногда называют «утечкой емкости» и измеряется с помощью трех показателей «Доступность», «Производительность» и «Качество», которые вместе дают оценку OEE, рассчитываемую как A P Q = OEE. В следующем разделе мы объясним этот расчет и выясним, почему профилактическое обслуживание может помочь вашей компании добиться высокой доступности и производительности в OEE и снизить утечку мощности [1].

Общая эффективность оборудования (OEE) и незапланированные простои

Профилактическое обслуживание и доступность (A)

Показатель доступности может быть потерян из-за времени настройки, потерь при переналадке и поломок оборудования. Доступность снижается как из-за плановой (плановой) потери, так и из-за незапланированной потери (поломки). Используя данные для понимания того, насколько хорошо работает оборудование, можно сократить или исключить время поломки и обслуживания оборудования. Использование профилактического обслуживания позволяет вам лучше планировать техническое обслуживание и обслуживать оборудование только в том случае, если что-то не так!

Профилактическое обслуживание и производительность (P)

Показатели производительности могут быть потеряны, когда оборудование не работает с оптимальной скоростью. В тот момент, когда идеальное время цикла сокращается, уменьшается и измерение производительности. Если ожидается, что ваша компания будет производить 60 штук в час для удовлетворения потребностей клиентов, имея время такта 5 минут, измерение производительности значительно снизится, если машина выйдет из строя на 1–2 часа.

Подводя итог, можно сказать, что профилактическое обслуживание может значительно улучшить показатель OEE вашей компании за счет повышения доступности, что позволяет получить высокую производительность, а также значительно снизить общие производственные затраты!

Введение в набор данных

Набор данных предоставлен командой, которая обслуживает водяные насосы из небольшого района вдали от большого города. В течение предыдущего года они испытали семь системных сбоев. Набор данных извлекается из Kaggle и содержит информацию с 52 различных датчиков. Метка вывода содержит три категории: 0: НОРМАЛЬНОЕ, 1: ВОССТАНОВЛЕНИЕ и 3: ПОВРЕЖДЕННОЕ. Мы стремимся предсказать поломку оборудования до того, как она произойдет, поскольку это даст время для автоматического отключения, чтобы предотвратить более серьезное повреждение или приезд техника для расследования проблемы.

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

Набор данных состоит из n = 220 320 наблюдений, которые разделены на следующие группы:

n_NORMAL205,836n_RECOVERING14,477n_BROKEN7

Естественно, у нас есть несбалансированный набор данных, из которого нормальные наблюдения дают ~ 93,43%, восстановление дает ~ 6,57% и, наконец, Broken дает ~ 0,003%.

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

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

Чтобы исследовать корреляцию между значениями, мы создаем тепловую карту:

Тепловая карта корреляции Спирмена

Тепловая карта показывает, что у нас мало датчиков, которые имеют высокую положительную корреляцию между собой. Кроме того, датчики 48–51 имеют положительную линейную связь от умеренной до высокой с выходной переменной. Высокая корреляция между нашей выходной переменной и этими датчиками может быть связана с важностью датчика для семи сбоев, которые мы идентифицировали в нашем наборе данных. Важность нашей функции показывает, что только 15 датчиков влияют на результат. Однако это может быть связано с тем, что неисправность в оборудовании произошла в «поле зрения» этих датчиков, и сама по себе не является индикатором того, что мы должны удалить информацию с других датчиков, поскольку они могут однажды обнаружить будущую поломку. Важно помнить, что мы наблюдали только 7 отказов за время существования данных, которые вряд ли будут включать все отказы, которые могут произойти внутри водяного насоса. Следовательно, извлечение и удаление объектов - не всегда хорошая идея.

Случайный лес

Сначала мы используем случайный лес для создания модели прогнозирования, а также для определения важности функций. Кроме того, мы используем случайный лес, потому что он отлично работает с несбалансированными наборами данных. В этой модели мы сохраняем все три классификации и переназначаем их как 0 = Нормальный, 1 = Восстановление и 2 = Неисправный.

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

RandomForestClassifier

FOREST = RandomForestClassifier(min_samples_split=min_split, max_depth=max_depth) FOREST.fit(X_train, y_train.ravel()) FOREST.score(X_train, y_train.ravel() FOREST.score(X_val, y_val.ravel() FOREST.score(X_test, y_test.ravel()

Используя случайный лес, мы можем создать модель с 100% точностью в обучении, проверке и тестировании. Обычно это вызывает опасения по поводу переобучения модели, однако мы действительно получаем идеальный результат как по нашим данным проверки, так и по тестовым данным. Кроме того, на основании результатов описательного анализа, действительно может быть правдой, что мы можем достичь такой высокой точности, потому что каждый класс значительно отличается друг от друга. На рисунке ниже можно увидеть нашу матрицу путаницы для поезда:

Матрица неточностей для поезда

Поскольку наш набор данных содержит несколько наблюдений с нарушенным типом, в наших данных проверки нет никаких наблюдений этого значения. Таким образом, мы «только» получаем матрицу 2x2 для нормального состояния и восстановления при проверке валидации:

Наконец, наши тестовые данные показывают следующее:

Матрица неточностей для теста

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

Если мы создадим последовательную связанную цепочку моделей, в которой модель случайного леса будет первой, ее можно будет использовать для определения восстановления и «разогрева». Это может сказать нашей модели прогнозирования, когда оборудование восстанавливается или «нагревается», поскольку эти данные не имеют отношения к делу, и мы можем быть уверены, что не прогнозируем в этот промежуток времени, уменьшая вероятность ложноотрицательных прогнозов.

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

Долговременная кратковременная память

Long-Short-Term Memory (LSTM) - это сложная нейронная сеть с ячейкой памяти, входом, выходом и забыванием (воротами) (см. Рисунок ниже). Ячейка памяти может хранить предыдущие данные в указанном количестве, которое можно использовать для улучшения прогноза. С помощью ворот можно добавлять или удалять информацию в ячейке. Каждая ячейка имеет три ворот, цель которых - защищать и контролировать ячейку.

Алгоритму LSTM требуется трехмерная входная форма. Три измерения:

  • Размер пакета: количество наблюдений.
  • Временные шаги: сколько предыдущих наблюдений нужно запомнить.
  • Features (input_dim): количество различных функций, которые мы используем для прогнозирования результата.
    Прежде чем преобразовать наш набор данных в 3D, нам необходимо предварительно обработать данные.

Архитектура с долгосрочной и краткосрочной памятью

Мы отбрасываем все данные, выходная переменная которых равна «Recovering», и преобразуем наши выходные данные в двоичные значения, из которых «Normal» = 1, а «Broken» = 0. . Для этого мы используем LabelEncoder:

Создать новую метку вывода

le = Labelencoder() df[‘machine_status’] = le.fit_transform(df[‘machine_status’])

Мы разделили наш набор данных на обучение, проверку и тестирование, поэтому у нас есть 101 886 наблюдений для нашей тренировки, 30 877 наблюдений для проверки и 82 338 наблюдений для тестирования. Мы масштабируем наши данные и используем PCA для уменьшения размерности.

Пришло время преобразовать наши данные в требуемое 3D. Мы хотим, чтобы наша модель могла хранить семь наблюдений в своей ячейке памяти и использовать их для помощи в прогнозировании вероятности отказа оборудования. Когда данные обучения, тестирования и проверки разделены, пора разработать нашу архитектуру LSTM, которая состоит из входного слоя, двух LSTM-слоев и выходного слоя с одним нейроном, поскольку наше выходное значение является двоичным:

LSTM архитектура

model = Sequential() model.add(LSTM(nb_hidden_neurons1, input_shape= (time_steps, num_features), kernel_initializer='lecun_uniform', activation=activation, return_sequences=True, recurrent_dropout=0.2)) model.add(LSTM(nb_hidden_neurons2, activation=activation, recurrent_dropout=0.2)) model.add(Dense(1, activation = "sigmoid")) model.compile(loss='binary_crossentropy', optimizer='RMSprop', metrics=[keras.metrics.binary_accuracy])

Мы используем Earlystopper и checkpointer, чтобы уменьшить вероятность переобучения, и теперь готовы обучать:

Вызов model.fit с обратными вызовами

history = model.fit(x_train_reshaped, y_train_reshaped, epochs = epochs, batch_size = batch_size, validation_data = (x_val_reshaped, y_val_reshaped), callbacks = [earlystopper, checkpointer], verbose=1, shuffle=False)

Мы получаем оценку точности поезда 99,99%, точность проверки 99,99% и тестовые данные, которые обеспечивают оценку точности 99,99%. При тестировании нашей модели на всем наборе данных мы достигли показателя точности 99,48% с показателем ROC AUC 96,59%.

Это замечательно! Однако на самом деле нас не так сильно интересует ни классификация, ни приведенная ниже матрица путаницы, которая показывает нам, что мы правильно прогнозируем только 5 из 2 отказов оборудования, или у нас есть 2779 ложных срабатываний. Нас интересует, насколько хорошо наша модель предсказывает вероятность поломки в будущем. Это означает, что мы принимаем некоторые ложные срабатывания, поскольку они служат признаком предстоящего сбоя. Кроме того, мы можем не предсказать отказ в тот момент, когда машина выйдет из строя. Однако мы предпочли бы иметь некоторые прогнозы до того, как это произойдет, о том, что что-то не так.

Матрица неточностей для всех данных

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

Мы знаем, что у нас вышла из строя техника 12 апреля 2018 года в 21:55. Чтобы увидеть, насколько хорошо наша модель обнаруживает этот сбой до того, как он произошел, мы запускаем простой вероятностный тест. При запуске вероятностного теста мы видим, что наша модель предсказывает вероятность отказа оборудования от нуля до нуля за несколько дней до того, как это произойдет. Однако, когда мы достигаем ровно 30 наблюдений до поломки, мы постоянно получаем предупреждения об отказе, происходящем с очень высокой вероятностью (0,85% и возрастающей до 98%). Кроме того, мы можем видеть, что вероятность медленно увеличивается от каждого наблюдения до отказа, что делает отличный прогноз отказа оборудования! Ложные срабатывания в нашей модели на самом деле способствуют тому, что эта вероятность настолько велика, что мы можем предсказать ее появление за 30 наблюдений до отказа! Наконец, когда машина работает в нормальном режиме в течение более длительного времени, вероятность отказа составляет 0–5%.

Ради интереса, спрогнозируем еще одно: мы знаем, что у нас сбой 8 июля 2018 года в 11:00. При тестировании способности наших моделей обнаруживать этот отказ, мы получаем повышенную вероятность отказа, 38 наблюдений до отказа, что позволяет своевременно принять меры и предотвратить более серьезный отказ.

Заключение

Если вы только начинаете заниматься машинным обучением и хотите учиться с нуля, я сделаю эту серию, которая будет длиться 5–6 минут о машинном обучении и некоторых побочных проектах в конце каждой главы, так что оставайтесь с нами и довольны обучение

Это мое личное исследование, если у вас есть какие-либо комментарии, пожалуйста, свяжитесь со мной.

Добро пожаловать на мою среднюю страницу

Github, LinkedIn, Захра Эльхамрауи, Upwork