Bootstrap простыми словами

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Короткое объяснение

Bootstrap — метод статистики, когда вы многократно «берёте случайную подвыборку с возвращением» из ваших данных и считаете статистику на каждой.

Звучит странно — но позволяет получать доверительные интервалы и p-value для ЛЮБОЙ метрики, даже когда классические формулы не работают.

Зачем нужен

Классическая статистика (t-test) работает только для нормальных распределений и для среднего / пропорции.

Но часто нужны:

  • Медиана (классика формулы нет)
  • Percentile (P95 отклика)
  • Соотношения метрик (CR, retention)
  • Тяжёлый хвост (чек, время сессии)

Bootstrap — универсальный инструмент. Работает с любой статистикой.

Как работает

  1. У вас выборка из N наблюдений
  2. Случайно выбираете N значений с возвращением (повторы разрешены)
  3. Считаете нужную статистику (медиану, mean, etc.)
  4. Повторяете шаг 2-3 много раз (1000-10000)
  5. Получаете распределение статистики → из него ДИ или 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-тестах

Классический вариант:

  1. Есть контроль и тест
  2. Для каждой группы bootstrap-итерация: resample и посчитать метрику
  3. Считать разницу между группами
  4. После 10000 итераций → распределение разницы
  5. ДИ включает 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+ вопросами для собесов.