Агрегация скользящего среднего
[6.4.0] Устарело в версии 6.4.0. Агрегация скользящей средней устарела в пользу более общей агрегации скользящей функции. Новая агрегация скользящей функции предоставляет все те же возможности, что и агрегация скользящей средней, но также предоставляет большую гибкость.
При заданной упорядоченной последовательности данных агрегация скользящей средней будет перемещать окно по данным и выводить среднее значение этого окна. Например, для данных [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] мы можем рассчитать простую скользящую среднюю с размером окна 5 следующим образом:
- (1 + 2 + 3 + 4 + 5) / 5 = 3
- (2 + 3 + 4 + 5 + 6) / 5 = 4
- (3 + 4 + 5 + 6 + 7) / 5 = 5
- и т.д.
Скользящие средние являются простым методом сглаживания последовательных данных. Скользящие средние обычно применяются к данным, основанным на времени, таким как цены акций или метрики сервера. Сглаживание может использоваться для устранения колебаний высокой частоты или случайного шума, что позволяет легче визуализировать тенденции низкой частоты, такие как сезонность.
Синтаксис
Агрегация moving_avg выглядит следующим образом:
{
"moving_avg": {
"buckets_path": "the_sum",
"model": "holt",
"window": 5,
"gap_policy": "insert_zeros",
"settings": {
"alpha": 0.8
}
}
} Таблица 59. moving_avg Параметры
Имя параметра | Описание | Обязательно | Значение по умолчанию |
| Путь к метрике, которая нас интересует (см. | Обязательно | |
| Модель взвешивания скользящей средней, которую мы хотим использовать | Необязательно |
|
| Политика, применяемая при обнаружении пробелов в данных. См. Обработка пробелов в данных. | Необязательно |
|
| Размер окна, по которому нужно выполнить "сдвиг" по гистограмме. | Необязательно |
|
| Необходимо ли выполнить алгоритмическое минимизирование модели. См. Минимизация для получения дополнительной информации | Необязательно |
|
| Настройки, специфичные для модели, содержимое которых отличается в зависимости от указанной модели. | Необязательно |
moving_avg агрегации должны быть вложены в histogram или date_histogram агрегации. Они могут быть вложены как любые другие метрические агрегации:
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": { "buckets_path": "the_sum" }
}
}
}
}
} | Создаётся | |
| Используется метрика | |
| Наконец, мы указываем агрегацию |
Скользящие средние создаются путём предварительного указания histogram или date_histogram по полю. Затем можно необязательно добавить обычные метрики, такие как sum, внутри этой гистограммы. Наконец, moving_avg встраивается внутри гистограммы. Параметр buckets_path используется для указания одной из сопряжённых метрик внутри гистограммы (см. buckets_path Синтаксис для описания синтаксиса buckets_path).
Пример ответа от вышеуказанной агрегации:
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"my_date_histo": {
"buckets": [
{
"key_as_string": "2015/01/01 00:00:00",
"key": 1420070400000,
"doc_count": 3,
"the_sum": {
"value": 550.0
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"the_sum": {
"value": 60.0
},
"the_movavg": {
"value": 550.0
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"the_sum": {
"value": 375.0
},
"the_movavg": {
"value": 305.0
}
}
]
}
}
} Модели
Агрегация moving_avg включает четыре различные модели скользящей средней. Основное различие заключается в том, как значения в окне взвешиваются. По мере того, как данные становятся "старее" в окне, они могут быть взвешены по-разному. Это повлияет на окончательное среднее значение для данного окна.
Модели задаются с помощью параметра model. Некоторые модели могут иметь необязательные конфигурации, которые задаются внутри параметра settings.
Простая
Модель simple вычисляет сумму всех значений в окне, а затем делит на размер окна. Она фактически представляет собой простое среднее арифметическое окна. Простая модель не выполняет никакого временного взвешивания, что означает, что значения из simple скользящей средней имеют тенденцию "отставать" от реальных данных.
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "simple"
}
}
}
}
}
} В модели simple нет специальных настроек.
Размер окна может изменять поведение скользящей средней. Например, небольшое окно ("window": 10) будет тесно следовать за данными и сглаживать только колебания мелкого масштаба:
В отличие от этого, simple скользящая средняя с большим размером окна ("window": 100) будет сглаживать все колебания высокой частоты, оставляя только тенденции низкой частоты и долгосрочные тренды. Она также имеет тенденцию "отставать" от реальных данных на значительную величину:
Линейная
Модель linear присваивает линейные веса точкам в последовательности таким образом, что "более старые" точки данных (например, те, которые находятся в начале окна) вносят линейно меньший вклад в общее среднее. Линейное взвешивание помогает уменьшить "отставание" от среднего значения данных, так как более старые точки имеют меньшее влияние.
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "linear"
}
}
}
}
}
} В модели linear нет специальных настроек.
Как и в модели simple, размер окна может изменять поведение скользящей средней. Например, небольшое окно ("window": 10) будет тесно следовать за данными и сглаживать только колебания мелкого масштаба:
В отличие от этого, linear скользящая средняя с большим размером окна ("window": 100) будет сглаживать все колебания высокой частоты, оставляя только тенденции низкой частоты и долгосрочные тренды. Она также имеет тенденцию "отставать" от реальных данных на значительную величину, хотя обычно меньше, чем модель simple:
EWMA (Экспоненциально взвешенная)
Модель ewma (также известная как "одноэкспоненциальная") похожа на модель linear, за исключением того, что более старые точки данных становятся экспоненциально менее важными, а не линейно менее важными. Скорость убывания важности можно контролировать с помощью настройки alpha. Малые значения приводят к медленному убыванию веса, что обеспечивает большее сглаживание и учитывает большую часть окна. Более большие значения ускоряют убывание веса, что уменьшает влияние более старых значений на скользящую среднюю. Это приводит к тому, что скользящая средняя будет более точно следовать за данными, но с меньшим сглаживанием.
Значение по умолчанию для alpha равно 0.3, и значение может быть любым числом с плавающей точкой от 0 до 1 включительно.
Модель EWMA может быть минимизирована
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "ewma",
"settings": {
"alpha": 0.5
}
}
}
}
}
}
} Holt-Линейный
Модель holt (также известная как "двойное экспоненциальное") включает второй экспоненциальный член, который отслеживает тенденцию данных. Простая экспонента не работает хорошо, когда данные имеют основополагающую линейную тенденцию. Модель двойного экспоненциального вычисляет два значения внутри: "уровень" и "тенденцию".
Вычисление уровня аналогично ewma и представляет собой экспоненциально взвешенное представление данных. Разница заключается в том, что вместо исходного значения используется предварительно сглаженное значение, что позволяет ему оставаться близким к исходному ряду. Вычисление тенденции рассматривает разницу между текущим и последним значением (например, наклон или тенденция сглаженных данных). Значение тенденции также экспоненциально взвешено.
Значения получаются путем умножения компонентов уровня и тенденции.
Значение по умолчанию для alpha равно 0.3, а beta равно 0.1. Параметры принимают любое число с плавающей точкой от 0 до 1 включительно.
Модель Holt-Линейный может быть минимизирована
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "holt",
"settings": {
"alpha": 0.5,
"beta": 0.5
}
}
}
}
}
}
} На практике значение alpha ведет себя очень похоже в holt, как и ewma: маленькие значения обеспечивают большее сглаживание и больший лаг, в то время как большие значения обеспечивают более точное отслеживание и меньший лаг. Значение beta часто трудно увидеть. Малые значения подчеркивают долгосрочные тенденции (например, постоянную линейную тенденцию во всем ряду), а большие значения подчеркивают краткосрочные тенденции. Это станет более очевидно при прогнозировании значений.
Holt-Винтерс
Модель holt_winters (также известная как "тройное экспоненциальное") включает третий экспоненциальный член, который отслеживает сезонный аспект ваших данных. Таким образом, эта агрегация сглаживает на основе трех компонентов: "уровень", "тенденция" и "сезонность".
Вычисление уровня и тенденции идентично holt. Вычисление сезонности рассматривает разницу между текущей точкой и точкой за один период ранее.
Holt-Винтерс требует немного большего участия, чем другие скользящие средние. Вам необходимо указать "периодичность" ваших данных: например, если ваши данные имеют циклические тенденции каждые 7 дней, вы установите period: 7. Аналогично, если была месячная тенденция, вы установите ее на 30. В настоящее время нет обнаружения периодичности, хотя это планируется в будущих улучшениях.
Существуют два типа Holt-Винтерс: аддитивный и мультипликативный.
"Холодный старт"
К сожалению, из-за природы Holt-Винтерс, ему требуется два периода данных для "запуска" алгоритма. Это означает, что ваш window всегда должен быть по крайней мере вдвое больше, чем ваш период. Если это не так, будет брошено исключение. Это также означает, что Holt-Винтерс не будет выдавать значение для первых 2 * period ведер; текущий алгоритм не выполняет обратное прогнозирование.
Поскольку "холодный старт" затеняет, как выглядит скользящее среднее, остальные изображения Holt-Винтерс усечены, чтобы не показывать "холодный старт". Просто имейте в виду, что это всегда будет присутствовать в начале ваших скользящих средних!
Аддитивный Holt-Винтерс
Аддитивная сезонность является значением по умолчанию; ее также можно указать, установив "type": "add". Этот тип предпочтительнее, когда сезонное влияние добавляется к вашим данным. Например, вы можете просто вычесть сезонное влияние, чтобы "десезонировать" ваши данные до плоской тенденции.
Значения по умолчанию для alpha и gamma равны 0.3, а beta равно 0.1. Параметры принимают любое число с плавающей точкой от 0 до 1 включительно. Значение по умолчанию для period равно 1.
Аддитивная модель Holt-Винтерс может быть минимизирована
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "holt_winters",
"settings": {
"type": "add",
"alpha": 0.5,
"beta": 0.5,
"gamma": 0.5,
"period": 7
}
}
}
}
}
}
} Мультипликативный Holt-Винтерс
Мультипликативный тип указывается с помощью "type": "mult". Этот тип предпочтительнее, когда сезонное влияние умножается на ваши данные. Например, если сезонное влияние составляет x5 на данные, а не просто добавляется к ним.
Значения по умолчанию для alpha и gamma равны 0.3, а beta равно 0.1. Параметры принимают любое число с плавающей точкой от 0 до 1 включительно. Значение по умолчанию для period равно 1.
Мультипликативная модель Holt-Винтерс может быть минимизирована
Мультипликативный Holt-Винтерс работает путем деления каждого значения данных на сезонное значение. Это проблематично, если какое-либо из ваших данных равно нулю или если в данных есть пробелы (поскольку это приводит к делению на ноль). Для решения этой проблемы mult Holt-Винтерс дополняет все значения очень малым количеством (1*10-10), чтобы все значения были отличны от нуля. Это влияет на результат, но лишь незначительно. Если ваши данные не равны нулю или вы предпочитаете видеть NaN, когда встречаются нули, вы можете отключить это поведение с помощью pad: false
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "holt_winters",
"settings": {
"type": "mult",
"alpha": 0.5,
"beta": 0.5,
"gamma": 0.5,
"period": 7,
"pad": true
}
}
}
}
}
}
} Прогнозирование
Эта функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущей версии. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
Все модели скользящего среднего поддерживают режим "прогнозирования", который попытается экстраполировать в будущее на основе текущего сглаженного скользящего среднего. В зависимости от модели и параметров, эти прогнозы могут быть или не быть точными.
Прогнозы включаются путем добавления параметра predict в любую агрегацию скользящего среднего, указывающего количество прогнозов, которые вы хотите добавить в конец ряда. Эти прогнозы будут размещены с тем же интервалом, что и ваши ведра:
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"window": 30,
"model": "simple",
"predict": 10
}
}
}
}
}
} Модели simple, linear и ewma все производят "плоские" прогнозы: они по существу сходятся к среднему значению последнего значения в ряду, производя плоскую:
В отличие от этого, модель holt может экстраполировать на основе локальных или глобальных постоянных тенденций. Если мы установим высокое значение beta, мы можем экстраполировать на основе локальных постоянных тенденций (в этом случае прогнозы направлены вниз, потому что данные в конце ряда имели направление вниз):
В отличие от этого, если мы выберем малое значение beta, прогнозы основаны на глобальной постоянной тенденции. В этом ряду глобальная тенденция немного положительная, поэтому прогноз резко поворачивает и начинает положительный наклон:
Модель holt_winters потенциально может обеспечить лучшие прогнозы, поскольку она также включает сезонные колебания в модель:
Минимизация
Некоторые модели (EWMA, Holt-Линейная, Holt-Уинтерс) требуют настройки одного или нескольких параметров. Выбор параметров может быть сложным и порой неинтуитивным. Кроме того, небольшие отклонения в этих параметрах иногда могут оказывать существенное влияние на скользящую среднюю результата.
По этой причине три «настраиваемые» модели могут быть алгоритмически минимизированы. Минимизация — это процесс, в котором параметры подстраиваются до тех пор, пока прогнозы, генерируемые моделью, не совпадут с выходными данными. Минимизация не является безупречной и может быть подвержена переобучению, но часто дает лучшие результаты, чем ручная настройка.
Минимизация по умолчанию отключена для ewma и holt_linear, в то время как для holt_winters она включена по умолчанию. Минимизация наиболее полезна с моделью Holt-Уинтерс, поскольку она помогает повысить точность прогнозов. EWMA и Holt-Линейная не являются хорошими прогнозирующими моделями и в основном используются для сглаживания данных, поэтому минимизация менее полезна для этих моделей.
Минимизация включается/отключается с помощью параметра minimize:
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_sum": {
"sum": { "field": "price" }
},
"the_movavg": {
"moving_avg": {
"buckets_path": "the_sum",
"model": "holt_winters",
"window": 30,
"minimize": true,
"settings": {
"period": 7
}
}
}
}
}
}
} | Минимизация включается с помощью параметра |
При включении минимизации будут найдены оптимальные значения для alpha, beta и gamma. Пользователь по-прежнему должен предоставить соответствующие значения для window, period и type.
Минимизация работает, выполняя стохастический процесс, называемый моделированием отжига. Этот процесс обычно генерирует хорошее решение, но не гарантирует нахождения глобального оптимума. Он также требует некоторой дополнительной вычислительной мощности, поскольку модель должна выполняться несколько раз по мере изменения значений. Время выполнения минимизации линейно зависит от размера обрабатываемого окна: чрезмерно большие окна могут привести к задержке.
Наконец, минимизация подгоняет модель к последним n значениям, где n = window. Это обычно приводит к лучшим прогнозам в будущем, поскольку параметры настраиваются вокруг конца ряда. Однако это может привести к худшей подгонке скользящих средних в начале ряда.
© 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/7.17/search-aggregations-pipeline-movavg-aggregation.html