TGViewer
Я твой продукт анализировал Я твой продукт анализировал @datadeepdive · 1.68K subscribers
Post #75 892
📌 12. Метод доверительных интервалов

Разберём ещё один метод расчёта АБ и потихоньку будем завершать вводную часть по этой теме.

Классический метод, который на практике я встречал не часто — оценка через доверительные интервалы (CI, confidence intervals). Он простой, хоть и не самый надёжный такой реализации.

Да, технически, интервалы в расчётах АБ заложены везде. Мы же поговорим о классике, когда построение CI это самоцель.

🧐 CI — это диапазон значений, в котором, с определённой вероятностью, находится истинное значение параметра.

Если CI выборок не пересекаются, то это означает стат. значимость в различиях (технически, среднее одной выборки не должно лежать в интервале второй, но на цифрах интервалов мы среднего не видим)

Ограничение: CI предполагают нормальные распределения выборок и теряют в точности на малых выборках.

Пример реализации метода:
# Заводим функцию для расчёта CI
calc_ci <- function(df, cl = 0.95) {
mean_metric <- mean(df$metric) # считаем среднее
std_error <- sd(df$metric) / sqrt(nrow(df)) # считаем стандартную ошибку
error_limit <- qt(cl / 2 + .5, df = nrow(df) - 1) * std_error # считаем предел погрешности
lower <- mean_metric - error_limit # считаем нижнюю границу интервала
upper <- mean_metric + error_limit # считаем верхнюю границу интервала
return(c(lower, upper))
}

# Считаем CI для групп
ci_A <- calc_ci(df %>% filter(var == "A"))
ci_B <- calc_ci(df %>% filter(var == "B"))


# Заводим функцию для расчёта CI
def calc_ci(df, cl = 0.95):
mean_metric = np.mean(df['metric']) # считаем среднее
std_error = np.std(df['metric']) / np.sqrt(len(df)) # считаем стандартную ошибку
error_limit = stats.t.ppf(cl / 2 + 0.5, df = len(df) - 1) * std_error # считаем предел погрешности
lower = mean_metric - error_limit # считаем нижнюю границу интервала
upper = mean_metric + error_limit # считаем верхнюю границу интервала
return lower, upper

# Считаем CI для групп
ci_A = calc_ci(df[df['var'] == 'A'])
ci_B = calc_ci(df[df['var'] == 'B'])


#ABtest
  • 👍 4
More from @datadeepdive
  1. Jul 28, 2026📌 4/4, Бизнес уровень. Пожалуй самый сложный, и самый простой уровень одновременно. Понят…
  2. Jul 28, 2026Сори, отвлёкся 😀 📌 3/4, Продуктовый уровень. Этот раздел ставит перед собой почти филосо…
  3. May 31, 2026📌 2/4, Операционный уровень. Эта часть про то, насколько оптимально расходуются ресурсы.…
  4. May 31, 2026📌 Про оценку направления экспериментов, 1/4 Я как-то недавно выступал на одной конфе, рас…
  5. May 26, 2026А вот маленький демо датасет, если захочется глянуть как оно всё работает
  6. May 26, 2026Прикрутили типизацию аккаунтов, теперь в соло можно пользоваться без всяких ключей, с огра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →