series_decompose_anomalies()
Обнаружение аномалий основано на декомпозиции рядов. Дополнительные сведения см. в разделе series_decompose().
Функция принимает выражение, содержащее ряд (динамический числовой массив) в качестве входных данных, и извлекает аномальные точки с оценками.
Синтаксис
series_decompose_anomalies (
Серии,
[ Пороговое значение,
Сезонность,
Тенденция,
,
Test_points,
AD_methodSeasonality_threshold ])
Дополнительные сведения о соглашениях о синтаксисе.
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
Series | dynamic |
✔️ | Массив числовых значений, как правило, результирующий результат операторов make-series или make_list . |
Пороговое значение. | 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 : тест ограждения Туки со стандартным диапазоном 25-75-го процентиля.Дополнительные сведения о остаточных временных рядах см . в разделе series_outliers. |
|
Seasonality_threshold | real |
Пороговое значение для оценки сезонности, если для параметра Сезонность задано автоматическое определение. Порог оценки по умолчанию — 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
в параметре trend. Вы можете видеть, что базовый план гораздо ближе к входным рядам. Обнаруживаются все вставленные выбросы, а также некоторые ложные срабатывания. См. следующий пример настройки порогового значения.
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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по