Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Агрегирования ›Агрегирования на основе канала

Агрегирование по последовательным различиям

Последовательное различие — это техника, где значения в временном ряду вычитаются из себя с разными временными лагами или периодами. Например, значение f(x) = f(xt) - f(xt-n), где n — используемый период.

Период 1 эквивалентен производной без нормализации по времени: это просто изменение от одной точки к следующей. Одиночные периоды полезны для удаления постоянных и линейных трендов.

Одиночные периоды также полезны для преобразования данных в стационарный ряд. На этом примере показан график Dow Jones за ~250 дней. Исходные данные не являются стационарными, что затрудняет их использование с некоторыми техниками.

Вычисление первого различия позволяет детерминировать данные (например, удалить постоянный, линейный тренд). Мы можем увидеть, что данные становятся стационарным рядом (например, первое различие случайно распределено около нуля и не демонстрирует никаких закономерностей/поведения). Преобразование показывает, что набор данных следует случайному блужданию; значение — это предыдущее значение ± случайное количество. Это понимание позволяет выбрать дальнейшие инструменты для анализа.

dow
Рисунок 9. График Dow Jones и его стационаризация с помощью первого различия

Можно использовать более длинные периоды для удаления сезонных/циклических колебаний. На этом примере синтетически сгенерирована популяция леммингов с синусоидальной волной + постоянным линейным трендом + случайным шумом. Синусоидальная волна имеет период 30 дней.

Первое различие удаляет постоянный тренд, оставляя только синусоидальную волну. Затем применяется 30-е различие к первому различию для удаления циклического поведения, оставляя стационарный ряд, который пригоден для дальнейшего анализа.

lemmings
Рисунок 10. График данных леммингов, стационаризированных с помощью 1-го и 30-го различия

Синтаксис

Агрегирование по serial_diff выглядит так:

{
  "serial_diff": {
    "buckets_path": "the_sum",
    "lag": 7
  }
}

Таблица 79. serial_diff Параметры

Имя параметра Описание Обязательный Значение по умолчанию

buckets_path

Путь к метрике, которая нас интересует (см. buckets_path Синтаксис для более подробной информации)

Обязательный

lag

Исторический бакет, который вычитается из текущего значения. Например, лаг 7 вычтет текущее значение из значения 7 бакетов назад. Должен быть положительным целым числом, отличным от нуля

Необязательный

1

gap_policy

Определяет, что должно произойти при обнаружении разрыва в данных.

Необязательный

insert_zeros

format

Шаблон DecimalFormat для выходного значения. Если задано, отформатированное значение возвращается в свойстве value_as_string агрегирования

Необязательный

null

Агрегирования по 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
               }
            }
         }
      }
   }
}

Строится date_histogram с именем "my_date_histo" по полю "timestamp" с интервалами в один день

Используется метрика sum для расчета суммы поля. Это может быть любая метрика (сумма, минимум, максимум и т.д)

Наконец, задаётся агрегирование по serial_diff, использующее метрику "the_sum" в качестве входных данных.

Последовательные различия создаются путём предварительного указания 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API