Ответ
Бутстрап — это компьютерный метод ресэмплинга (повторного выбора), используемый для оценки точности статистик (среднего, медианы, дисперсии) и построения доверительных интервалов. Его ключевая идея — многократное извлечение выборок с возвращением из исходного набора данных для эмпирической оценки распределения интересующей статистики.
Основные шаги метода:
- Имеется исходная выборка размера
n. - Генерируется
Bбутстрап-выборок (обычноB = 1000-10000). Каждая бутстрап-выборка формируется путём случайного отбораnнаблюдений из исходной выборки с возвращением (т.е. одно наблюдение может попасть в выборку несколько раз). - Для каждой бутстрап-выборки вычисляется интересующая статистика ( theta^* ) (например, выборочное среднее).
- Распределение этих
Bзначений ( theta^* ) используется как аппроксимация выборочного распределения исходной статистики.
Пример на Python: построение 95% доверительного интервала для медианы.
import numpy as np
# Исходные данные (например, время отклика сервиса в мс)
data = np.array([120, 135, 98, 155, 210, 103, 178, 145])
n = len(data)
B = 10000
bootstrap_medians = []
for _ in range(B):
# Генерация бутстрап-выборки с возвращением
bootstrap_sample = np.random.choice(data, size=n, replace=True)
# Вычисление статистики для этой выборки
bootstrap_medians.append(np.median(bootstrap_sample))
# Построение перцентильного доверительного интервала
ci_lower = np.percentile(bootstrap_medians, 2.5)
ci_upper = np.percentile(bootstrap_medians, 97.5)
print(f"Бутстрап 95% ДИ для медианы: ({ci_lower:.2f}, {ci_upper:.2f})")
Преимущества бутстрапа:
- Не требует строгих предположений о форме исходного распределения (например, нормальности).
- Применим к сложным статистикам, для которых нет аналитической формулы.
- Хорошо работает даже с небольшими выборками.
Ограничения: Может давать смещённые оценки для статистик, сильно зависящих от "хвостов" распределения, или данных со сложной структурой (например, временные ряды).
Ответ 18+ 🔞
А, бутстрап! Ну это ж классика, ебать мои старательские костыли. По сути, это такой хитрый способ, когда у тебя данных — кот наплакал, а доверительный интервал построить охота. И ты начинаешь выкручиваться, как мартышка с гранатой.
Смотри, в чём прикол. Берёшь свою жалкую выборку, смотришь на неё и понимаешь — нихуя не ясно, какое там распределение. Нормальное? Хуй там! А статистику (допустим, медиану) оценить надо. Вот тут-то бутстрап и выручает, этот полупидор элегантный.
Работает всё до безобразия просто, ёпта:
- У тебя есть
nчисел. Всё, что есть. - Ты начинаешь ебашить симуляции. Берёшь эти
nчисел и с возвращением тащишь из них новые выборки, тоже поnштук. Одно и то же число может вылезти несколько раз — это нормально, так и задумано. - Для каждой такой сгенерированной выборки считаешь нужную тебе статистику (среднее, медиану, дисперсию — что угодно). Делаешь так
Bраз, гдеB— это овердохуища, типа 10 000. - Смотришь на получившуюся кучу значений — вот тебе и аппроксимация того, как твоя статистика могла бы размазаться, будь у тебя больше данных.
Вот, смотри на коде, сейчас всё станет ясно, как божий день. Главное, блок кода не трогай — он святой.
import numpy as np
# Допустим, это время отклика какого-нибудь кривого микросервиса
data = np.array([120, 135, 98, 155, 210, 103, 178, 145])
n = len(data)
B = 10000 # Делаем много, чтобы не бздеть
bootstrap_medians = []
for _ in range(B):
# Вот он, ключевой момент: тычась в исходные данные, создаём новую выборку
bootstrap_sample = np.random.choice(data, size=n, replace=True)
# И считаем для неё медиану
bootstrap_medians.append(np.median(bootstrap_sample))
# А теперь смотрим, в какие границы попадают 95% наших симулированных медиан
ci_lower = np.percentile(bootstrap_medians, 2.5)
ci_upper = np.percentile(bootstrap_medians, 97.5)
print(f"Бутстрап 95% ДИ для медианы: ({ci_lower:.2f}, {ci_upper:.2f})")
Чем хорош метод? Да тем, что доверия ебать ноль к предположениям. Не нужно гадать, нормальное ли распределение. Работает почти всегда, когда данные — это просто независимые наблюдения, типа кусочков. Для сложных статистик, на которые нет готовой формулы, — вообще спасение.
Но и подводные камни есть, ядрёна вошь. Если твоя статистика дико зависит от редких выбросов в хвостах, бутстрап может лажать. Или если данные — временной ряд, где есть зависимость между наблюдениями. Тут уже надо голову думать, а не тупо семплировать. Но в большинстве бытовых случаев — инструмент хуй в пальто, то есть просто отличный.