Процентили и квантили: как читать p50, p90 и p99 в продуктовой аналитике
Как использовать процентили и квантили для latency, времени доставки, чеков и пользовательского опыта: формулы, примеры, ошибки и правила интерпретации.
Содержание статьи
Среднее время ответа в API может быть 280 мс, и график будет выглядеть спокойно. Но если p99 равен 7 секундам, часть запросов уже ломает сценарий пользователя. Процентили помогают говорить о доле наблюдений ниже порога, а не о воображаемом «среднем пользователе». Центральный вопрос материала: Как увидеть проблемы у части пользователей, если среднее выглядит нормально?
Вопрос до формулы
Среднее время ответа в API может быть 280 мс, и график будет выглядеть спокойно. Но если p99 равен 7 секундам, часть запросов уже ломает сценарий пользователя. Процентили помогают говорить о доле наблюдений ниже порога, а не о воображаемом «среднем пользователе».
Процентили легко превращаются в рабочие договорённости: «90% отчётов открываются быстрее 10 секунд» или «95% доставок укладываются в обещанное окно». Важно закрепить окно, объект и способ расчёта. Иначе команда начнёт спорить о цифре, хотя на самом деле использует разные знаменатели.
Как увидеть проблемы у части пользователей, если среднее выглядит нормально?
Что именно измеряем
p50 — медиана: половина наблюдений не превышает это значение. p90 означает, что 90% наблюдений не превышают порог, а 10% находятся выше. p99 показывает хвост, но становится шумным при маленькой выборке. Квантиль — более общий термин; процентиль обычно выражает его в шкале от 0 до 100.
Сначала проверь, что ряд упорядочен и наблюдения сопоставимы. Для latency полезно считать квантили по endpoint, устройству и версии приложения. Для денег — по заказам или пользователям в зависимости от вопроса. Не сравнивай p99 из часа с p99 из недели без понимания размера выборки и состава трафика.
p90 = value, below which 90% of observations fallОставшиеся 10% не исчезают: их нужно изучать отдельно.
Расчёт на примере
Команда сократила среднюю задержку поиска с 420 до 350 мс, но p95 вырос с 1,2 до 2,4 секунды. Оптимизация помогла большинству быстрых запросов и одновременно ухудшила часть тяжёлых фильтров. Если в отчёте оставить только среднее, команда решит, что релиз прошёл без побочных эффектов.
Используй p50 для типичного опыта, p75 или p90 для операционного контроля, p95/p99 для хвоста и SLO. Рядом показывай n и период. Если квантиль прыгает, сначала проверь размер окна, редкие категории и изменение источника. Для денежных распределений добавь абсолютные значения и долю пользователей, а не только красивую линию.
Условные данные показывают, почему среднее может улучшиться вместе с p95.
Проверка устойчивости
До интерпретации проверь единицу наблюдения, период и правило включения. Затем пересчитай результат на небольшой выборке, где ответ известен заранее, и сравни с разумной альтернативой: другим горизонтом, зрелой когортой или user-level агрегацией.
Если показатель станет регулярным, сохрани рядом входные параметры, контрольные сверки и версию определения. Это важнее дополнительного знака после запятой.
| Показатель | Вопрос | Пример применения |
|---|---|---|
| p50 | каков типичный опыт? | время первого ответа |
| p90 | сколько укладывается большинство? | SLO и операционный контроль |
| p95 | где начинается ощутимый хвост? | медленные экраны |
| p99 | какие редкие случаи опасны? | платежи и критические запросы |
- Зафиксируй baseline до просмотра результата.
- Проверь пропуски, дубли и зрелость периода.
- Покажи размер выборки и диапазон неопределённости.
Ошибки интерпретации
Нельзя усреднять процентили разных групп и получать «общий p90». Для общего значения пересчитай квантиль по исходным наблюдениям или используй корректную mergeable-агрегацию. Не называй p99 гарантией: это оценка по окну. И не выбирай p99 только потому, что он драматичнее — метрика должна соответствовать риску сценария.
Хорошая формулировка выглядит так: «p90 времени до отчёта снизился с 18 до 11 секунд, то есть девять из десяти запусков теперь укладываются в 11 секунд; p99 не изменился из-за редких выгрузок более миллиона строк». В этом выводе видно, что улучшилось и где остался отдельный класс проблем.
Сначала сообщи, что видно в данных. Затем назови, что мешает сделать более сильный вывод. В конце предложи один проверяемый следующий шаг.
Практика
Для любого времени или суммы построй таблицу p50, p75, p90, p95, p99 и n. Затем ответь: какой процент пользователей попадает за целевой порог? Какой сегмент формирует хвост? Что произойдёт, если убрать один экстремальный день? Такой мини-анализ часто даёт больше, чем ещё один средний показатель.
- Сохрани период и параметры расчёта.
- Назови хотя бы один крайний случай.
- Сформулируй вывод отдельно от гипотезы о причине.
Решение для команды
Хорошая формулировка выглядит так: «p90 времени до отчёта снизился с 18 до 11 секунд, то есть девять из десяти запусков теперь укладываются в 11 секунд; p99 не изменился из-за редких выгрузок более миллиона строк». В этом выводе видно, что улучшилось и где остался отдельный класс проблем.
Процентили легко превращаются в рабочие договорённости: «90% отчётов открываются быстрее 10 секунд» или «95% доставок укладываются в обещанное окно». Важно закрепить окно, объект и способ расчёта. Иначе команда начнёт спорить о цифре, хотя на самом деле использует разные знаменатели.
Материалы по теме
Среднее, медиана и мода: какую «середину» выбрать в аналитике
Разбираем среднее арифметическое, медиану и моду на примерах выручки, времени доставки и размера заказа: когда показатели расходятся и что писать в выводе.

Выбросы в данных: что удалять, что оставить и почему правило IQR почти всегда врёт на деньгах
Разбор на модельном наборе из 2000 заказов: правило 1,5×IQR помечает 6% заказов, из которых аномальны пять. Как отличить ошибку от редкого клиента и что делать с каждым случаем.
Статистика для аналитика с нуля: как читать данные и не делать лишних выводов
Базовый маршрут по статистике для аналитика: выборка, распределение, среднее, медиана, интервал неопределённости и проверка гипотезы на рабочих примерах.