Что такое доверительный интервал и как его интерпретировать?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Доверительный интервал: определение и интерпретация
Определение
Доверительный интервал (confidence interval, CI) — это диапазон значений вокруг точечной оценки параметра, который с заданной вероятностью (обычно 95%) содержит истинное значение этого параметра в генеральной совокупности.
Например: если мы оцениваем среднее время использования приложения в день, то доверительный интервал 95% может быть [45 минут, 55 минут]. Это означает, что с 95% вероятностью истинное среднее значение в генеральной совокупности находится в этом диапазоне.
Правильная интерпретация
Что НЕ означает доверительный интервал 95%
❌ "Вероятность того, что истинное значение лежит в диапазоне [45, 55], равна 95%"
Это частая ошибка! Истинное значение либо находится в интервале, либо нет — вероятность либо 0, либо 1.
Что ОЗНАЧАЕТ доверительный интервал 95%
✅ "Если бы мы повторили эксперимент много раз (каждый раз собирая новую выборку и вычисляя новый доверительный интервал), то примерно в 95% случаев вычисленные интервалы содержали бы истинное значение параметра."
Это правильная частотная интерпретация.
Примеры расчётов в Python
import numpy as np
from scipy import stats
import pandas as pd
# Пример 1: Доверительный интервал для среднего
# Данные: время использования приложения в днях (в минутах)
usage_times = np.array([45, 52, 48, 55, 50, 49, 54, 51, 47, 53])
# Рассчитываем 95% доверительный интервал для среднего
mean = usage_times.mean()
std_error = stats.sem(usage_times) # standard error of the mean
confidence_level = 0.95
alpha = 1 - confidence_level
# t-критерий (используется для малых выборок)
t_critical = stats.t.ppf(1 - alpha/2, len(usage_times) - 1)
ci_lower = mean - t_critical * std_error
ci_upper = mean + t_critical * std_error
print(f"Среднее: {mean:.2f}")
print(f"95% CI: [{ci_lower:.2f}, {ci_upper:.2f}]")
# Пример 2: Использование встроенной функции
from scipy.stats import t
ci = t.interval(0.95, len(usage_times)-1, loc=mean, scale=std_error)
print(f"95% CI (встроенная функция): [{ci[0]:.2f}, {ci[1]:.2f}]")
# Пример 3: Доверительный интервал для доли (например, CTR)
imports from statsmodels.stats.proportion import proportion_confint
# 1000 кликов, 120 конверсий
clicks = 1000
conversions = 120
ctr = conversions / clicks # 0.12 или 12%
# Доверительный интервал для доли (точный метод Wilson)
ci_lower, ci_upper = proportion_confint(conversions, clicks, alpha=0.05, method='wilson')
print(f"CTR: {ctr:.1%}")
print(f"95% CI: [{ci_lower:.2%}, {ci_upper:.2%}]")
Практическое применение в аналитике
1. A/B тестирование
# Анализируем результаты A/B теста
group_a_conversions = 95
group_a_total = 1000
group_b_conversions = 115
group_b_total = 1000
ctr_a = group_a_conversions / group_a_total
ctr_b = group_b_conversions / group_b_total
# Доверительные интервалы
ci_a = proportion_confint(group_a_conversions, group_a_total, alpha=0.05)
ci_b = proportion_confint(group_b_conversions, group_b_total, alpha=0.05)
print(f"Группа A: {ctr_a:.1%} [95% CI: {ci_a[0]:.2%}, {ci_a[1]:.2%}]")
print(f"Группа B: {ctr_b:.1%} [95% CI: {ci_b[0]:.2%}, {ci_b[1]:.2%}]")
# Если интервалы не пересекаются → с 95% вероятностью есть значимая разница
if ci_a[1] < ci_b[0] or ci_b[1] < ci_a[0]:
print("✓ Результат статистически значим")
else:
print("✗ Нет значимой разницы (интервалы пересекаются)")
2. Оценка метрик в данный момент времени
# Средняя выручка на пользователя с доверительным интервалом
revenues = np.array([10.50, 15.20, 8.99, 22.50, 12.99, 9.50, 18.75, 14.20, 11.99, 19.50])
mean_revenue = revenues.mean()
ci = t.interval(0.95, len(revenues)-1, loc=mean_revenue, scale=stats.sem(revenues))
print(f"Средняя выручка: ${mean_revenue:.2f}")
print(f"95% CI: [${ci[0]:.2f}, ${ci[1]:.2f}]")
Факторы, влияющие на ширину доверительного интервала
- Размер выборки (n): Чем больше выборка, тем уже интервал. CI ∝ 1/√n
- Стандартное отклонение: Чем больше разброс данных, тем шире интервал
- Уровень доверия: 99% интервал шире, чем 95% интервал
- Тип распределения: t-тест для малых выборок, z-тест для больших
Правила большого пальца для интерпретации
- Не пересекаются с нулём → параметр статистически отличен от нуля на уровне α
- Не пересекаются между группами → разница между группами статистически значима
- Широкий интервал → недостаточно данных или высокая вариабельность (нужен больший размер выборки)
- Узкий интервал → точная оценка параметра
Частые ошибки в интерпретации
- ❌ Думать, что 95% CI означает, что истинное значение находится там с 95% вероятностью
- ❌ Игнорировать ширину интервала (узкий интервал = точнее, широкий = менее уверены)
- ❌ Сравнивать два доверительных интервала, посмотрев, пересекаются ли они (нужен t-test)
- ❌ Использовать CI для одной группы, когда нужно сравнивать две группы
SQL-запрос для вычисления доверительного интервала
WITH metrics AS (
SELECT
COUNT(*) as n,
AVG(revenue) as mean_revenue,
STDDEV(revenue) as std_revenue
FROM transactions
WHERE date >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT
mean_revenue,
mean_revenue - 1.96 * (std_revenue / SQRT(n)) as ci_lower_95,
mean_revenue + 1.96 * (std_revenue / SQRT(n)) as ci_upper_95
FROM metrics;
Это верно для больших выборок (n > 30). Для малых выборок используйте t-критерий вместо 1.96.