Рекомендации по использованию API Детектора аномалий с многопараметрическим обнаружением
Внимание
Начиная с 20 сентября 2023 г. вы не сможете создавать новые Детектор аномалий ресурсы. Служба Детектор аномалий отменяется 1 октября 2026 года.
В этой статье приведены рекомендации по использованию многовариантных API-интерфейсов Детектор аномалий (MVAD). В этом руководстве вы выполните следующие действия.
- Использование API. Узнайте, как использовать MVAD без ошибок.
- Инжиниринг данных. Узнайте, как подготовить данные, чтобы повысить точность MVAD.
- Распространенные проблемы. Узнайте, как избежать распространенных проблем, с которыми сталкиваются клиенты.
- Часто задаваемые вопросы. Ознакомьтесь с ответами на часто задаваемые вопросы.
Использование API
Следуйте инструкциям в этом разделе, чтобы избежать ошибок при использовании MVAD. Если вы по-прежнему получаете ошибки, ознакомьтесь с полным списком кодов ошибок для объяснений и действий, которые необходимо предпринять.
Входные параметры
Обязательные параметры
Эти три параметра необходимы для обучения и вывода запросов API.
source
— ссылка на ZIP-файл, расположенный в Хранилище BLOB-объектов Azure с подписанными URL-адресами (SAS).startTime
— время начала данных, используемых для обучения или вывода. Если оно находится раньше самой ранней метки времени в данных, то в качестве начальной точки будет использоваться эта самая ранняя метка.endTime
— время окончания данных, используемых для обучения или вывода, которое должно быть позже или равноstartTime
. Если значениеendTime
находится позже самой поздней метки времени в данных, то в качестве конечной точки будет использоваться эта самая поздняя метка. ЕслиendTime
иstartTime
равны, это означает вывод одной точки данных, которая часто используется в сценариях потоковой передачи.
Необязательные параметры для API обучения
Другие параметры для API обучения являются необязательными.
slidingWindow
— количество точек данных, используемых для определения аномалий. Целое число между 28 и 2880. Значение по умолчанию — 300. Если параметрslidingWindow
имеет значениеk
для обучения модели, то, чтобы получить допустимые результаты, из исходного файла во время вывода должно быть доступно по меньшей мереk
точек.Многопараметрическое обнаружение аномалий (MVAD) принимает сегмент точек данных, а затем определяет, является ли следующая точка данных аномалией. Длина сегмента равна
slidingWindow
. При выборе значенияslidingWindow
необходимо учитывать два аспекта.- Свойства данных: их частота выборки и то, являются ли они периодическими. Если данные являются периодическими, можно задать длину в 1–3 цикла в качестве
slidingWindow
. Если данные имеют высокую частоту (меньшую степень детализации), например на уровне минут или секунд, можно задать относительно более высокое значениеslidingWindow
. - Компромисс между временем обучения и вывода и потенциальным влиянием на производительность. Большее значение
slidingWindow
может привести к более длительному времени обучения и вывода. Увеличенные значенияslidingWindow
не гарантируют рост точности. При небольшом значенииslidingWindow
может оказаться, что модели трудно прийти к оптимальному решению. Например,трудно обнаружить аномалии, еслиslidingWindow
содержит всего две точки.
- Свойства данных: их частота выборки и то, являются ли они периодическими. Если данные являются периодическими, можно задать длину в 1–3 цикла в качестве
alignMode
— выравнивание нескольких переменных (временного ряда) по меткам времени. Для этого параметра доступно два варианта:Inner
иOuter
, по умолчанию используетсяOuter
.Этот параметр крайне важен при неправильном выравнивании последовательностей меток времени у переменных. Перед дальнейшей обработкой модель должна выровнять переменные по одной последовательности меток времени.
Inner
означает, что модель сообщит результаты обнаружения только для меток времени, у которых каждая переменная имеет значение, т. е. для пересечения всех переменных.Outer
означает, что модель сообщит результаты обнаружения для меток времени, у которых любая переменная имеет значение, т. е. для объединения всех переменных.Ниже приведен пример, поясняющий различные значения
alignModel
.Переменная 1
TIMESTAMP значение 01.11.2020 1 02.11.2020 2 04.11.2020 4 05.11.2020 5 Переменная 2
TIMESTAMP значение 01.11.2020 1 02.11.2020 2 03.11.2020 3 04.11.2020 4 Объединение двух переменных типа
Inner
TIMESTAMP Переменная 1 Переменная 2 01.11.2020 1 1 02.11.2020 2 2 04.11.2020 4 4 Объединение двух переменных типа
Outer
TIMESTAMP Переменная 1 Переменная 2 01.11.2020 1 1 02.11.2020 2 2 03.11.2020 nan
3 04.11.2020 4 4 05.11.2020 5 nan
fillNAMethod
— заполнениеnan
в объединенной таблице. В объединенной таблице могут отсутствовать значения, и они должны обрабатываться должным образом. Мы предоставляем несколько методов для их заполнения. ЭтоLinear
,Previous
,Subsequent
,Zero
иFixed
, по умолчанию используется значениеLinear
.Вариант Способ Linear
Заполняет значения nan
с помощью линейной интерполяции.Previous
Распространяет последнее действительное значение для заполнения пропусков. Пример: [1, 2, nan, 3, nan, 4]
— >[1, 2, 2, 3, 3, 4]
Subsequent
Использует следующее действительное значение для заполнения пропусков. Пример: [1, 2, nan, 3, nan, 4]
— >[1, 2, 3, 3, 4, 4]
Zero
Вставляет нули вместо значений nan
.Fixed
Вставляет вместо значений nan
заданное действительное значение, которое должно быть указано вpaddingValue
.paddingValue
— значение заполнения используется для заполненияnan
, когдаfillNAMethod
имеет значениеFixed
и должен быть указан в данном случае. В иных случаях он является необязательным.displayName
— это необязательный параметр, который используется для идентификации моделей. Например, с его помощью можно пометить параметры, источники данных и любые другие метаданные модели и ее входных данных. Значение по умолчанию — пустая строка.
Схема входных данных
MVAD выявляет аномалии из группы метрик. Мы называем каждую метрику переменной или временным рядом.
Вы можете скачать пример файла данных от Майкрософт, чтобы проверить принятую схему: https://aka.ms/AnomalyDetector/MVADSampleData
Каждая переменная должна содержать два и только два поля:
timestamp
иvalue
, и они должны храниться в файле с разделителями-запятыми (CSV).Имена столбцов CSV-файла должны быть в точности
timestamp
иvalue
с учетом регистра.Значения
timestamp
должны соответствовать стандарту ISO 8601. Значениеvalue
может быть целым или десятичным числом с любым количеством десятичных разрядов. Хороший пример содержимого CSV-файла:TIMESTAMP значение 2019-04-01T00:00:00Z 5 2019-04-01T00:01:00Z 3,6 2019-04-01T00:02:00Z 4 ... ... Примечание.
Если метки времени содержат часы, минуты и (или) секунды, перед вызовом API убедитесь, что они правильно округлены.
Например, если предполагается, что частота данных будет одной точкой данных каждые 30 секунд, но при этом отображаются такие метки времени, как "12:00:01" и "12:00:28", это явно говорит о том, что следует предварительно обработать метки времени до новых значений, например "12:00:00" и "12:00:30".
Дополнительные сведения см. в разделе Округление метки времени в документе с рекомендациями.
Имя CSV-файла будет использоваться в качестве имени переменной и должно быть уникальным. Примеры: temperature.csv и humidity.csv.
Переменные для обучения и переменные для вывода должны быть согласованными. Например, если вы используете
series_1
,series_2
,series_3
,series_4
иseries_5
для обучения, необходимо предоставить точно такие же переменные для вывода.CSV-файлы должны быть сжаты в ZIP-файл и переданы в контейнер BLOB-объектов Azure. ZIP-файл может иметь любое имя на ваше усмотрение.
Структура папок
Распространенной ошибкой при подготовке данных являются дополнительные папки в ZIP-файле. Например, предположим, что имя ZIP-файла — series.zip
. Тогда после распаковки файлов в новую папку ./series
правильный путь к CSV-файлам будет ./series/series_1.csv
, а неправильный путь — ./series/foo/bar/series_1.csv
.
Правильный пример дерева каталогов после распаковки ZIP-файла в Windows
.
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Неправильный пример дерева каталогов после распаковки ZIP-файла в Windows
.
└── series
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Инжиниринг данных
Теперь вы можете запустить код с помощью API MVAD без ошибок. Что можно сделать для повышения точности модели?
Качество данных
- Так как модель изучает обычные шаблоны на основе данных за прошлые периоды, обучающие данные должны отображать общее нормальное состояние системы. Модели будет сложно изучить эти типы шаблонов, если в обучающих данных будет много аномалий. Эмпирически вычисленное пороговое значение доли аномалий составляет 1 % и ниже для хорошей точности.
- Как правило, недостающих значений в обучающих данных должно быть меньше 20%. Если отсутствует слишком много данных, модель может принять за обычные шаблоны значения полей, заполненных автоматически (обычно это линейные или постоянные значения). В результате реальные (не отсутствующие) точки данных могут определяться как аномалии.
Количество данных
Базовая модель MVAD имеет миллионы параметров. Ей требуется минимальное количество точек данных для изучения оптимального набора параметров. Эмпирическое правило заключается в том, что необходимо предоставить 5000 или более точек данных (метки времени) для каждой переменной , чтобы обучить модель для обеспечения хорошей точности. В целом чем больше обучающих данных, тем выше точность. Однако в тех случаях, когда вы не можете получить столько данных, мы по-прежнему рекомендуем поэкспериментировать с меньшими объемами данных и определить, будет ли точность приемлемой.
Каждый раз при вызове API вывода необходимо убедиться, что исходный файл данных содержит достаточно точек данных. Обычно это
slidingWindow
+ число точек данных, которым действительно требуются результаты вывода. Например, при потоковой передаче, когда каждый раз, когда требуется вывод по ОДНОЙ новой метке времени, файл данных может содержать только начальныйslidingWindow
плюс ОДНА точка данных. Затем можно было бы продолжить и создать другой ZIP-файл с тем же количеством точек данных (slidingWindow
+ 1), но перейти на один шаг вправо и отправить другое задание вывода.Все, что выходит за рамки этого или "до" ведущего скользящего окна, не влияет на результат вывода вообще и может привести только к понижению производительности. Все, что ниже может привести к ошибке
NotEnoughInput
.
Округление отметки времени
В группе переменных (временные ряды) каждая переменная может быть собрана из независимого источника. Метки времени различных переменных могут не соответствовать друг другу и известным частотам. Вот простой пример.
Переменная 1
TIMESTAMP | значение |
---|---|
12:00:01 | 1.0 |
12:00:35 | 1.5 |
12:01:02 | 0,9 |
12:01:31 | 2,2 |
12:02:08 | 1,3 |
Переменная 2
TIMESTAMP | значение |
---|---|
12:00:03 | 2,2 |
12:00:37 | 2.6 |
12:01:09 | 1.4 |
12:01:34 | 1,7 |
12:02:04 | 2.0 |
У нас есть две переменные, полученные с двух датчиков, которые отправляют одну точку данных каждые 30 секунд. Однако датчики не отправляют точки данных с определенной равномерной частотой — иногда это происходит раньше, иногда позже. Так как MVAD учитывает корреляции между разными переменными, метки времени должны быть правильно выровнены таким образом, чтобы метрики могли правильно отражать состояние системы. В приведенном выше примере метки времени переменной 1 и переменной 2 должны округляться до их частоты до выравнивания.
Давайте посмотрим, что произойдет без предварительной обработки. Если задано alignMode
Outer
значение (то есть объединение двух наборов), объединенная таблица:
TIMESTAMP | Переменная 1 | Переменная 2 |
---|---|---|
12:00:01 | 1.0 | nan |
12:00:03 | nan |
2,2 |
12:00:35 | 1.5 | nan |
12:00:37 | nan |
2.6 |
12:01:02 | 0,9 | nan |
12:01:09 | nan |
1.4 |
12:01:31 | 2,2 | nan |
12:01:34 | nan |
1,7 |
12:02:04 | nan |
2.0 |
12:02:08 | 1,3 | nan |
nan
указывает отсутствующие значения. Очевидно, что объединенная таблица — это не то, чего вы ожидаете. Переменная 1 и переменная 2 чередуются, и модель MVAD не может извлекать сведения о корреляциях между ними. Если задано значение alignMode
Inner
, объединенная таблица пуста, так как в переменной 1 и переменной 2 нет общей метки времени.
Таким образом, метки времени переменной 1 и переменной 2 должны быть предварительно обработаны (округляемые до ближайших 30-секундных меток времени) и новые временные ряды:
Переменная 1
TIMESTAMP | значение |
---|---|
12:00:00 | 1.0 |
12:00:30 | 1.5 |
12:01:00 | 0,9 |
12:01:30 | 2,2 |
12:02:00 | 1,3 |
Переменная 2
TIMESTAMP | значение |
---|---|
12:00:00 | 2,2 |
12:00:30 | 2.6 |
12:01:00 | 1.4 |
12:01:30 | 1,7 |
12:02:00 | 2.0 |
Теперь объединенная таблица имеет больше смысла.
TIMESTAMP | Переменная 1 | Переменная 2 |
---|---|---|
12:00:00 | 1.0 | 2,2 |
12:00:30 | 1.5 | 2.6 |
12:01:00 | 0,9 | 1.4 |
12:01:30 | 2,2 | 1,7 |
12:02:00 | 1,3 | 2.0 |
Значения различных переменных по близким меткам времени хорошо согласованы, а модель MVAD теперь может извлекать сведения о корреляции.
Ограничения
В API обучения и вывода есть некоторые ограничения, которые следует учитывать, чтобы избежать ошибок.
Общие ограничения
- Скользящее окно: 28–2880 меток времени, по умолчанию — 300. Для периодических данных задайте в качестве скользящего окна длину 2–4 цикла.
- Переменные числа: для обучения и пакетного вывода не более 301 переменных.
Ограничения обучения
- Метки времени: не более 1 000 000. Недостаточное количество меток времени может снизить качество модели. Рекомендуется использовать более 5000 меток времени.
- Степень детализации: минимальная степень детализации —
per_second
.
Ограничения вывода пакетной службы
- Метки времени: не более 20 000, длиной по крайней мере 1 скользящее окно.
Ограничения вывода потоковой передачи
- Метки времени: не более 2880, длиной по крайней мере 1 скользящее окно.
- Обнаружение меток времени: от 1 до 10.
Качество модели
Как бороться с ложноположительными и ложноотрицательными результатами в реальных сценариях?
Мы предоставили серьезность, которая указывает на важность аномалий. Ложноположительные результаты можно отсеять, установив порог серьезности. Иногда слишком большое количество ложноположительных результатов может появиться при наличии сдвигов в данных вывода. В таких случаях может потребоваться переобучить модель на основе новых данных. Если данные обучения содержат слишком много аномалий, в результатах обнаружения могут быть ложноотрицательные значения. Это связано с тем, что модель изучает шаблоны на основе данных обучения и аномалии могут сделать модель необъективной. Таким образом, правильная очистка данных может помочь уменьшить количество ложноотрицательных результатов.
Как определить, какую модель лучше использовать в соответствии с потерями при обучении и проверке?
Как правило, без набора данных с метками трудно определить, какая модель является лучшей. Однако мы можем использовать потери при обучении и проверке, чтобы получить приблизительную оценку и отбросить плохие модели. Во-первых, мы должны наблюдать, сходятся ли потери при обучении. Расхождения в потерях часто указывают на низкое качество модели. Во-вторых, значения потерь могут помочь определить, происходит ли недостаточное обучение или лжевзаимосвязь. Модели с недостаточным обучением или лжевзаимосвязью могут не иметь желаемой производительности. В-третьих, хотя определение функции потерь не отражает непосредственно эффективность обнаружения, значения потерь могут служить вспомогательным инструментом для оценки качества модели. Низкое значение потерь является необходимым условием для качественной модели, поэтому мы можем отбросить модели с высоким значением потерь.
Типичные проблемы
Помимо таблицы кодов ошибок мы узнали от клиентов, вроде вас, о распространенных проблемах при использовании MVAD API. Эта таблица поможет избежать этих проблем.
Проблема | Следствие | Описание проблемы и решения |
---|---|---|
Метки времени в данных обучения и/или данных вывода не округляются для согласования с соответствующей частотой данных каждой переменной. | Метки времени результатов вывода не соответствуют ожиданиям: их слишком мало или слишком много. | См. Округление меток времени до большего значения. |
Слишком много аномальных точек данных в обучающих данных | Это негативно влияет на точность модели, поскольку она рассматривает аномальные точки данных как обычные закономерности во время обучения. | По опыту, доля аномальных точек данных должна быть не выше 1 %. |
Слишком мало обучающих данных | Точность модели снижается. | По эмпирическим данным, для обучения модели MVAD требуется 15 000 или больше точек данных (меток времени) для каждой переменной, чтобы точность была приемлемой. |
Все точки данных со значением isAnomaly =true считаются аномалиями |
Слишком много ложноположительных результатов | Необходимо использовать как isAnomaly , так и severity (или score ), чтобы отсеять незначительные аномалии, а также (при необходимости) использовать группирование для проверки длительности аномалий, чтобы исключить случайный шум. См. раздел Вопросы и ответы ниже, чтобы узнать о различиях между severity и score . |
Вложенные папки заархивированы в файл данных для обучения или вывода. | Файлы данных CSV внутри вложенных папок пропускаются во время обучения и (или) вывода. | Вложенные папки в ZIP-файле запрещены. Дополнительные сведения см. в разделе Структура папок. |
Слишком много данных в файле данных вывода: например, сжатие всех данных за прошлые периоды в ZIP-файл данных вывода. | Вы можете не столкнуться с ошибками, но при попытке загрузить ZIP-файл в большой двоичный объект Azure или запустить вывод будет снижена производительность. | Дополнительные сведения см. в разделе Количество данных. |
Создание ресурсов Детектора аномалий в регионах Azure, которые еще не поддерживают MVAD, и вызов MVAD API. | При вызове API MVAD возникнет ошибка "ресурс не найден". | На этапе предварительной версии решение MVAD доступно не во всех регионах. Сделайте закладку страницы Новые возможности Детектора аномалий, чтобы следить за развертыванием MVAD в регионах. Вы также можете сообщить о проблеме на GitHub или связаться с нами по адресу AnomalyDetector@microsoft.com, чтобы получить сведения о конкретном регионе. |
Вопросы и ответы
Как работает скользящее окно MVAD?
Давайте рассмотрим два примера, чтобы узнать, как работает скользящее окно MVAD. Предположим, что вы установили значение slidingWindow
= 1440, а входные данные имеют интервал в одну минуту.
Потоковая передача. Вы хотите спрогнозировать, является ли аномальной одна точка данных в момент 2021-01-02T00:00:00Z.
startTime
иendTime
будут иметь одинаковые значения (2021-01-02T00:00:00Z). Однако источник данных вывода должен содержать не менее 1440 + 1 меток времени. MVAD будет принимать начальные данные перед целевой точкой данных ("2021-01-02T00:00:00Z"), чтобы решить, является ли целевая точка аномалией. Длина необходимых начальных данных составляетslidingWindow
, то есть 1440 в данном случае. 1440 = 60 * 24, поэтому входные данные должны начинаться как минимум с 2021-01-01T00:00:00Z.Пакетная передача. Для прогнозирования у вас есть несколько целевых точек данных.
endTime
будет больше, чемstartTime
. Вывод в таких сценариях выполняется с помощью скользящего окна. Например, MVAD будет использовать данные с2021-01-01T00:00:00Z
по2021-01-01T23:59:00Z
(включительно), чтобы определить, являются ли данные в моменте2021-01-02T00:00:00Z
аномалией. Затем он смещается вперед и использует данные с2021-01-01T00:01:00Z
по2021-01-02T00:00:00Z
(включительно), чтобы определить, являются ли данные в моменте2021-01-02T00:01:00Z
аномалией. Перемещение будет происходить такие образом (по 1440 точек данных для сравнения) до последней метки времени, заданнойendTime
(или самой последней метки времени). Таким образом, источник данных для вывода должен содержать данные, начиная сstartTime
-slidingWindow
, а в идеале —slidingWindow
+ (endTime
-startTime
).
В чем разница между severity
и score
?
Обычно мы рекомендуем использовать severity
в качестве фильтра для отсеивания "аномалий", которые не очень важны для бизнеса. В зависимости от сценария и шаблона данных менее важные аномалии часто имеют относительно низкие значения severity
или отдельные (дискретные) высокие значения severity
, например случайные пики.
В случаях, когда вам потребуется более сложные правила, чем пороговые значения или severity
продолжительность непрерывных высоких severity
значений, может потребоваться использовать score
для создания более мощных фильтров. Понимание того, как MVAD использует score
для определения аномалий, может помочь.
Мы считаем, является ли точка данных аномальной с точки зрения глобальной и локальной перспективы. Если score
в метке времени выше определенного порога, метка времени отмечается как аномалия. Если score
ниже порогового значения, но относительно выше в сегменте, она также отмечается как аномалия.