Написано младшим специалистом по маркетингу Джоанн Куа и архитектором программного обеспечения Луисом Шейнкманом

Прошлой осенью мы наткнулись на блог, опубликованный AWS, дочерней компанией Amazon по облачным вычислениям, в котором объявлялось об Amazon Kinesis Analytics для обнаружения аномалий, который использует алгоритм Random Cut Forest (RCF) для выявления аномалий в потоковой передаче данных.

Новый алгоритм обнаружения аномалий вызвал у нас интерес, потому что мы разработали собственный тест для обнаружения аномалий в Numenta, который называется Numenta Anomaly Benchmark (NAB). Для тех, кто не знаком с NAB, это первый тест, предназначенный для оценки данных временных рядов, и он имеет уникальную схему оценки, которая отдает должное алгоритмам, которые способны находить аномалии раньше и наказывать за ложные результаты.

Репозиторий с открытым исходным кодом NAB содержит более 50 помеченных потоков данных, взятых из широкого спектра реальных источников. Читая статью AWS об использовании алгоритма RCF для обнаружения аномалий, мы были приятно удивлены, увидев, что авторы продемонстрировали свой алгоритм, используя один из образцов данных NAB, состоящий из шести месяцев использования такси в Нью-Йорке.

Из любопытства мы попросили Луиса Шейнкмана, одного из наших инженеров, запустить RCF на NAB, чтобы посмотреть, как новый алгоритм будет оцениваться по сравнению с другими алгоритмами обнаружения аномалий, которые мы оценивали с помощью NAB, включая наш собственный алгоритм HTM.

… И результаты уже в

RCF Amazon занял 5-е место из 10 алгоритмов обнаружения аномалий, протестированных на NAB. Большинство из них - это алгоритмы обнаружения аномалий, доступные в открытом доступе, а некоторые были отправлены на Конкурс NAB 2016.

Чтобы лучше понять, как Луис оценил RCF на NAB, я сел с ним и задал ему пару вопросов относительно процесса.

Не могли бы вы подробнее рассказать о том, как вы интегрировали RCF в NAB?

Есть 3 разных способа протестировать пользовательские алгоритмы на NAB:
1. Создать собственный детектор с помощью NAB API
2. Выявить аномалию NAB оценки перед этапом оптимизации пороговых значений
3. Предоставьте NAB возможность обнаружения аномалий

Поскольку алгоритм уже был реализован в AWS Kinesis Data Analytics, я выбрал вариант 2, в котором я просто передавал данные NAB напрямую в AWS Kinesis и вычислял оценки аномалий с помощью встроенной функции RANDOM_CUT_FOREST.

Насколько сильно вы доработали алгоритм, чтобы получить эти результаты?

Я использовал шаблон по умолчанию для обнаружения аномалий AWS Kinesis Data Analytics как есть; единственная настройка заключалась в нормализации оценки аномалий.

Вы пытались изменить параметры алгоритма, чтобы увидеть, будут ли другие результаты?

Я пробовал использовать разные значения для параметров shingleSize и numberOfTrees и опубликовал результаты, дающие лучшие результаты, которые я обнаружил, которые на самом деле были значениями по умолчанию для функции RANDOM_CUT_FOREST. Результаты легко воспроизвести, а параметры легко изменить, поэтому было бы здорово, если бы кто-нибудь из сообщества Open Source мог попробовать другие параметры и сообщить мне, улучшит ли это результаты.

Как кто-то может воспроизвести эти результаты?

Я описал, как это сделать, за семь шагов. Вы также можете найти эти инструкции в нашем репозитории NAB Random Cut Forest.

1. Клонировать репозиторий NAB
Эта команда клонирует репозиторий:

git clone https://github.com/numenta/NAB.git

2. Настройте свои учетные данные AWS.
Используйте Инструмент интерфейса командной строки AWS (CLI) и введите следующую команду:

aws configure

3. Создать структуру папок результатов NAB
Эта команда создаст необходимые каталоги и записи в файле config / thresholds.json:

python scripts/create_new_detector.py --detector randomCutForest

4. Создание приложения AWS Kinesis Analytics
Эта команда создаст и настроит новое приложение AWS Kinesis Analytics, готовое для получения данных NAB из входного потока и результатов аномалий вывода, подходящих для NAB, в выходной поток:

python nab/detectors/random_cut_forest/random_cut_forest.py --create

5. Потоковая передача всех файлов
Для потоковой передачи всех файлов данных NAB используйте следующую команду:

python nab/detectors/random_cut_forest/random_cut_forest.py --stream

6. Очистить
По окончании оценки рекомендуется удалить все ресурсы, используемые для вычисления оценок аномалий. Используйте следующую команду, чтобы удалить все ресурсы AWS, созданные этим скриптом:

python nab/detectors/random_cut_forest/random_cut_forest.py --delete

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

python run.py -d randomCutForest --optimize --score --normalize

Если у вас есть какие-либо вопросы или комментарии, или вы хотите поделиться своими результатами, не стесняйтесь оставлять комментарии ниже или начинать обсуждение в разделе NAB форума HTM.

Если вам понравилось читать эту статью, нажмите значок Хлопок ниже, чтобы порекомендовать ее своим подписчикам. Чтобы узнать больше о том, как наша работа способствует развитию теории мозга и машинного интеллекта, посетите наш веб-сайт или подпишитесь на нас в Facebook и Twitter.

Первоначально опубликовано на сайте numenta.com 29 июня 2018 г.