Рекомендации по использованию 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. Свойства данных: их частота выборки и то, являются ли они периодическими. Если данные являются периодическими, можно задать длину в 1–3 цикла в качестве slidingWindow. Если данные имеют высокую частоту (меньшую степень детализации), например на уровне минут или секунд, можно задать относительно более высокое значение slidingWindow.
    2. Компромисс между временем обучения и вывода и потенциальным влиянием на производительность. Большее значение slidingWindow может привести к более длительному времени обучения и вывода. Увеличенные значения slidingWindowне гарантируют рост точности. При небольшом значении slidingWindow может оказаться, что модели трудно прийти к оптимальному решению. Например,трудно обнаружить аномалии, если slidingWindow содержит всего две точки.
  • 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 должны округляться до их частоты до выравнивания.

Давайте посмотрим, что произойдет без предварительной обработки. Если задано alignModeOuter значение (то есть объединение двух наборов), объединенная таблица:

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 не может извлекать сведения о корреляциях между ними. Если задано значение alignModeInner, объединенная таблица пуста, так как в переменной 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 ниже порогового значения, но относительно выше в сегменте, она также отмечается как аномалия.

Следующие шаги