Проект Data Science для DSND Udacity

Определение проекта

Обзор

Процесс Теннесси Истмана (TEP) представляет собой проблему управления технологическим процессом в масштабах всего предприятия. Первоначально он был предложен в 1993 году, чтобы академическое сообщество могло должным образом изучить проблемы, с которыми сталкивается промышленная среда. Это по-прежнему очень актуальная проблема, на которую уже ссылается более 2900 статей.

ТЭП может представлять собой работу всего промышленного предприятия и состоит из пяти взаимосвязанных единичных операций. Подробное его описание выходит за рамки данной статьи, но заинтересованный читатель может найти его полное описание здесь. Это действительно интересная задача с множеством возможностей, не бойтесь погрузиться в ее детали!

Обнаружение аномальных режимов работы является весьма актуальной проблемой в отрасли, так как позволяет предотвратить опасные ситуации и избежать серьезных аварий. А что, если бы у нас были нормальные и аномальные выборки оперативных данных из задачи ТЭП? К счастью, в Kaggle уже доступен богатый набор данных.

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

Постановка задачи

Используя набор данных TEP и Keras, в этой записи блога исследуется использование особого типа автокодировщика для задачи обнаружения аномалий: LSTM Autoencoder. В задачу не входит детальное описание работы этой модели, поэтому читателю предлагается заглянуть здесь и здесь.

Код, разработанный для этого проекта, можно найти в этом репозитории github.

Метрики

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

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

Анализ

Описание данных

Доступны четыре набора данных, содержащих смоделированные данные из задачи TEP. Он уже разделен на тренировочный и тестовый, и для каждого случая доступны нормальные и ошибочные симуляции. Всего для анализа доступно 20 типов неисправностей. Ошибки вносятся через 1 и 8 часов в ошибочные наборы данных для обучения и тестирования.

Всего в наборе данных доступно 55 переменных процесса. Из них 12 управляемых переменных и остальные измеряемые переменные. Объяснение можно найти здесь:

Контролируемая или измеряемая переменная — это отслеживаемая выходная переменная процесса. Значение контролируемого выходного параметра обычно удерживается в жестких заданных пределах.

Управляемая переменная – это входная переменная или параметр процесса, который изменяется управляющим сигналом от процессора к приводу. Изменяя входную переменную, можно контролировать значение измеряемой переменной.

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

Исследование и визуализация данных

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

На первый взгляд мы можем заметить следующее:

  • Данные кажутся зашумленными.
  • Переменная «xmeas_9» выглядит как дискретный сигнал, так как постоянно переключается между фиксированными значениями.
  • Некоторые переменные находятся в очень разных масштабах. Поэтому их нужно масштабировать.

Обратите внимание, что некоторые переменные выглядят очень похоже. Итак, давайте посмотрим на корреляции между ними. Для этого рассматриваются все нормальные симуляции в обучающем наборе данных:

Как и ожидалось, некоторые переменные сильно коррелированы. Обратите внимание, что некоторые измеряемые и контролируемые переменные коррелируют, как описано ранее. Мы можем выделить следующую пару переменных:

  • xmeas_7 с xmeas_13
  • xmeas_16 с xmeas_13
  • xmeas_19 с xmv_9
  • xmeas_10 с xmv_6
  • xmeas_20 с xmv_5
  • xmeas_12 с xmv_7
  • xmeas_1 с xmv_3
  • xmeas_17 с xmv_11

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

Методология

Предварительная обработка данных

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

Как видно из предыдущего раздела, переменные находятся в разных масштабах. Следовательно, первым шагом предварительной обработки было их масштабирование, чтобы иметь нулевое среднее значение и единичную дисперсию (стандартное масштабирование). После этого удаляются сильно коррелированные переменные: xmeas_7, xmeas_13, xmeas_18, xmv_11, xmv_9, xmv_7, xmv_6, xmv_5 и xmv_3. Предпочтение было отдано отказу от управляемых переменных, так как они напрямую влияют на измеряемые.

Наконец, мы должны подготовить входные данные к формату, ожидаемому нейронной сетью LSTM. По сути, мы должны разделить каждую симуляцию на подпоследовательности заданного количества временных шагов. Например, если обучающая симуляция содержит N выборок и J признаков, для W временных шагов измененный набор данных представляет собой матрицу формы >МхШхJ. На диаграмме ниже показано это преобразование:

Вот и все! После этого последнего шага данные готовы для обучения автоэнкодера.

Выполнение

Внедрение можно разделить на три основные задачи:

  1. Обучение автоэнкодеру
  2. Оценка автоэнкодера
  3. Обнаружение аномалий

На первом этапе автоэнкодер обучается на обычном наборе данных моделирования. Это было сделано в скрипте (названном «train_autoencoder.py»), который выполняет следующие действия:

  1. Загрузите тренировочные данные в память, применяя шаги предварительной обработки, описанные ранее.
  2. Обучить автоэнкодер
  3. Сохраните модель и результаты в локальной файловой системе

Оценка результатов выполняется в отдельной записной книжке (под названием «LSTM Autoencoder — Оценка»). Это важно, потому что быстрее обучать модель вне среды Jupyter. Эта записная книжка предназначена для анализа того, насколько хорошо выполняется реконструкция, с использованием метрики, определенной ранее.

Наконец, анализ обнаружения аномалий выполняется в том же блокноте. Он загружает окончательную модель и ошибочные наборы данных, а затем оценивает, насколько хорошо система обнаруживает аномалии. Нужно было только настроить порог обнаружения или не обнаружения аномалии. Из-за большого размера файла был создан скрипт (названный «evaluate_anomaly_detection.py») для обработки всех симуляций в ошибочных наборах данных.

Уточнение

Из-за ограничений вычислительной мощности настройка параметров автоэнкодера производилась эмпирическим путем. Первоначальная архитектура и параметры нейронной сети не менялись, и основное внимание уделялось поиску количества эпох обучения, которое уравновесило бы показатели обучения/валидации и размер пакета, что сократило время обучения.

Пример результатов показан на изображении ниже, где было обнаружено, что размер пакета 64 с 30 эпохами обеспечивает наилучший баланс, поэтому эти параметры были выбраны для обучения окончательной модели.

Результаты

Оценка и проверка модели

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

Используя обучающую информацию, мы можем установить порог обнаружения аномалий как 99-й процентиль приведенного выше распределения, который равен 1,2675. Это та же методика, предложенная здесь.

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

Большой! Автоэнкодер смог правильно определить, что симуляция имеет аномалию. Если мы применим то же самое к обычному моделированию, аномалия не будет обнаружена, поскольку ошибка остается ниже порога:

Таким образом, автоэнкодер и подход к обнаружению аномалий работают должным образом.

Обоснование

Применяя модель обнаружения аномалий к ошибочным обучающим и тестовым наборам данных, для обоих была получена точность около 55%. Более того, для обычного тестового набора данных была получена 100% точность.

Таким образом, модель хорошо работает для нормальной работы, но не так хороша для обнаружения аномалий. Если мы углубимся в точность по типам сбоев, то заметим, что предложенное правило имеет высокую точность для 11 типов сбоев и 0 для остальных:

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

Заключение

Отражение

Процесс, рассмотренный в этом посте, можно обобщить в виде следующих шагов:

  1. Был найден общедоступный набор данных со сложной и актуальной проблемой в промышленном контексте.
  2. Данные были загружены, проанализированы и обработаны
  3. Автоэнкодер LSTM был обучен с использованием данных
  4. Создана модель обнаружения аномалий
  5. Точность системы была проанализирована

Шаги 3 и 4 показались мне наиболее сложными для реализации, так как мне пришлось много изучать, как работает автоэнкодер, и искать методы, чтобы использовать его в задаче обнаружения аномалий. Пришлось также ознакомиться с пакетом Keras, так как до этого проекта я с ним был не очень знаком.

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

Улучшение

Есть много аспектов, которые можно было бы улучшить, чтобы сделать предлагаемую технику намного более надежной. Основной из них связан с доступностью вычислительных ресурсов: я рекомендую иметь мощный компьютер или использовать облачный сервис, такой как AWS или Azure, для обучения моделей. Помимо этого, я могу перечислить некоторые технические моменты, которые можно было бы изучить дополнительно:

  • Оцените различные архитектуры автоэнкодера LSTM и гиперпараметры, чтобы уменьшить наблюдаемое переобучение.
  • Добавьте обратный вызов для ранней остановки, чтобы остановить обучение автоэнкодера, когда ошибка проверки превышает ошибку обучения.
  • Изучите структуру системы TEP, чтобы точно настроить автоэнкодер.
  • Точная настройка ошибки, используемой для обнаружения аномалий
  • Оцените другие статистические методы для определения правила обнаружения аномалий, такие как описанный здесь.
  • Создайте и опубликуйте веб-приложение для визуализации результатов обнаружения аномалий.
  • Объедините обнаружение аномалии с онлайн-анализом первопричин: не только выявляйте аномалию, но и находите, какая переменная ее вызвала.

Ссылки:

  • Даунс, Джеймс Дж. И Эрнест Ф. Фогель. «Проблема управления промышленным процессом в масштабах всего завода». Компьютеры и химическая инженерия 17.3 (1993): 245–255.
  • Малхотра, Панкадж и др. «Кодер-декодер на основе LSTM для обнаружения аномалий с помощью нескольких датчиков». препринт arXiv arXiv:1607.00148 (2016 г.).
  • Му, Ке и др. «Мониторинг промышленных процессов и диагностика неисправностей на основе глубокой сети, дополненной временным вниманием». Журнал систем обработки информации 17.2 (2021): 242–252.
  • Рен, Цзяян и Донг Ни. «Пакетная сеть декодера LSTM-кодировщика для пакетного мониторинга процессов». Исследования и проектирование в области химической инженерии 164 (2020): 102–112.