Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Bootstrap в статистике
Bootstrap — это метод переиспользования данных для оценки статистических параметров.
Основная идея
Из исходного датасета размером N случайно выбираем N элементов С ВОЗВРАЩЕНИЕМ (sampling with replacement).
import numpy as np
from numpy.random import choice
# Исходные данные
data = np.array([1, 2, 3, 4, 5])
# Bootstrap выборка
bootstrap_sample = choice(data, size=len(data), replace=True)
print(bootstrap_sample) # Может быть [1, 2, 2, 5, 3]
# Заметь: 1 встречается дважды, 4 вообще отсутствует
Процесс Bootstrap
def bootstrap(data, n_iterations=1000):
bootstrap_estimates = []
for _ in range(n_iterations):
# 1. Случайно выбираем с возвращением
bootstrap_sample = np.random.choice(data, size=len(data), replace=True)
# 2. Считаем статистику (например, среднее)
statistic = np.mean(bootstrap_sample)
bootstrap_estimates.append(statistic)
# 3. Получаем распределение статистики
return np.array(bootstrap_estimates)
# Пример
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
bootstrap_means = bootstrap(data, n_iterations=10000)
print(f"Среднее: {np.mean(bootstrap_means):.2f}")
print(f"95% интервал доверия: [{np.percentile(bootstrap_means, 2.5):.2f}, {np.percentile(bootstrap_means, 97.5):.2f}]")
Применение 1: интервалы доверия
# Вместо параметрических методов (предполагают нормальность)
# Используем эмпирические интервалы из bootstrap
data = np.random.normal(100, 15, 50) # 50 значений
# Bootstrap
bootstrap_means = []
for _ in range(10000):
sample = np.random.choice(data, size=len(data), replace=True)
bootstrap_means.append(np.mean(sample))
# 95% интервал доверия для среднего
ci_lower = np.percentile(bootstrap_means, 2.5)
ci_upper = np.percentile(bootstrap_means, 97.5)
print(f"95% CI: [{ci_lower:.2f}, {ci_upper:.2f}]")
Применение 2: стандартная ошибка
# Bootstrap позволяет оценить стандартную ошибку
# без формул и предположений о распределении
data = [5, 8, 12, 3, 9, 7, 11]
bootstrap_medians = []
for _ in range(10000):
sample = np.random.choice(data, size=len(data), replace=True)
bootstrap_medians.append(np.median(sample))
std_error = np.std(bootstrap_medians)
print(f"SE медианы: {std_error:.3f}")
Применение 3: тестирование гипотез
# Нулевая гипотеза: средние равны
group_a = [1, 2, 3, 4, 5]
group_b = [2, 3, 4, 5, 6]
# Объединяем для переиспользования при H0
pooled = np.concatenate([group_a, group_b])
bootstrap_diffs = []
for _ in range(10000):
sample_a = np.random.choice(pooled, size=len(group_a), replace=True)
sample_b = np.random.choice(pooled, size=len(group_b), replace=True)
diff = np.mean(sample_a) - np.mean(sample_b)
bootstrap_diffs.append(diff)
# Если 0 в интервале [2.5%, 97.5%] → нет разницы
ci_lower = np.percentile(bootstrap_diffs, 2.5)
ci_upper = np.percentile(bootstrap_diffs, 97.5)
print(f"95% CI для разницы: [{ci_lower:.2f}, {ci_upper:.2f}]")
if ci_lower <= 0 <= ci_upper:
print("Нулевая гипотеза не отвергается")
Плюсы Bootstrap
✅ Не требует параметрических предположений ✅ Работает с любыми статистиками ✅ Интуитивен и простой ✅ Хорошо для малых выборок
Минусы Bootstrap
❌ Требует много вычислений (10k-100k итераций) ❌ Не улучшает плохие данные (garbage in = garbage out) ❌ Сложнее в некоторых сценариях (зависимые выборки)
Отличие от других методов
| Метод | Когда использовать |
|---|---|
| Bootstrap | Нет параметрических предположений |
| Пермутационный тест | Тестирование гипотез |
| Jackknife | Leave-one-out оценка |
| Cross-validation | Оценка моделей (ML) |
Вывод
Bootstrap — это мощный метод для оценки неопределённости БЕЗ математических предположений. Идеален для малых выборок и нестандартных статистик!