ENIGMA AI
ENIGMA AI

Как выполнить бутстрэп для тестовой выборки?

встречается 1× middle algorithms

Как ответить

Бутстрэп для тестовой выборки — это метод оценки распределения статистики (например, среднего, медианы, дисперсии) путём многократной выборки с возвращением из исходных данных. Суть в том, чтобы смоделировать распределение выборочной статистики, не делая предположений о форме распределения генеральной совокупности. На практике это выглядит так: берём исходную выборку размером 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-теста считают бутстрэп-распределение разницы средних и смотрят, попадает ли ноль в доверительный интервал.

Ключевые тезисы

  • Бутстрэп — это выборка с возвращением из исходных данных для оценки распределения статистики без параметрических предположений.
  • Стандартная реализация: N наблюдений, K итераций (1000–10000), для каждой — расчёт статистики, затем процентильный метод для доверительного интервала.
  • Работает хорошо при N ≥ 30; для малых выборок или асимметричных распределений нужны коррекции (BCa, сглаженный бутстрэп).
  • Не подходит для зависимых данных (временные ряды) без модификаций (блоковый бутстрэп).
  • Часто применяется в A/B-тестах для метрик с ненормальным распределением (например, медиана времени на сайте).

Что спросят дальше

  • — Как изменится доверительный интервал, если увеличить количество бутстрэп-итераций с 1000 до 100000?
  • — В каком случае бутстрэп даст смещённую оценку, и как это исправить?
  • — Как бы вы реализовали бутстрэп для проверки гипотезы о равенстве медиан двух выборок?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение