Исследование для магистерской диссертации на тему обнаружения аномалий в технологических процессах с использованием LSTM нейронных сетей.
В работе используется набор данных SWaT версии SWaT.A1_Dec 2015. Набор данных представляет из себя собранные в течение 11 суток записи сигналов с датчиков и исполнительных механизмов в системе очистки воды. Для получения набора данных исследователи создали физическую лабораторую установку по очистке воды (Видео на YouTube).
Технологический процесс очистки воды состоял из 6 стадий, на каждой из которых работали различные датчики (уровня воды, давления, химического состава) и исполнительные механизмы (насосы, заслонки, перемешивающие устройства). На каждой стадии техпроцесса датчиками и актуаторами управлял ПЛК. Все ПЛК были объединены в сеть и подключены к SCADA-системе. Данные о состоянии 51 датчика и актуатора ежесекундно фиксировались и записывались в базу данных.
При создании набора данных система 7 суток работала в режиме нормального функционирования и 4 суток под воздействием моделируемых кибератак. Моделируемые атаки иммитировали ситуацию, когда злоумышленник получил доступ к ручному изменению показаний датчиков и изменению состояний исполнительных механизмов. Например, производилось умышленное занижение показаний датчика уровня воды в баке для того, чтобы насос не прекращал подачу воды, что могло привести к переполнению бака и нарушению техпроцесса.
Процесс сбора данных и смоделированные атаки описаны в статье.
Целью исследования была разработка метода обнаружения аномалий в технологическом процессе с помощью рекуррентной нейронной сети с LSTM. Для целей исследования были выбраны сигналы трех датчиков:
- LIT101 - датчик уровня воды на первой стадии техпроцесса
- DPIT301 - датчик перепада давления на третьей стадии техпроцесса
- LIT301 - датчик уровня воды на третьей стадии техпроцесса
В качестве обучающих данных были выбраны данные за период 3 суток с 10:00:00 25.12.2015 по 09:59:59 28.12.2015 (Обучающие данные находятся в Train.csv).
В качестве тестовых данных с аномалиями были выбраны данные за период 2 суток с 10:00:00 28.12.2015 по 09:59:59 30.12.2015 (Обучающие данные находятся в Test.csv).
За выбранный период на тестовые сигналы было проведено 6 атак: по 2 на каждый сигнал.
Точка атаки | Действие | Дата | Время начала | Время окончания |
---|---|---|---|---|
LIT101 | Увеличение на 1 каждую секунду | 28.12.2015 | 11:20:09 | 11:28:02 |
LIT101 | Установка значения 700 | 29.12.2015 | 18:29:59 | 18:41:40 |
DPIT301 | Установка значения 45 | 28.12.2015 | 13:09:45 | 13:25:54 |
DPIT301 | Установка значения 45 | 30.12.2015 | 01:42:07 | 01:53:30 |
LIT301 | Установка значения 1200 | 28.12.2015 | 12:08:05 | 12:15:12 |
LIT301 | Уменьшение на 1 каждую секунду | 29.12.2015 | 11:57:04 | 12:01:44 |
Для обнаружения аномалий нейронная сеть обучалась на данных из периода нормального функционирования в режиме автокодировщика. То есть на вход модели последовательно подавались отсчеты сигнала, и она обучалась воспроизводить этот же отсчет на выходе. Идея состояла в том, что рекуррентная нейросеть с LSTM за счет памяти, присущей таким сетям, сможет выучить паттерн, прослеживающися в сигнале нормы и успешно его воспроизводить. В случае нарушения выученного паттерна, сеть бы воспросизводила отсчеты с большей ошибкой, и по сигналу ошибки воспроизведения было бы возможным обнаружение аномалий.
После обучения на вход сети подавался весь обучающий сигнал и вычислялся сигнал ошибки воспроизведения (модуль разности между входом и выходом). Максимальное значение сигнала ошибки воспроизведения на обучающем сигнале принималось в качестве порога обнаружения аномалий.
Для тестирования на нейронную сеть подавался тестовый сигнал, рассчитывался сигнал ошибки воспроизведения, и те отсчеты, где сигнал ошибки воспроизведения превышал установленный порог, считались аномальными. Так как для каждого отсчета было известно, является ли он в действительности аномальным или нет, было возможным рассчитать показатели качества обнаружения аномалий на тестовой выборке (TP, TN, FP, FN, accuracy, precision, recall).
Метод обнаружения аномалий более подробно описан в статье.
Для повышения точности обнаружения аномалий дополнительно сигнал ошибки воспроизведения на тестовой выборке обрабатывался с помощью алгоритма обнаружения голосовой активности (Voice Activity Detection, VAD). Идея применения этого алгоритма состояла в том, что сигнал ошибки можно рассмотреть как звуковой сигнал, тогда на учасках нормы он будет подобен участкам тишины (фонового шума), а на участках аномалий активность сигнала можно обнаружить подобно участкам речевой активности. Применение данного алгоритма позволило повысить показатели качества обнаружения аномалий.
В рамках исследования было проведено 5 экспериментов. Сначала обучалось по одной нейросетевой модели для каждого из трех сигналов и проводилось тестирование качества обнаружения аномалий. Данные эксперименты представлены в блокнотах
После этого был проведен эксперимент с обучением одной нейросетевой модели сразу для трех сигналов (на вход подавался многомерный временной ряд). При этом на выходе модели анализировались как сигналы ошибки воспроизведения для каждого канала по-отдельности, так и суммарный сигнал ошибки. Данный эксперимент представлен в блокноте
Дополнительным экспериментом было обучение модели на сигнале LIT301, в котором было смоделировано наличие в техпроцессе двух режимов, каждый из которых считается нормальным. Для моделирования второго режима в обучающем сигнале определенный временной участок был намеренно поднят на 1000 единиц. В тестовый сигнал также был внесен такой же второй режим, а также две аномалии: по одной в каждом режиме. При первой аномалии уровень повышается на 500 мм, а при второй – снижается на 400 мм
Данные для этого эксперимента представлены в Train multimode.csv, Test multimode.csv
Данный эксперимент представлен в блокноте
Результаты тестов с выводом показателей качества обнаружения аномалий приведены в конце каждого блокнота с экспериментами.
Эксперименты реализованы программно в среде Jupyter Notebook на Python 3 с применением библиотек Pandas, Numpy, Scikit-learn, Matplotlib, Tensorflow, Keras.
Дополнительно разработаны модули на Python:
- rnn_training.py - функции создания и обучения модели рекуррентной нейронной сети. Функция обучения также реализует вывод обновляющегося каждую эпоху графика ошибки на обучающей и валидационной выборке прямо в ячейке блокнота
- VAD.py - реализация алгоритма Voice Activity Detection
- cf_matrix.py - отрисовка матрицы ошибок (Confusion matrix) в виде Heatmap