Бутстрап: как оценить неопределенность, когда готовой формулы нет

IT и разработка 25.10.2026 · 👁 115 просмотров
Бутстрап: как оценить неопределенность, когда готовой формулы нет Допустим, в тесте нужно сравнить медиану чека, 90-й перцентиль времени доставки или отношение кликов к показам. Для среднего с нормальным распределением формула доверительного интервала есть в любом учебнике. А для медианы или ratio-метрики с тяжелым хвостом она либо громоздкая, либо опирается на допущения, которые у вас не выполняются. Тут и выручает бутстрап. В чем идея Выборка у вас одна, повторить эксперимент тысячу раз нельзя. Зато можно тысячу раз переиграть саму выборку: считаем, что она неплохо похожа на всю популяцию, и тянем из нее новые выборки того же размера с возвращением. На каждой считаем метрику. Получаем тысячи значений, и их разброс показывает, насколько метрика шатается из-за случайности выборки. Придумал метод Брэдли Эфрон в 1979 году, а название пошло от выражения pull yourself up by your bootstraps: вытащить себя за шнурки. Как это делается ➖ Шаг 1. Берем исходную выборку из n наблюдений. ➖ Шаг 2. Тянем n наблюдений с возвращением. Одно и то же может попасть дважды, а какое-то не попасть вообще. ➖ Шаг 3. Считаем нужную метрику на новой выборке: медиану, отношение, что угодно. ➖ Шаг 4. Повторяем шаги 2 и 3 тысячи раз, обычно от 1000 до 10 000. ➖ Шаг 5. Берем 2,5-й и 97,5-й перцентили полученных значений. Это 95% доверительный интервал. Пример на Python import numpy as np rng = np.random.default_rng(42) def bootstrap_ci(a, b, stat=np.mean, n=10_000, alpha=0.05): diffs = [ stat(rng.choice(b, len(b))) - stat(rng.choice(a, len(a))) for _ in range(n) ] return np.percentile(diffs, [100 * alpha / 2, 100 * (1 - alpha / 2)]) ps для сравнения групп каждую выборку ресемплируем отдельно и смотрим на разницу метрик. Если интервал разницы не содержит ноль, эффект значим на выбранном уровне. Чтобы посчитать то же самое для медианы, передайте stat=np.median. Для каких задач подходит ➖ Медиана и перцентили. Формулы для их интервалов громоздкие и с допущениями, бутстрап считает все одинаково. ➖ Ratio-метрики. CTR, заказы на сессию, выручка на пользователя: делим одну случайную величину на другую, и обычная дисперсия врет. ➖ Метрики с тяжелыми хвостами. Выручка с редкими крупными покупками далека от нормальной, а бутстрапу нормальность не нужна. ➖ Ретро-A/A. Много раз режем историю на псевдогруппы и проверяем, не врет ли критерий, разбирали тут . ➖ Любая нестандартная метрика. Если ее можно посчитать на выборке, ее можно обернуть в бутстрап. Когда бутстрап подведет ➖ Совсем маленькая выборка. Если в данных 10-20 наблюдений, они плохо похожи на популяцию, и переигрывать нечего. ➖ Экстремумы. Максимум и минимум бутстрап оценивает плохо: новый максимум не может оказаться больше старого. ➖ Зависимые наблюдения. Если один человек встречается в данных несколько раз, ресемплировать нужно людей, а не строки, писал про это тут . ➖ Тяжелые вычисления. Тысячи пересчетов на больших данных считаются долго, для разведки можно взять меньше итераций. Практические советы ➖ Фиксируйте seed. Чтобы результат можно было воспроизвести. ➖ Берите достаточно итераций. Для интервала хватает 5-10 тысяч, для хвостов и p-value лучше больше. ➖ Ресемплируйте единицу рандомизации. В A/B это обычно пользователь, а не строка в логе. Бутстрап не лечит плохие данные, он честно показывает, насколько им можно верить. ❤️‍🔥 Подписывайтесь и поддержите канал бустом ↗️ Менторю и помогаю выйти на оффер ❓ Как вы считаете интервалы для медианы и ratio-метрик: бутстрапом или по формулам? @data_driven_bogdan
Откликнуться в Telegram →

⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.

🇮🇱 Не нашли подходящую зарплату? В Израиле платят от $3000 Без языка и опыта · жильё и легализация под ключ · официально Смотреть вакансии →