Короткий ответ
Бутстрэп — метод оценки неопределённости статистики (среднего, медианы, разницы) путём многократной повторной выборки с возвращением из имеющихся данных; полезен, когда распределение метрики сложное, сильно скошено, или нет готовой аналитической формулы для доверительного интервала.
Как это работает подробнее
из исходной выборки многократно (обычно тысячи раз) формируются новые выборки того же размера со случайным повторением элементов, для каждой считается интересующая статистика, а разброс этих значений даёт эмпирическую оценку доверительного интервала.
Пример кода
Пример на Python
import numpy as np
np.random.seed(42)
revenue = np.random.lognormal(mean=3, sigma=1, size=500)
boot_means = [np.random.choice(revenue, size=len(revenue), replace=True).mean() for _ in range(5000)]
ci_low, ci_high = np.percentile(boot_means, [2.5, 97.5])
print(ci_low, ci_high)Что использовать на практике
- На практике. бутстрэп особенно полезен для метрик вроде медианы, процентилей, отношения метрик (ARPU = выручка/пользователи), для которых аналитические формулы доверительных интервалов сложны или требуют сильных допущений о распределении. Для метрик с крайне малым числом ненулевых наблюдений или экстремальными выбросами бутстрэп может недооценивать хвосты, если в исходной выборке таких наблюдений очень мало — стоит проверять стабильность результата. Также полезно сравнивать бутстрэп-интервал с аналитическим (параметрическим), когда последний доступен, — существенное расхождение может указывать на нарушение допущений параметрического метода на этих данных.
- Пример. Sanity check: увеличить число бутстрэп-повторов с 5000 до 20000 — границы интервала должны измениться незначительно, что говорит о стабильности оценки.
Подводные камни
- Частые ошибки. применять наивный бутстрэп к данным с зависимостями между наблюдениями (например, несколько заказов одного пользователя) без учёта этой структуры — нужен блочный/кластерный бутстрэп по пользователю; использовать слишком малое число повторов (например, 100), что даёт нестабильную оценку интервала; забывать, что бутстрэп оценивает неопределённость по имеющейся выборке и не исправляет смещение выборки относительно генеральной совокупности. Ещё одна ошибка — применять бутстрэп к выборке, где исходные данные уже содержат известную ошибку или смещение (например, дубли записей), которое бутстрэп не исправляет, а лишь переносит в каждую повторную выборку.