Анализ логических выводов с начальной загрузкой может быть вам полезен, если вы имеете дело с большими и репрезентативными выборками данных.
В прошлом месяце мой начальник спросил: можно ли найти истинное среднее количество просмотров видео в 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 конечное число раз (стандартно – 10 000 раз).
- Он вычисляет 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 не может волшебным образом втиснуть больше данных в образец
- Чтобы получить более узкие интервалы, нам нужно увеличить размер выборки.
В следующем посте из этой серии о начальной загрузке я расскажу о тестах значимости. Спасибо за чтение! 🙏