Агрегация корреляции теста K-S для количества бакетов
Агрегация на основе конвейера, которая выполняет двухвыборочный тест Колмогорова–Смирнова (в дальнейшем «тест K-S») по отношению к заданному распределению и распределению, предполагаемому подсчётом документов в сконфигурированной агрегации «побратима». В частности, для некоторого метрического показателя, предполагая, что интервалы перцентилей метрики известны заранее или были вычислены агрегацией, можно использовать агрегацию диапазонов для «побратима», чтобы вычислить значение p для различия распределения между метрикой и её ограничением на подмножество документов. Естественный случай использования - если агрегация «побратима» - это агрегация диапазонов, вложенная в агрегацию «terms», в этом случае сравнивается общее распределение метрики с её ограничением на каждый термин.
Параметры
-
buckets_path - (Обязательный, строка) Путь к бакетам, содержащим набор значений для корреляции. Должен быть путём
_count. Для синтаксиса см.buckets_pathсинтаксиса. -
alternative - (Необязательный, список) Список строковых значений, указывающих, какой альтернативный вариант теста K-S вычислить. Допустимые значения: «greater», «less», «two_sided». Этот параметр важен для определения статистики K-S, используемой при вычислении теста K-S. Значение по умолчанию — все возможные альтернативные гипотезы.
-
fractions - (Необязательный, список) Список чисел с плавающей точкой, указывающих на распределение выборок для сравнения с результатами
buckets_path. В типичном случае это общая пропорция документов в каждом бакете, которая сравнивается с фактическими пропорциями документов в каждом бакете из подсчётов агрегации «побратима». По умолчанию предполагается, что документы в целом равномерно распределены по этим бакетам, что было бы так, если бы для определения конечных точек бакета использовались равные перцентили метрики. -
sampling_method - (Необязательный, строка) Указывает методику выборки при вычислении теста K-S. Обратите внимание, это выборка возвращаемых значений. Это определяет точки кумулятивной функции распределения (CDF), используемые для сравнения двух выборок. По умолчанию используется
upper_tail, что подчёркивает верхнюю часть точек CDF. Допустимые варианты:upper_tail,uniformиlower_tail.
Синтаксис
Агрегация bucket_count_ks_test в изоляции выглядит так:
{
"bucket_count_ks_test": {
"buckets_path": "range_values>_count",
"alternative": ["less", "greater", "two_sided"],
"sampling_method": "upper_tail"
}
} | Бакеты, содержащие значения для проверки. | |
| Альтернативные варианты для вычисления. | |
| Методика выборки для статистики K-S. |
Пример
Следующий фрагмент выполняет bucket_count_ks_test для отдельных терминов в поле version по отношению к равномерному распределению. Равномерное распределение отражает latency перцентильные бакеты. Не показано предварительное вычисление значений индикатора latency, которое было выполнено с помощью агрегации percentiles.
В этом примере используются только децили latency.
resp = client.search(
index="correlate_latency",
size="0",
filter_path="aggregations",
aggs={
"buckets": {
"terms": {
"field": "version",
"size": 2
},
"aggs": {
"latency_ranges": {
"range": {
"field": "latency",
"ranges": [
{
"to": 0
},
{
"from": 0,
"to": 105
},
{
"from": 105,
"to": 225
},
{
"from": 225,
"to": 445
},
{
"from": 445,
"to": 665
},
{
"from": 665,
"to": 885
},
{
"from": 885,
"to": 1115
},
{
"from": 1115,
"to": 1335
},
{
"from": 1335,
"to": 1555
},
{
"from": 1555,
"to": 1775
},
{
"from": 1775
}
]
}
},
"ks_test": {
"bucket_count_ks_test": {
"buckets_path": "latency_ranges>_count",
"alternative": [
"less",
"greater",
"two_sided"
]
}
}
}
}
},
)
print(resp) const response = await client.search({
index: "correlate_latency",
size: 0,
filter_path: "aggregations",
aggs: {
buckets: {
terms: {
field: "version",
size: 2,
},
aggs: {
latency_ranges: {
range: {
field: "latency",
ranges: [
{
to: 0,
},
{
from: 0,
to: 105,
},
{
from: 105,
to: 225,
},
{
from: 225,
to: 445,
},
{
from: 445,
to: 665,
},
{
from: 665,
to: 885,
},
{
from: 885,
to: 1115,
},
{
from: 1115,
to: 1335,
},
{
from: 1335,
to: 1555,
},
{
from: 1555,
to: 1775,
},
{
from: 1775,
},
],
},
},
ks_test: {
bucket_count_ks_test: {
buckets_path: "latency_ranges>_count",
alternative: ["less", "greater", "two_sided"],
},
},
},
},
},
});
console.log(response); POST correlate_latency/_search?size=0&filter_path=aggregations
{
"aggs": {
"buckets": {
"terms": {
"field": "version",
"size": 2
},
"aggs": {
"latency_ranges": {
"range": {
"field": "latency",
"ranges": [
{ "to": 0 },
{ "from": 0, "to": 105 },
{ "from": 105, "to": 225 },
{ "from": 225, "to": 445 },
{ "from": 445, "to": 665 },
{ "from": 665, "to": 885 },
{ "from": 885, "to": 1115 },
{ "from": 1115, "to": 1335 },
{ "from": 1335, "to": 1555 },
{ "from": 1555, "to": 1775 },
{ "from": 1775 }
]
}
},
"ks_test": {
"bucket_count_ks_test": {
"buckets_path": "latency_ranges>_count",
"alternative": ["less", "greater", "two_sided"]
}
}
}
}
}
} | Бакеты терминов, содержащие агрегацию диапазонов и агрегацию корреляции бакетов. Обе используются для вычисления корреляции значений терминов с задержкой. | |
| Агрегация диапазонов для поля задержки. Диапазоны были созданы, ссылаясь на перцентили поля задержки. | |
| Агрегация количества бакетов теста K-S, которая проверяет, происходят ли подсчёты бакетов из того же распределения, что и |
И возможен следующий ответ:
{
"aggregations" : {
"buckets" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "1.0",
"doc_count" : 100,
"latency_ranges" : {
"buckets" : [
{
"key" : "*-0.0",
"to" : 0.0,
"doc_count" : 0
},
{
"key" : "0.0-105.0",
"from" : 0.0,
"to" : 105.0,
"doc_count" : 1
},
{
"key" : "105.0-225.0",
"from" : 105.0,
"to" : 225.0,
"doc_count" : 9
},
{
"key" : "225.0-445.0",
"from" : 225.0,
"to" : 445.0,
"doc_count" : 0
},
{
"key" : "445.0-665.0",
"from" : 445.0,
"to" : 665.0,
"doc_count" : 0
},
{
"key" : "665.0-885.0",
"from" : 665.0,
"to" : 885.0,
"doc_count" : 0
},
{
"key" : "885.0-1115.0",
"from" : 885.0,
"to" : 1115.0,
"doc_count" : 10
},
{
"key" : "1115.0-1335.0",
"from" : 1115.0,
"to" : 1335.0,
"doc_count" : 20
},
{
"key" : "1335.0-1555.0",
"from" : 1335.0,
"to" : 1555.0,
"doc_count" : 20
},
{
"key" : "1555.0-1775.0",
"from" : 1555.0,
"to" : 1775.0,
"doc_count" : 20
},
{
"key" : "1775.0-*",
"from" : 1775.0,
"doc_count" : 20
}
]
},
"ks_test" : {
"less" : 2.248673241788478E-4,
"greater" : 1.0,
"two_sided" : 5.791639181800257E-4
}
},
{
"key" : "2.0",
"doc_count" : 100,
"latency_ranges" : {
"buckets" : [
{
"key" : "*-0.0",
"to" : 0.0,
"doc_count" : 0
},
{
"key" : "0.0-105.0",
"from" : 0.0,
"to" : 105.0,
"doc_count" : 19
},
{
"key" : "105.0-225.0",
"from" : 105.0,
"to" : 225.0,
"doc_count" : 11
},
{
"key" : "225.0-445.0",
"from" : 225.0,
"to" : 445.0,
"doc_count" : 20
},
{
"key" : "445.0-665.0",
"from" : 445.0,
"to" : 665.0,
"doc_count" : 20
},
{
"key" : "665.0-885.0",
"from" : 665.0,
"to" : 885.0,
"doc_count" : 20
},
{
"key" : "885.0-1115.0",
"from" : 885.0,
"to" : 1115.0,
"doc_count" : 10
},
{
"key" : "1115.0-1335.0",
"from" : 1115.0,
"to" : 1335.0,
"doc_count" : 0
},
{
"key" : "1335.0-1555.0",
"from" : 1335.0,
"to" : 1555.0,
"doc_count" : 0
},
{
"key" : "1555.0-1775.0",
"from" : 1555.0,
"to" : 1775.0,
"doc_count" : 0
},
{
"key" : "1775.0-*",
"from" : 1775.0,
"doc_count" : 0
}
]
},
"ks_test" : {
"less" : 0.9642895789647244,
"greater" : 4.58718174664754E-9,
"two_sided" : 5.916656831139733E-9
}
}
]
}
}
}
© 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-bucket-count-ks-test-aggregation.html