Bootstrap простыми словами
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Короткое объяснение
Bootstrap — метод статистики, когда вы многократно «берёте случайную подвыборку с возвращением» из ваших данных и считаете статистику на каждой.
Звучит странно — но позволяет получать доверительные интервалы и p-value для ЛЮБОЙ метрики, даже когда классические формулы не работают.
Зачем нужен
Классическая статистика (t-test) работает только для нормальных распределений и для среднего / пропорции.
Но часто нужны:
- Медиана (классика формулы нет)
- Percentile (P95 отклика)
- Соотношения метрик (CR, retention)
- Тяжёлый хвост (чек, время сессии)
Bootstrap — универсальный инструмент. Работает с любой статистикой.
Как работает
- У вас выборка из N наблюдений
- Случайно выбираете N значений с возвращением (повторы разрешены)
- Считаете нужную статистику (медиану, mean, etc.)
- Повторяете шаг 2-3 много раз (1000-10000)
- Получаете распределение статистики → из него ДИ или p-value
Пример на пальцах
У вас 5 чеков: 100, 200, 300, 400, 500.
Медиана = 300.
Bootstrap-итерация 1: случайная выборка с возвращением [100, 500, 300, 300, 200] → медиана 300.
Итерация 2: [200, 400, 400, 100, 500] → медиана 400.
Итерация 3: [500, 300, 500, 100, 200] → медиана 300.
...
После 10000 итераций: у вас 10000 значений медианы.
- P2.5 = 200
- P97.5 = 400
95% ДИ для медианы: [200, 400].
Python пример
import numpy as np
data = np.array([100, 200, 300, 400, 500])
boot_medians = []
for _ in range(10000):
sample = np.random.choice(data, size=len(data), replace=True)
boot_medians.append(np.median(sample))
ci_low, ci_high = np.percentile(boot_medians, [2.5, 97.5])
print(f"95% CI for median: [{ci_low:.0f}, {ci_high:.0f}]")Преимущества
1. Работает для любой метрики
Среднее, медиана, P95, ratio, любая пользовательская — всё через bootstrap.
2. Не требует нормальности
Классический t-test предполагает нормальность. Bootstrap работает на любых распределениях.
3. Интуитивный
Проще объяснить команде, чем статистические формулы.
4. Легко реализовать
Цикл + случайная выборка. Работает на чём угодно.
Недостатки
1. Медленно
10000 итераций × N ресэмплов × вычисление метрики. На больших данных тяжело.
2. Не «магия»
Если данные плохие, bootstrap не спасёт. Он даёт валидный ДИ при выполнении предположений.
3. Для очень маленьких выборок не работает
N = 3 не хватит для bootstrap.
4. Compute cost
В A/B-тестах с миллионами пользователей bootstrap медленный. Обычно используют subsampling или аналитические аппроксимации.
Bootstrap в A/B-тестах
Классический вариант:
- Есть контроль и тест
- Для каждой группы bootstrap-итерация: resample и посчитать метрику
- Считать разницу между группами
- После 10000 итераций → распределение разницы
- ДИ включает 0 → не значимо. Не включает → значимо.
Виды bootstrap
Standard bootstrap
Обычное resample с возвращением. Самое простое.
Bayesian bootstrap
Веса вместо переsample. Медленнее, но теоретически строже.
Block bootstrap
Для временных рядов — sample блоками (chunks) чтобы сохранить autocorrelation.
Stratified bootstrap
Sample внутри страт (например, отдельно для iOS и Android).
Частые ошибки
1. Мало итераций
1000 — минимум. 10000 — стандарт. 100 — недостаточно.
2. Без замены (вместо с заменой)
replace=True обязательно. Без — вы просто перемешиваете.
3. Для маленьких выборок
N < 20 — bootstrap ненадёжен.
4. Для временных рядов без block bootstrap
Классический bootstrap ломает autocorrelation во времени.
Альтернативы
- Permutation test — похожий подход, но для p-value
- Delta method — аналитическая аппроксимация
- Asymptotic approximations — если выборка большая и вычисление дорогое
На собесе
Типичные вопросы:
«Что такое bootstrap?» Resample с возвращением для оценки распределения статистики.
«Когда использовать?» Медианы, перцентили, тяжёлые хвосты, когда классика не работает.
«Сколько итераций?» 10000 обычно. 1000 — минимум.
«Bootstrap или t-test?» Если выполняются предположения t-test (normality, mean), используйте его — быстрее. Иначе — bootstrap.
Связанные темы
FAQ
Сколько итераций bootstrap?
10000 стандарт. Больше — точнее ДИ, но медленнее.
Bootstrap для A/B с чеками — это ок?
Да. Для метрик с тяжёлым хвостом — bootstrap лучший выбор.
replace=True обязательно?
Да. Без replace — не bootstrap, а просто перемешивание.
Block bootstrap для чего?
Для временных рядов. Классический bootstrap ломает autocorrelation.
Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.