Агрегация t-критерия
Метрическая агрегация, которая выполняет статистический гипотетический тест, в котором тестовая статистика следует распределению Стьюдента при нулевой гипотезе на числовых значениях, извлечённых из агрегированных документов. На практике это позволит узнать, является ли разница между двумя средними значениями генеральных совокупностей статистически значимой и не возникла случайно.
Синтаксис
Агрегация t_test выглядит следующим образом:
{
"t_test": {
"a": "value_before",
"b": "value_after",
"type": "paired"
}
} Предположим, что у нас есть запись времени запуска узла до и после обновления. Давайте посмотрим на t-критерий, чтобы определить, повлияло ли обновление на время запуска узла каким-либо значимым образом.
GET node_upgrade/_search
{
"size": 0,
"aggs": {
"startup_time_ttest": {
"t_test": {
"a": { "field": "startup_time_before" },
"b": { "field": "startup_time_after" },
"type": "paired"
}
}
}
} | Поле | |
| Поле | |
| Так как у нас есть данные с одних и тех же узлов, мы используем парный t-критерий. |
Ответ вернёт значение p или вероятность для теста. Это вероятность получения результатов, по крайней мере, столь же экстремальных, как результат, обработанный агрегацией, при условии, что нулевая гипотеза верна (то есть, нет разницы между средними значениями генеральных совокупностей). Меньшее значение p означает, что нулевая гипотеза с большей вероятностью неверна, и средние значения генеральных совокупностей действительно различаются.
{
...
"aggregations": {
"startup_time_ttest": {
"value": 0.1914368843365979
}
}
} | Значение p. |
Типы t-критериев
Агрегация t_test поддерживает непарные и парные двухвыборочные t-критерии. Тип теста можно указать с помощью параметра type:
-
"type": "paired" - выполняет парный t-критерий
-
"type": "homoscedastic" - выполняет двухвыборочный тест с равной дисперсией
-
"type": "heteroscedastic" - выполняет двухвыборочный тест с неравной дисперсией (это значение по умолчанию)
Фильтры
Также можно выполнить непарный t-критерий на разных наборах записей с помощью фильтров. Например, если мы хотим проверить разницу во временах запуска до обновления между двумя разными группами узлов, мы используем то же поле startup_time_before для отдельных групп узлов, используя фильтры терминов в поле имени группы:
GET node_upgrade/_search
{
"size": 0,
"aggs": {
"startup_time_ttest": {
"t_test": {
"a": {
"field": "startup_time_before",
"filter": {
"term": {
"group": "A"
}
}
},
"b": {
"field": "startup_time_before",
"filter": {
"term": {
"group": "B"
}
}
},
"type": "heteroscedastic"
}
}
}
} | Поле | |
| Здесь можно использовать любой запрос, разделяющий две группы. | |
| Мы используем то же поле | |
| но используем разные фильтры. | |
| Так как у нас есть данные с разных узлов, мы не можем использовать парный t-критерий. |
{
...
"aggregations": {
"startup_time_ttest": {
"value": 0.2981858007281437
}
}
} | Значение p. |
Генеральные совокупности не должны находиться в одном индексе. Если наборы данных расположены в разных индексах, можно использовать фильтр терминов для поля _index, чтобы выбрать генеральные совокупности.
Скрипт
Если нужно выполнить t_test на значениях, которые не представлены явно полем, следует выполнить агрегацию на временном поле. Например, если нужно скорректировать время загрузки для значений до обновления:
GET node_upgrade/_search
{
"size": 0,
"runtime_mappings": {
"startup_time_before.adjusted": {
"type": "long",
"script": {
"source": "emit(doc['startup_time_before'].value - params.adjustment)",
"params": {
"adjustment": 10
}
}
}
},
"aggs": {
"startup_time_ttest": {
"t_test": {
"a": {
"field": "startup_time_before.adjusted"
},
"b": {
"field": "startup_time_after"
},
"type": "paired"
}
}
}
}
© 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-metrics-ttest-aggregation.html