Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Начиная с 20 сентября 2023 г. вы не сможете создавать новые Детектор аномалий ресурсы. Служба Детектор аномалий отменяется 1 октября 2026 года.
В этой статье представлены рекомендации по рекомендуемым практикам использования API-интерфейсов многовариантного Детектора аномалий (MVAD). В этом руководстве вы выполните следующие действия.
- Использование API. Узнайте, как использовать MVAD без ошибок.
- Инжиниринг данных. Узнайте, как подготовить данные, чтобы повысить точность MVAD.
- Распространенные проблемы. Узнайте, как избежать распространенных проблем, с которыми сталкиваются клиенты.
- Часто задаваемые вопросы. Ознакомьтесь с ответами на часто задаваемые вопросы.
Использование API
Следуйте инструкциям в этом разделе, чтобы избежать ошибок при использовании MVAD. Если вы по-прежнему получаете ошибки, ознакомьтесь с полным списком кодов ошибок для объяснений и действий, которые необходимо предпринять.
Входные параметры
Обязательные параметры
Эти три параметра необходимы для запросов API на обучение и предсказание.
-
source
— ссылка на ZIP-архив, расположенный в хранилище blob-объектов Azure с подписанными ключами доступа (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
отметка времени значение 01.11.2020 1 02.11.2020 2 04.11.2020 4 05.11.2020 5 Переменная-2
отметка времени значение 01.11.2020 1 02.11.2020 2 03.11.2020 3 04.11.2020 4 Объединить две переменные
Inner
отметка времени Переменная 1 Переменная 2 01.11.2020 1 1 02.11.2020 2 2 04.11.2020 4 4 Объединить две переменные
Outer
отметка времени Переменная 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-файла:отметка времени значение 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
отметка времени | значение |
---|---|
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
отметка времени | значение |
---|---|
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
(что означает объединение двух наборов), объединенная таблица:
отметка времени | Переменная 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
отметка времени | значение |
---|---|
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
отметка времени | значение |
---|---|
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 |
Теперь объединенная таблица имеет больше смысла.
отметка времени | Переменная 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 и как минимум длина одного скользящего окна.
Ограничения потокового инференса
- Метки времени: не более 2880, длиной по крайней мере 1 скользящее окно.
- Обнаружение меток времени: от 1 до 10.
Качество модели
Как бороться с ложноположительными и ложноотрицательными результатами в реальных сценариях?
Мы предоставили уровень серьезности, который обозначает важность аномалий. Ложноположительные результаты можно отсеять, установив порог серьезности. Иногда слишком большое количество ложноположительных результатов может появиться при наличии сдвигов в данных вывода. В таких случаях может потребоваться переобучить модель на основе новых данных. Если данные обучения содержат слишком много аномалий, в результатах обнаружения могут быть ложноотрицательные значения. Это связано с тем, что модель изучает шаблоны на основе данных обучения и аномалии могут сделать модель необъективной. Таким образом, правильная очистка данных может помочь уменьшить количество ложноотрицательных результатов.
Как определить, какую модель лучше использовать в соответствии с потерями при обучении и проверке?
Как правило, без набора данных с метками трудно определить, какая модель является лучшей. Однако мы можем использовать потери при обучении и проверке, чтобы получить приблизительную оценку и отбросить плохие модели. Во-первых, мы должны наблюдать, сходятся ли потери при обучении. Расхождения в потерях часто указывают на низкое качество модели. Во-вторых, значения потерь могут помочь определить, происходит ли недостаточное обучение или переобучение. Модели с недообучением или переобучением могут не демонстрировать желаемую эффективность. В-третьих, хотя определение функции потерь не отражает непосредственно эффективность обнаружения, значения потерь могут служить вспомогательным инструментом для оценки качества модели. Низкое значение потерь является необходимым условием для качественной модели, поэтому мы можем отбросить модели с высоким значением потерь.
Типичные проблемы
Помимо таблицы кодов ошибок мы узнали от клиентов, вроде вас, о распространенных проблемах при использовании MVAD API. Эта таблица поможет избежать этих проблем.
Ловушка | Следствие | Описание проблемы и решения |
---|---|---|
Метки времени в данных обучения и/или данных вывода не округляются для согласования с соответствующей частотой данных каждой переменной. | Штампы времени результатов анализа не соответствуют ожиданиям: либо их слишком мало, либо слишком много. | Обратитесь к Обзор меток времени. |
Слишком много аномальных точек данных в обучающих данных | Это негативно влияет на точность модели, поскольку она рассматривает аномальные точки данных как обычные закономерности во время обучения. | Эмпирически, сдерживать долю аномалий на уровне или ниже 1 % будет полезно. |
Слишком мало обучающих данных | Точность модели снижается. | По эмпирическим данным, для обучения модели MVAD требуется 15 000 или больше точек данных (меток времени) для каждой переменной, чтобы точность была приемлемой. |
Все точки данных со значением isAnomaly =true считаются аномалиями |
Слишком много ложноположительных результатов | Необходимо использовать как isAnomaly , так и severity (или score ), чтобы отсеять незначительные аномалии, а также (при необходимости) использовать группирование для проверки длительности аномалий, чтобы исключить случайный шум. См. раздел Вопросы и ответы ниже, чтобы узнать о различиях между severity и score . |
Вложенные папки заархивированы в файл данных для обучения или вывода. | Файлы данных CSV внутри вложенных папок пропускаются во время обучения и (или) вывода. | Вложенные папки в ZIP-файле не допускаются. Дополнительные сведения см. в разделе Структура папок. |
Слишком много данных в файле данных вывода: например, сжатие всех данных за прошлые периоды в ZIP-файл данных вывода. | Вы можете не столкнуться с ошибками, но производительность будет ухудшена как при попытке загрузить ZIP-файл в Azure Blob Storage, так и при запуске моделирования. | Дополнительные сведения см. в разделе Количество данных. |
Создание ресурсов Детектора аномалий в регионах 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
ниже порогового значения, но относительно выше в сегменте, она также отмечается как аномалия.