Как ответить
Бутстрэп для тестовой выборки — это метод оценки распределения статистики (например, среднего, медианы, дисперсии) путём многократной выборки с возвращением из исходных данных. Суть в том, чтобы смоделировать распределение выборочной статистики, не делая предположений о форме распределения генеральной совокупности. На практике это выглядит так: берём исходную выборку размером N, генерируем из неё K подвыборок (обычно 1000–10000) того же размера N, для каждой считаем нужную статистику и смотрим, как эти значения распределены.
Вот как это реализовать на Python:
import numpy as np
def bootstrap_ci(data, statistic=np.mean, n_bootstrap=10000, ci=95):
"""
Вычисляет бутстрэп-доверительный интервал для заданной статистики.
data: одномерный массив исходных наблюдений
statistic: функция, вычисляющая статистику (по умолчанию среднее)
n_bootstrap: количество бутстрэп-выборок
ci: уровень доверия в процентах (по умолчанию 95)
"""
n = len(data)
bootstrap_stats = np.zeros(n_bootstrap)
for i in range(n_bootstrap):
# Выборка с возвращением того же размера
sample = np.random.choice(data, size=n, replace=True)
bootstrap_stats[i] = statistic(sample)
# Процентильный метод для доверительного интервала
alpha = (100 - ci) / 2
lower = np.percentile(bootstrap_stats, alpha)
upper = np.percentile(bootstrap_stats, 100 - alpha)
return lower, upper, bootstrap_stats
# Пример: 95% ДИ для среднего возраста клиентов
ages = np.array([25, 30, 35, 40, 45, 50, 55, 60])
lower, upper, _ = bootstrap_ci(ages, statistic=np.mean, n_bootstrap=5000)
print(f"95% ДИ для среднего: [{lower:.2f}, {upper:.2f}]")Ключевые моменты, которые стоит помнить:
- Размер выборки: бутстрэп работает хорошо при N ≥ 30. Для малых выборок (N < 10) оценки могут быть смещёнными.
- Количество итераций: 1000 — минимум для грубой оценки, 10000 — стандарт для стабильных интервалов. Для p-значений в тестах гипотез иногда нужно 50000+.
- Методы коррекции: процентильный метод (как в коде выше) — самый простой. Для более точных интервалов используют BCa (bias-corrected and accelerated) или метод сглаженного бутстрэпа, особенно если распределение статистики асимметрично.
- Ограничения: бутстрэп не панацея. Если исходная выборка нерепрезентативна (например, есть выбросы или сильная зависимость наблюдений), результаты будут некорректны. Для временных рядов нужен блоковый бутстрэп.
На собеседовании я бы ещё упомянул, что бутстрэп часто используют для оценки разницы между группами (например, A/B-тесты), когда распределение метрики не подчиняется нормальному закону. В таких случаях вместо t-теста считают бутстрэп-распределение разницы средних и смотрят, попадает ли ноль в доверительный интервал.