Агрегирование по последовательным различиям
Последовательное различие — это техника, где значения в временном ряду вычитаются из себя с разными временными лагами или периодами. Например, значение f(x) = f(xt) - f(xt-n), где n — используемый период.
Период 1 эквивалентен производной без нормализации по времени: это просто изменение от одной точки к следующей. Одиночные периоды полезны для удаления постоянных и линейных трендов.
Одиночные периоды также полезны для преобразования данных в стационарный ряд. На этом примере показан график Dow Jones за ~250 дней. Исходные данные не являются стационарными, что затрудняет их использование с некоторыми техниками.
Вычисление первого различия позволяет детерминировать данные (например, удалить постоянный, линейный тренд). Мы можем увидеть, что данные становятся стационарным рядом (например, первое различие случайно распределено около нуля и не демонстрирует никаких закономерностей/поведения). Преобразование показывает, что набор данных следует случайному блужданию; значение — это предыдущее значение ± случайное количество. Это понимание позволяет выбрать дальнейшие инструменты для анализа.
Можно использовать более длинные периоды для удаления сезонных/циклических колебаний. На этом примере синтетически сгенерирована популяция леммингов с синусоидальной волной + постоянным линейным трендом + случайным шумом. Синусоидальная волна имеет период 30 дней.
Первое различие удаляет постоянный тренд, оставляя только синусоидальную волну. Затем применяется 30-е различие к первому различию для удаления циклического поведения, оставляя стационарный ряд, который пригоден для дальнейшего анализа.
Синтаксис
Агрегирование по serial_diff выглядит так:
{
"serial_diff": {
"buckets_path": "the_sum",
"lag": 7
}
} Таблица 79. serial_diff Параметры
| Имя параметра | Описание | Обязательный | Значение по умолчанию |
|---|---|---|---|
| Путь к метрике, которая нас интересует (см. | Обязательный | |
| Исторический бакет, который вычитается из текущего значения. Например, лаг 7 вычтет текущее значение из значения 7 бакетов назад. Должен быть положительным целым числом, отличным от нуля | Необязательный |
|
| Определяет, что должно произойти при обнаружении разрыва в данных. | Необязательный |
|
| Шаблон DecimalFormat для выходного значения. Если задано, отформатированное значение возвращается в свойстве | Необязательный |
|
Агрегирования по serial_diff должны быть вложены внутри агрегирования по histogram или date_histogram:
resp = client.search(
size=0,
aggs={
"my_date_histo": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day"
},
"aggs": {
"the_sum": {
"sum": {
"field": "lemmings"
}
},
"thirtieth_difference": {
"serial_diff": {
"buckets_path": "the_sum",
"lag": 30
}
}
}
}
},
)
print(resp) response = client.search(
body: {
size: 0,
aggregations: {
my_date_histo: {
date_histogram: {
field: 'timestamp',
calendar_interval: 'day'
},
aggregations: {
the_sum: {
sum: {
field: 'lemmings'
}
},
thirtieth_difference: {
serial_diff: {
buckets_path: 'the_sum',
lag: 30
}
}
}
}
}
}
)
puts response const response = await client.search({
size: 0,
aggs: {
my_date_histo: {
date_histogram: {
field: "timestamp",
calendar_interval: "day",
},
aggs: {
the_sum: {
sum: {
field: "lemmings",
},
},
thirtieth_difference: {
serial_diff: {
buckets_path: "the_sum",
lag: 30,
},
},
},
},
},
});
console.log(response); POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day"
},
"aggs": {
"the_sum": {
"sum": {
"field": "lemmings"
}
},
"thirtieth_difference": {
"serial_diff": {
"buckets_path": "the_sum",
"lag" : 30
}
}
}
}
}
} | Строится | |
| Используется метрика | |
| Наконец, задаётся агрегирование по |
Последовательные различия создаются путём предварительного указания histogram или date_histogram по полю. Затем можно добавить обычные метрики, например sum, внутри этой гистограммы. Наконец, serial_diff вкладывается внутрь гистограммы. Параметр buckets_path используется для указания на одну из соседних метрик внутри гистограммы (см. buckets_path Синтаксис для описания синтаксиса для buckets_path).
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/search-aggregations-pipeline-serialdiff-aggregation.html