Процентили и сегменты скорости
В предыдущем уроке мы определили, какую ситуацию представляет диагностическая запись. Теперь нужно сравнить несколько таких ситуаций. Среднее значение может скрыть медленные посещения, а один процентиль — изменение хвоста. Поэтому результат этого урока заключается в чтении распределения вместе с размером и составом группы.
В advanced/data/synthetic-loads.csv находятся шестнадцать полностью выдуманных строк: по восемь для lab-a и lab-b. Они не получены у ProfessorWeb и не являются выполненными прогонами стенда. Поле lcp_like_ms специально названо учебным аналогом времени. Мы используем его для арифметики, сохраняя границу между примером и настоящей метрикой.
Сначала зададим сопоставимую группу
У всех строк CSV одинаковы шаблон article, категория окна compact, навигация navigate и условие cold. Здесь это подписи авторского набора, а не автоматически установленная конфигурация браузера. Сравнение выделяет только условную версию. Если добавить повторные посещения и каталог, общий набор уже будет отвечать на другой вопрос.
Такое ограничение важно для причинного рассуждения. Пусть новая версия чаще открывается постоянными читателями с готовыми ресурсами. Её общий результат может стать лучше даже при неизменном коде. Или в новый период выросла доля глав с изображениями. Тогда ухудшение общей границы ещё не доказывает регрессию обычной текстовой статьи.
Перед расчётом запишите численность каждой группы и правила включения строк. Неподдерживаемое API, начально скрытый документ и оборванное наблюдение требуют отдельных состояний. Не превращайте null в ноль: отсутствие измерения не является мгновенным показом. И не удаляйте неудобные большие значения только потому, что они не похожи на остальные; сначала требуется объяснение их происхождения.
Метод ближайшего ранга
Для учебного набора выберем один явный метод: сортировка по возрастанию и ближайший ранг. Позиция равна округлённому вверх произведению размера группы на долю. Для p75 и восьми значений получаем шестую позицию. Индекс массива начинается с нуля, поэтому в коде от позиции нужно отнять единицу.
Этот самостоятельный фрагмент не читает CSV автоматически. Он повторяет его числа и показывает выбранную операцию:
function nearestRank(values, fraction) {
if (!values.length || fraction <= 0 || fraction > 1) return null;
const sorted = [...values].sort((a, b) => a - b);
return sorted[Math.ceil(sorted.length * fraction) - 1];
}
const a = [600, 700, 800, 900, 1000, 1100, 1400, 1800];
const b = [500, 600, 700, 800, 900, 1000, 2000, 3200];
console.log(nearestRank(a, 0.75), nearestRank(b, 0.75));
Ожидаемый арифметический результат — 1100 и 1000. Код не исполнялся автором; значения можно проверить вручную по шестому элементу. Копирование массива перед сортировкой сохраняет первоначальный порядок. Числовой компаратор нужен потому, что сортировка строк и сортировка времён имеют разный смысл.
У настоящего источника может использоваться интерполяция между соседними значениями. На небольшом наборе она даст другую величину. Поэтому рядом с числом нужно сохранить метод расчёта. Нельзя сравнить p75 двух отчётов только по одинаковому названию столбца, если правила их агрегации неизвестны. Для понимания внешнего ориентира Core Web Vitals используйте определение Web Vitals, а не выдавайте нашу функцию за реализацию процесса CrUX.
Улучшение границы и ухудшение хвоста
Теперь рассмотрим последние два значения. У A они равны 1400 и 1800, у B — 2000 и 3200. Иными словами, учебный p75 уменьшился, но самые медленные случаи стали хуже. Утверждение «новая версия быстрее» без области оказывается слишком широким. Корректнее сказать: выбранная граница уменьшилась, а верхняя часть маленького распределения выросла.
Средние учебных массивов также различаются: сумма A равна 8300, сумма B — 9700. Деление на восемь даёт 1037,5 и 1212,5 миллисекунды. Эти числа полностью выдуманы вместе с исходными строками. Здесь среднее ухудшается, хотя p75 улучшается. Противоречия нет: операции описывают разные свойства одного набора.
Для ближайшего ранга p90 восьми строк выбирает восьмую позицию. В нашем примере это максимум, а не устойчивое описание большого хвоста аудитории. Поэтому добавление ещё одного процента в таблицу не решает проблему маленькой выборки. Лучше явно показать крайние случаи и осторожно назвать, что они позволяют заподозрить.
Не нужно выбирать единственное число, которое поддерживает желаемое решение. Можно заранее определить основной ориентир и диагностические дополнительные. Например, p75 описывает массовую границу, а список медленных наблюдений помогает найти отдельный механизм. Один сигнал инициирует исследование, другой показывает распространённость; их роли должны быть понятны до сравнения версий.
Достаточность и устойчивость вывода
В наборе из восьми строк одно новое наблюдение меняет размер и ранг. При девяти строках ближайший ранг для p75 равен семи. Даже без изменения существующих чисел способна измениться выбранная граница. Это свойство операции, а не ошибка программы. Поэтому рядом с результатом обязательно сохраняется размер группы.
Учебный CSV слишком мал для вывода о реальной аудитории. Мы не рассчитываем доверительный интервал и не заявляем статистическую значимость различия. Для производственного решения требуется подходящий метод оценки неопределённости и достаточный объём наблюдений по заданному плану. Несколько повторов на одном компьютере также не превращаются в независимую выборку посетителей.
Если три записи получены от одного длинного посещения, они могут отражать общий контекст: устройство, кеш и текущую нагрузку. Отношение между строками зависит от единицы сбора. Поэтому вернитесь к договору предыдущего урока: распределение отдельных взаимодействий и распределение документов требуют разных объяснений численности. Простая арифметика не исправляет неопределённость этой единицы.
Состав сегментов и цена детализации
Для большой библиотеки начните с нескольких технически понятных сегментов: шаблон, категория устройства и тип навигации. Слишком подробное разбиение быстро создаёт маленькие группы. Если выделить каждый URL, размер окна, браузер и дату одновременно, многие ячейки будут почти пустыми. Более подробный отчёт не обязательно окажется более надёжным.
Рассмотрим отдельный выдуманный вариант: у периода A больше новых переходов, а у B больше повторных. Даже если внутри каждого сценария скорость одинаковая, общий результат способен отличаться из-за весов групп. Чтобы разобраться, сравните одинаковые сценарии по отдельности и покажите их долю в общем наборе. Не усредняйте процентили групп: среднее двух границ не является процентилем объединённых наблюдений.
Если задача требует общего распределения, сохраняйте исходные допустимые наблюдения или подходящую структуру агрегации, а не только итог каждой маленькой ячейки. Два сегмента с разной численностью нельзя объединить равными весами без отдельного основания. Выбор веса выражает, какую аудиторию описывает итог, поэтому он относится к договору исследования.
Решение по ограниченному набору
Для наших строк можно сформулировать только учебный вывод: p75 B ниже, среднее и крайние значения выше; требуется искать механизм медленных случаев. Не следует по этому CSV принимать выпуск ProfessorWeb или заявлять полученный выигрыш. Файл показывает, какие дополнительные вопросы становятся видны после правильной сортировки.
Подготовьте собственную таблицу с колонками «численность», «пропуски», «метод», «p75» и «медленные случаи». Рядом запишите версию и границы сценария. Если данных недостаточно, оставьте решение открытым, назвав необходимое наблюдение. В следующем уроке уточним одну из самых важных категорий: одинаковый адрес не означает одинаковую навигацию и одинаковую работу браузера.