Анализ логических выводов с начальной загрузкой может быть вам полезен, если вы имеете дело с большими и репрезентативными выборками данных.

В прошлом месяце мой начальник спросил: можно ли найти истинное среднее количество просмотров видео в Instagram Reels для ТОП-брендов в Северной Америке?

Было бы неправильно сообщать ей о среднем количестве просмотров видео одного образца роликов. Чтобы решить эти проблемы, нам нужно мыслить вероятностно…

Bootstrap спешит на помощь! Этот метод создает конечное число образцов; вычисляет сводную статистику (например, среднее значение) для каждого образца; и находит интервал для решения. В прошлом получение 10 000 образцов казалось невыполнимой задачей, но с Python мы можем взломать наш путь.

Помимо доверительных интервалов, мы можем использовать Bootstraps для запуска тестов значимости. В этом посте рассказывается о принципах начальной загрузки и создании доверительных интервалов.

Почему начальная загрузка?

Если ваш босс спрашивает вас, почему Bootstraps, скажите ему следующее:

  • Это непараметрический метод, то есть он не предполагает базовое распределение.
  • Нам не нужно иметь дело с нормальностью данных или подобной дисперсией.

Помните строгие допущения t-Test? Bootstraps не нужно ставить галочки в этих полях. Но нам нужна представительная и разумная выборка. Подробнее о Bootstraps и анализе логических выводов скоро 👼.

Что такое бутстрап?

«Начальная загрузка — это использование передискретизированных — с заменой — данных для выполнения статистического вывода»

Быстрый пример Python поможет лучше объяснить концепцию, чем я:

import numpy as np
reel_views = [191, 145]
bootstrapped_video_views = np.random.choice(
    reel_views
    , size=len(reel_views)
)

print(f`the first sample: {bootstrapped_video_views}`)
--> the first sample: [191, 191]
print(f`the second sample: {bootstrapped_video_views}`)
--> the second sample: [145, 145]
print(f`the third sample: {bootstrapped_video_views}`)
--> the third sample: [191, 145]

Использование np.random.choice — это один из вариантов начальной загрузки 🪄. Чтобы понять концепцию замены, давайте посмотрим на первый пример: код рисует 191,заменяет его в массивreel_views и по чистой случайности , он снова отрисовывает 191. Та же логика применима ко второму и третьему образцам.

Как сгенерировать доверительные интервалы с начальной загрузкой?

Мы можем оценить неопределенность с помощью Bootstrap, используя доверительные интервалы. Идея состоит в том, чтобы найти интервал для сводной статистики (среднее значение), который содержит истинное среднее значение выборки.

Мы создаем загрузочную реплику путем повторной выборки наших данных (просмотры видео) и вычисления суммарной интересующей статистики (среднее количество просмотров видео). Код ниже выглядит следующим образом:

  1. Он создает новую выборку путем случайного выбора с заменой из наших данных.
  2. Он вычисляет сводную статистику (среднее) по этой новой выборке и сохраняет ее. Это называется загрузочной копией.
  3. Он повторяет шаги 1, и 2 конечное число раз (стандартно – 10 000 раз).
  4. Он вычисляет 2,5 и 97,5 процентили сохраненных 10 000 сводных статистических данных.
def draw_bs_reps(data: list, func: Callable, size: int = 10000) -> np.array:
    """
    Draw bootstrap replicates. Generate n 1d bootstrap replicates. Typical size = 5 - 10K repetitions
    """
    rng = np.random.default_rng(seed=42)
    bs_sample = rng.choice(data, size=(size, len(data)))
    bs_replicates = np.apply_along_axis(func, arr=bs_sample, axis=1)
    return bs_replicates


reel_views = [191, 145, 198, 192, 1022, ...] # Big Representative Sample
bootstrap_replicates = draw_bs_reps(reel_views, np.mean)
conf_int = np.percentile(bootstrap_replicates, [2.5, 97.5])
print(f'95% Confidence Interval: {conf_int}')
--> `95% Confidence Interval: [137.9, 150.3]`

Наш вымышленный интервал равен [137.9, 150.3]. Этот результат означает:

Если бы мы повторяли нашу выборку реальных просмотров ТОП-брендов снова и снова, 95% средних значений выборки находились бы в пределах 137.9 и 150.3 просмотров.

Планирование результатов никогда не помешает. При рисовании реплик начальной загрузки мы можем рисовать ECDF, графики KDE или гистограммы. Для меня графики ECDF и KDE превосходят гистограммы, поскольку они отображают все точки данных без необходимости бинирования. Ниже приведен KDE, отображающий все 10 000 реплик начальной загрузки:

95 % повторений среднего бутстрапа находятся в пределах фиолетовых линий.

Если в итоге вы получите широкий интервал, помните, что увеличение количества реплик начальной загрузки (например, 20 000) не сузит его. Если вам нужен более короткий интервал, единственный вариант — собрать большую выборку данных.

Бутстрапы — это прекрасно, но единственный способ уменьшить влияние выбросов и получить более узкий интервал — это собрать большую выборку данных.

Выводы

  • Доверительные интервалы начальной загрузки помогают нам оценить неопределенность
  • Чтобы использовать этот метод, нам нужна большая и репрезентативная выборка.
  • Bootstrap не может волшебным образом втиснуть больше данных в образец
  • Чтобы получить более узкие интервалы, нам нужно увеличить размер выборки.

В следующем посте из этой серии о начальной загрузке я расскажу о тестах значимости. Спасибо за чтение! 🙏