Процентиль

Также: перцентиль, percentile, квантиль, p95, p99

Процентиль — значение, ниже которого лежит заданная доля наблюдений. 95-й процентиль времени ответа 2,4 секунды означает: 95% запросов уложились в 2,4 секунды, а 5% были медленнее. Показывает край распределения, который среднее полностью скрывает.

Процентиль (перцентиль, percentile) — значение, ниже которого лежит заданная доля наблюдений. Если 95-й процентиль времени ответа равен 2,4 секунды, значит 95% запросов отработали быстрее, а 5% — медленнее.

Процентили нужны там, где важно не типичное, а худшее. Среднее время ответа 300 мс звучит прекрасно ровно до момента, когда выясняется, что каждый двадцатый пользователь ждёт по восемь секунд и уходит. Среднее эту группу растворяет, процентиль — показывает.

Как это считается?

Отсортировать наблюдения по возрастанию и взять то, что стоит на нужной доле пути. 50-й процентиль — это медиана. Обозначения p50, p95, p99 читаются как «50-й, 95-й, 99-й процентиль».

  • p50 — типичный пользователь. Половине хуже, половине лучше.
  • p95 — заметное меньшинство с плохим опытом. Основной рабочий показатель для скорости.
  • p99 — край. В сервисе с миллионом запросов в сутки это десять тысяч случаев — уже не редкость, а поток жалоб.

В SQL считается оконной функцией: PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY response_ms).

Пример с числами

Два релиза одного API. Среднее время ответа почти не изменилось:

ПоказательРелиз AРелиз B
Среднее310 мс295 мс
p50180 мс175 мс
p95900 мс2 400 мс
p991 400 мс8 100 мс

По среднему релиз B даже чуть лучше, и отчёт «ускорились на 15 мс» был бы формально правдой. По хвосту он катастрофа: каждый сотый запрос стал медленнее в шесть раз. При миллионе запросов в сутки это десять тысяч человек, ждущих восемь секунд. Среднее здесь не просто бесполезно — оно активно вводит в заблуждение, потому что улучшение в массе перекрыло резкое ухудшение на краю.

Какой процентиль выбрать?

ЗадачаПоказательПочему
Скорость интерфейсаp75 и p95Core Web Vitals считаются по p75
Надёжность APIp95 и p99Хвост определяет SLA и жалобы
Чек и выручка на клиентаp50 и p90Среднее ломается об крупных клиентов
Время до первой ценностиp50Нужен типичный путь, а не край

Где чаще всего ошибаются?

  • Отчитываться средним там, где решает хвост. Скорость, время ожидания, размер ответа — всё это распределения с длинным хвостом, и среднее по ним обманывает.
  • Усреднять процентили между периодами или серверами. Считать надо на объединённой выборке.
  • Считать p99 на маленькой выборке. На 200 наблюдениях p99 — это две точки, и он прыгает от замера к замеру.
  • Оптимизировать p99 в ущерб p50. Иногда край чинится ценой заметного замедления для всех — это ухудшение, а не улучшение.
  • Путать «95-й процентиль» и «95% пользователей довольны». Процентиль — про значение метрики, а не про удовлетворённость.
  • Медиана — тот же инструмент для середины распределения.
  • Оконные функции SQL — чем процентили считают на практике.
  • Дашборд — куда их выносить, чтобы среднее не обманывало команду.
Разобраться на практике

Продуктовая аналитика 2.0

Углубленный курс продуктовой аналитики с Python, ML и продвинутыми техниками анализа

Посмотреть курс