Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Обнаружение аномалий основано на декомпозиции ряда. Дополнительные сведения см. в разделе series_decompose().
Функция принимает выражение, содержащее ряд (динамический числовый массив) в качестве входных данных, и извлекает аномальные точки с оценками.
Синтаксис
series_decompose_anomalies (
Серия [ пороговая ,,
Дополнительные сведения о соглашениях синтаксиса.
Параметры
| Имя (название) | Type | Обязательно | Описание |
|---|---|---|---|
| Серия | dynamic |
✔️ | Массив числовых значений, как правило, результирующий результат операторов make-series или make_list . |
| Threshold | real |
Порог аномалии. Значение по умолчанию — 1,5, k для обнаружения мягких или сильных аномалий. | |
| Сезонность | int |
Управляет сезонным анализом. Возможны следующие значения: - -1: автоматическое определение сезонности с помощью series_periods_detect. Это значение по умолчанию.— целый период времени: положительное целое число, указывающее ожидаемый период в количестве ячеек. Например, если ряд находится в 1h ячейках, еженедельный период составляет 168 ячеек.- 0: нет сезонности, поэтому пропустите извлечение этого компонента. |
|
| Тенденция | string |
Управляет анализом тренда. Возможны следующие значения: - avg: определите компонент тренда как average(x). Это значение по умолчанию.- linefit: извлечение компонента тренда с помощью линейной регрессии.- none: нет тенденции, поэтому пропустите извлечение этого компонента. |
|
| Test_points | int |
Положительное целое число, указывающее количество точек в конце ряда, которые следует исключить из обучения или регрессии, процесса. Этот параметр должен быть задан для целей прогнозирования. Значение по умолчанию равно 0. | |
| AD_method | string |
Управляет методом обнаружения аномалий в остаточных временных рядах, содержащим одно из следующих значений: - ctukey: тест забора Tukey с настраиваемым диапазоном 10-90-го процентиля. Это значение по умолчанию.- tukey: Тест забора Tukey с стандартным 25-м-75-м процентилем диапазона.Дополнительные сведения о остатках временных рядов см. в series_outliers. |
|
| Seasonality_threshold | real |
Пороговое значение для оценки сезонности, если для параметра "Сезонность " задано значение autodetect. Порог оценки по умолчанию — 0,6. Дополнительные сведения см. в series_periods_detect. |
Возвраты
Функция возвращает следующую соответствующую серию:
-
ad_flag: тернарный ряд, содержащий (+1, -1, 0) маркировку вверх/вниз/без аномалий соответственно -
ad_score: Оценка аномалий -
baseline: прогнозируемое значение ряда в соответствии с декомпозицией
Алгоритм
Эта функция выполняет следующие действия.
- Вызывает series_decompose() с соответствующими параметрами, чтобы создать базовый и остаточный ряд.
- Вычисляет ad_score ряд, применяя series_outliers() с выбранным методом обнаружения аномалий в ряде остаточных элементов.
- Вычисляет ряд ad_flag, применяя пороговое значение для ad_score, чтобы пометить вверх/вниз/без аномалий соответственно.
Примеры
Обнаружение аномалий в еженедельной сезонности
В следующем примере создайте ряд с еженедельной сезонностью, а затем добавьте в нее некоторые выбросы.
series_decompose_anomalies автоматически определяет сезонность и создает базовый план, который фиксирует повторяющийся шаблон. Добавленные выбросы можно четко обнаружить в компоненте ad_score.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| render timechart
Обнаружение аномалий в еженедельной сезонности с помощью тренда
В этом примере добавьте тенденцию в ряд из предыдущего примера. Сначала запустите series_decompose_anomalies с параметрами по умолчанию, в которых avg значение по умолчанию по умолчанию принимает только среднее значение и не вычисляет тенденцию. Созданный базовый план не содержит тенденцию и менее точно по сравнению с предыдущим примером. Следовательно, некоторые из излишков, которые вы вставляете в данные, не обнаруживаются из-за более высокой дисперсии.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
Затем выполните тот же пример, но так как вы ожидаете тенденцию в серии, укажите linefit в параметре тренда. Вы можете увидеть, что базовый план гораздо ближе к входной серии. Обнаруживаются все вставленные выбросы, а также некоторые ложные срабатывания. См. следующий пример настройки порогового значения.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart
Настройка порога обнаружения аномалий
Несколько шумных точек были обнаружены как аномалии в предыдущем примере. Теперь увеличьте порог обнаружения аномалий с 1,5 по умолчанию до 2,5. Используйте этот диапазон взаимодействия, чтобы обнаруживаться только более сильные аномалии. Теперь будут обнаружены только те излия, которые вы вставляете в данные.
let ts=range t from 1 to 24*7*5 step 1
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts
| extend series_decompose_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag =
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart