Новые агрегации перцентилей и медианного абсолютного отклонения в Manticore Search

—

от автора

Новые агрегации перцентилей и медианного абсолютного отклонения в Manticore Search

Новые агрегации перцентилей и медианного абсолютного отклонения в Manticore Search

Когда средние значения скрывают реальную картину, нужны более информативные метрики распределения. Одно лишь среднее может выглядеть «здоровым», но при этом маскировать замедления в длинном хвосте, перекошенные распределения значений или небольшую группу экстремальных выбросов, которые сильно влияют на пользовательский опыт и операционные риски. Теперь Manticore Search поддерживает агрегации перцентилей, перцентильных рангов и MAD (медианного абсолютного отклонения), так что вы можете анализировать разброс, хвосты и выбросы прямо в поисковых запросах. Они особенно полезны для мониторинга задержек, анализа цен, поведения пользователей и любых задач, где «среднего» недостаточно.

  • percentiles(field[, {values='...',compression=N}]) Возвращает оценочные значения перцентилей (например, p50, p95, p99)

  • percentile_ranks(field, {values='...',compression=N}) Возвращает оценочную долю документов со значениями, меньшими или равными каждому заданному значению

  • median_absolute_deviation(field[, {compression=N}]) Возвращает оценочное значение MAD — устойчивую (робастную) меру разброса вокруг медианы

Эти функции по своей природе приближённые, что удерживает потребление памяти в заданных пределах и делает производительность предсказуемой, а необязательный параметр compression управляет компромиссом между точностью и памятью: меньшие значения работают быстрее и легче по памяти, но могут давать большую погрешность; значение по умолчанию — 200.

Использование

Manticore Search поддерживает два варианта синтаксиса для этих агрегаций: SQL и JSON API.

Пример на SQL

SELECT    percentiles(latency) AS p_default,    percentiles(latency, {values='5,50,95',compression=200}) AS p_custom,    percentile_ranks(latency, {values='10,150,1500',compression=200}) AS r_custom,    median_absolute_deviation(latency, {compression=200}) AS madFROM agg_td\G
*************************** 1. row ***************************p_default: {"1":10,"5":10,"25":20,"50":30,"75":40,"95":50,"99":50} p_custom: {"5":10,"50":30,"95":50} r_custom: {"10":20,"150":100,"1500":100}      mad: {"value":10,"value_as_string":"10"}

Как это читать

  • p_custom даёт прямые пороги перцентилей (например, задержку p95).

  • r_custom показывает долю документов ниже заданных порогов.

  • mad показывает, насколько плотно значения сгруппированы вокруг медианы.


Пример HTTP JSON

POST /json/search{  "table": "agg_td",  "size": 0,  "aggs": {    "latency_percentiles": {      "percentiles": {        "field": "latency",        "values": [5, 50, 95],        "keyed": true      }    },    "latency_ranks": {      "percentile_ranks": {        "field": "latency",        "values": [10, 150, 1500],        "keyed": true      }    },    "latency_mad": {      "median_absolute_deviation": {        "field": "latency",        "tdigest": {          "compression": 200        }      }    }  }}
{  "took": 0,  "timed_out": false,  "aggregations": {    "latency_percentiles": {      "values": {        "5.0": 10,        "50.0": 30,        "95.0": 50      }    },    "latency_ranks": {      "values": {        "10.0": 20,        "150.0": 100,        "1500.0": 100      }    },    "latency_mad": {      "value": 10,      "value_as_string": "10"    }  },  "hits": {    "total": 5,    "hits": []  }}

Практические сценарии и советы

  • Производительность поиска/API: отслеживайте задержки p50/p95/p99 и MAD для оценки джиттера.

  • Ценообразование в e-commerce: выявляйте сдвиги в распределении цен и аномальный разброс.

  • Выявление мошенничества и аномалий: сравнивайте медианное поведение с отклонениями на основе MAD.

  • Отчётность по SLO: сочетайте перцентильные ранги с бизнес-порогами (например, «% запросов быстрее 200 мс»).

  • Используйте percentiles, когда нужны пороговые значения (p95 = ?).

  • Используйте percentile_ranks, когда нужны проценты (<=200ms = ?).

  • Используйте MAD, когда выбросы — обычное дело и нужна устойчивая мера разброса.

  • Начинайте со значения по умолчанию compression=200; увеличивайте его, если нужна более высокая точность.


Итог

С агрегациями перцентилей и MAD Manticore Search даёт более глубокую статистическую видимость прямо внутри вашего рабочего процесса поисковой аналитики. Теперь вы можете отслеживать хвосты распределения, проверять пороговые значения и измерять устойчивый разброс в одном месте — не выгружая сырые данные во внешние системы.

ссылка на оригинал статьи https://habr.com/ru/articles/1091346/