series_decompose()
Применяет преобразование декомпозиции к ряду.
Принимает выражение, содержащее ряд (динамический числовой массив), в качестве входных данных и разлагает его на сезонные, трендовые и остаточные компоненты.
Синтаксис
series_decompose(
Серии,
[ Сезонность,
Тенденция,
,
Test_pointsSeasonality_threshold ])
Дополнительные сведения о соглашениях о синтаксисе.
Параметры
Имя | Тип | Обязательно | Описание |
---|---|---|---|
Series | dynamic |
✔️ | Массив числовых значений, как правило, результирующий результат операторов make-series или make_list . |
Сезонность | int |
Управляет сезонным анализом. Вы можете выбрать - -1 : автоматическое определение сезонности с помощью series_periods_detect. Это значение по умолчанию.— точка: положительное целое число, указывающее ожидаемый период в количестве ячеек. Например, если ряд находится в 1 - h ячейках, еженедельный период равен 168 ячейкам.- 0 : нет сезонности, поэтому пропустите извлечение этого компонента. |
|
Тренд | string |
Управляет анализом тенденций. Вы можете выбрать - avg : определите компонент тренда как average(x) . Это значение по умолчанию.- linefit : извлечение компонента тренда с помощью линейной регрессии.- none : нет тренда, поэтому пропустите извлечение этого компонента. |
|
Test_points | int |
Положительное целое число, указывающее количество точек в конце ряда, исключаемых из процесса обучения или регрессии. Этот параметр следует задать для целей прогнозирования. Значение по умолчанию — 0. | |
Seasonality_threshold | real |
Пороговое значение для оценки сезонности, если для параметра Сезонность задано автоматическое определение. Порог оценки по умолчанию — 0,6. Дополнительные сведения см. в разделе series_periods_detect. |
Возвращаемое значение
Функция возвращает следующий соответствующий ряд:
baseline
: прогнозируемое значение ряда (сумма сезонных компонентов и компонентов тренда, см. ниже).seasonal
: ряд сезонных компонентов:- Значение , если период не обнаружен или явно задано значение 0: константное значение 0.
- Если обнаружено или задано положительное целое число: медиана точек рядов на той же фазе
trend
: ряд компонента тренда.residual
: ряд остаточного компонента (то есть x — базовый план).
Примечание
- Порядок выполнения компонентов:
- Извлечение сезонных рядов
- Вычесть его из x, создав десезональный ряд
- Извлечение компонента тренда из десесонального ряда
- Создайте базовый план = сезонный + тренд
- Создание остаточного значения = x — базовый план
- Должна быть включена сезонность и или тенденция. В противном случае функция будет избыточной и просто возвращает базовый показатель = 0 и остаточный = x.
Дополнительные сведения о декомпозиции рядов
Этот метод обычно применяется к временным рядам метрик, которые, как ожидается, будут проявлять периодическое поведение и (или) тенденцию. Метод можно использовать для прогнозирования будущих значений метрик и (или) обнаружения аномальных значений. Неявное предположение этого процесса регрессии заключается в том, что помимо сезонного и трендового поведения временные ряды являются стохастичными и случайным образом распределены. Прогнозирование будущих значений метрик на основе сезонных компонентов и компонентов тренда, игнорируя остаточную часть. Обнаружение аномальных значений на основе обнаружения выбросов только на остаточной части. Дополнительные сведения см. в разделе Декомпозиция временных рядов.
Примеры
Еженедельная сезонность
В следующем примере мы создадим ряд с еженедельной сезонностью и без тренда, а затем добавим в него некоторые выбросы. series_decompose
находит и автоматически обнаруживает сезонность и создает базовый план, почти идентичный сезонному компоненту. Добавленные выбросы хорошо видны в компоненте остатков.
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(y)
| render timechart
Еженедельная сезонность с тенденцией
В этом примере мы добавим тенденцию к ряду из предыдущего примера. Сначала мы запускаем series_decompose
с параметрами по умолчанию. Значение тренда 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(y)
| 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(y, -1, 'linefit')
| render timechart
См. также
- Визуализация результатов с помощью аномалиха
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по