← Назад к вопросам

Задача на доверительный интервал

1.7 Middle🔥 221 комментариев
#Статистика и A/B тестирование

Условие

В опросе 1000 респондентов 520 ответили положительно.

Постройте 95% доверительный интервал для истинной доли положительных ответов в популяции.

Объясните, что означает этот интервал.

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Доверительный интервал для доли: 95% CI

Условие задачи

  • Размер выборки: n = 1000
  • Количество положительных ответов: x = 520
  • Уровень доверия: 95%

Найти 95% доверительный интервал для истинной доли положительных ответов в популяции.

Решение

Шаг 1: Вычисляем выборочную долю

p̂ = x / n = 520 / 1000 = 0.52 = 52%

Шаг 2: Вычисляем стандартную ошибку (SE)

SE = sqrt(p̂ × (1 - p̂) / n)
   = sqrt(0.52 × 0.48 / 1000)
   = sqrt(0.2496 / 1000)
   = sqrt(0.0002496)
   ≈ 0.01580

Шаг 3: Определяем критическое значение

Для 95% доверительного уровня используем z-распределение (нормальное приближение):

z = 1.96  (для 95% доверия)

Шаг 4: Вычисляем границы интервала

Маржа ошибки (ME) = z × SE
                  = 1.96 × 0.01580
                  ≈ 0.0309

Нижняя граница = p̂ - ME = 0.52 - 0.0309 ≈ 0.4891
Верхняя граница = p̂ + ME = 0.52 + 0.0309 ≈ 0.5509

Ответ

95% Доверительный интервал: [0.4891, 0.5509] или [48.91%, 55.09%]

Расчёт на Python

import numpy as np
from scipy import stats

# Данные
n = 1000
x = 520
p_hat = x / n

print(f"Выборочная доля: p̂ = {p_hat}")

# Стандартная ошибка
SE = np.sqrt(p_hat * (1 - p_hat) / n)
print(f"Стандартная ошибка: SE = {SE:.6f}")

# Критическое значение z для 95%
z_critical = stats.norm.ppf(0.975)  # 0.975 для двусторонней 95%
print(f"Критическое значение: z = {z_critical:.4f}")

# Маржа ошибки
ME = z_critical * SE
print(f"Маржа ошибки: ME = {ME:.6f}")

# Границы интервала
lower_bound = p_hat - ME
upper_bound = p_hat + ME

print(f"\nДоверительный интервал:")
print(f"Нижняя граница: {lower_bound:.4f} ({lower_bound*100:.2f}%)")
print(f"Верхняя граница: {upper_bound:.4f} ({upper_bound*100:.2f}%)")
print(f"\n95% CI = [{lower_bound:.4f}, {upper_bound:.4f}]")

Вывод:

Выборочная доля: p̂ = 0.52
Стандартная ошибка: SE = 0.015795
Критическое значение: z = 1.9600
Маржа ошибки: ME = 0.030959

Доверительный интервал:
Нижняя граница: 0.4891 (48.91%)
Верхняя граница: 0.5509 (55.09%)

95% CI = [0.4891, 0.5509]

Интерпретация результата

Что означает интервал [48.91%, 55.09%]?

  1. Неправильная интерпретация (частая ошибка): ❌ "Истинная доля с вероятностью 95% находится в этом интервале"

  2. Правильная интерпретация: ✓ "Если мы повторим эксперимент много раз (будем брать разные выборки по 1000 человек), то в 95% случаев построенные интервалы будут содержать истинную долю в популяции"

  3. Простыми словами:

    • Мы не знаем точное значение в популяции
    • Но 95% уверены, что оно лежит между 48.91% и 55.09%
    • 5% шанс, что истинное значение вне этого интервала

Влияние размера выборки на интервал

# При n = 100 (вместо 1000)
n_small = 100
SE_small = np.sqrt(0.52 * 0.48 / n_small)
ME_small = 1.96 * SE_small
print(f"n = 100: CI = [{0.52 - ME_small:.4f}, {0.52 + ME_small:.4f}]")

# При n = 4000 (вместо 1000)
n_large = 4000
SE_large = np.sqrt(0.52 * 0.48 / n_large)
ME_large = 1.96 * SE_large
print(f"n = 4000: CI = [{0.52 - ME_large:.4f}, {0.52 + ME_large:.4f}]")

Результат:

n = 100:  CI = [0.4224, 0.6176]  (широкий интервал, ±9.76%)
n = 1000: CI = [0.4891, 0.5509]  (узкий интервал, ±3.10%)
n = 4000: CI = [0.5045, 0.5355]  (очень узкий интервал, ±1.55%)

Вывод: увеличение выборки сужает доверительный интервал (более точная оценка).

Таблица z-значений для разных уровней доверия

Доверие | z-значение | Маржа ошибки
90%     | 1.645      | ±2.60%
95%     | 1.960      | ±3.10%  ← наш случай
99%     | 2.576      | ±4.08%

Формула в общем виде

Доверительный интервал = p̂ ± z × sqrt(p̂(1-p̂)/n)

Где:

  • p̂ = выборочная доля
  • z = критическое значение нормального распределения
  • n = размер выборки

Условия применимости

Для нормального приближения нужно: ✓ n × p̂ ≥ 10 : 1000 × 0.52 = 520 ✓ ✓ n × (1-p̂) ≥ 10 : 1000 × 0.48 = 480 ✓

Оба условия выполнены, нормальное приближение корректно.

Альтернатива: точный интервал Уилсона

Для более точных результатов (особенно при малых n) используют интервал Уилсона:

from statsmodels.stats.proportion import proportion_confint

lower, upper = proportion_confint(count=520, nobs=1000, alpha=0.05, method='wilson')
print(f"Интервал Уилсона: [{lower:.4f}, {upper:.4f}]")

Для нашего случая различие минимально, но при n < 30 или p̂ близко к 0 или 1 интервал Уилсона лучше.

Практическое применение

  • Политика: предвыборные опросы (% проголосуют за кандидата)
  • Маркетинг: доля удовлетворённых клиентов
  • Качество: процент дефектных товаров
  • A/B тестирование: доля конверсий между вариантами
  • Эпидемиология: распространённость болезни в популяции