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

Что вы понимаете под термином нормальное распределение?

1.0 Junior🔥 241 комментариев
#Статистика и A/B тестирование

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

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

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

Что вы понимаете под термином нормальное распределение?

Нормальное распределение (Normal Distribution, Gaussian Distribution, Bell Curve) — это одно из самых важных распределений вероятностей в статистике и науке о данных. Оно описывает распределение случайной величины, которая концентрируется вокруг среднего значения, симметрично убывая по обе стороны.

Математическое определение

Нормальное распределение с параметрами μ (среднее) и σ (стандартное отклонение) имеет функцию плотности вероятности:

f(x) = (1 / (σ√(2π))) * exp(-(x - μ)² / (2σ²))

где:
- μ — математическое ожидание (средина распределения)
- σ — стандартное отклонение (ширина распределения)
- σ² — дисперсия

Обозначение: X ~ N(μ, σ²)

Свойства нормального распределения

1. Симметричность

  • Распределение симметрично относительно среднего значения μ
  • Среднее = Медиана = Мода

2. Правило 68-95-99.7 (Empirical Rule)

68% данных находится в интервале [μ - σ, μ + σ]
95% данных находится в интервале [μ - 2σ, μ + 2σ]
99.7% данных находится в интервале [μ - 3σ, μ + 3σ]

Пример:
Если рост людей N(170, 10²) см:
- 68% людей имеют рост 160-180 см
- 95% людей имеют рост 150-190 см
- 99.7% людей имеют рост 140-200 см

3. Кумулятивная функция распределения (CDF)

F(x) = P(X <= x) = Φ((x - μ) / σ)

где Φ — стандартная нормальная CDF

Визуализация в Python

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# Параметры
mu = 0      # среднее
sigma = 1   # стандартное отклонение

# Генерируем данные
x = np.linspace(-4, 4, 1000)
y = norm.pdf(x, mu, sigma)

# Визуализируем
plt.figure(figsize=(10, 6))
plt.plot(x, y, 'b-', linewidth=2, label='N(0, 1)')
plt.fill_between(x, y, alpha=0.3)

# Отметим интервалы
plt.axvline(mu - sigma, color='r', linestyle='--', label='μ ± σ (68%)')
plt.axvline(mu + sigma, color='r', linestyle='--')
plt.axvline(mu - 2*sigma, color='orange', linestyle='--', label='μ ± 2σ (95%)')
plt.axvline(mu + 2*sigma, color='orange', linestyle='--')

plt.xlabel('x')
plt.ylabel('Плотность вероятности')
plt.title('Нормальное распределение N(0, 1)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

Стандартное нормальное распределение (Z-distribution)

Стандартизированное нормальное распределение с μ = 0 и σ = 1:

Z = (X - μ) / σ  ← Z-score (standardization)

Пример:
Если X ~ N(100, 15²), то Z ~ N(0, 1)

X = 115 → Z = (115 - 100) / 15 = 1.0

Z-таблица: Используется для вычисления вероятностей

from scipy.stats import norm

# P(Z <= 1.96) = 0.975 (95% влево)
prob = norm.cdf(1.96)
print(f"P(Z <= 1.96) = {prob:.4f}")  # 0.9750

# P(Z > 1.96) = 0.025 (5% вправо - двусторонний тест)
prob_right = 1 - norm.cdf(1.96)
print(f"P(Z > 1.96) = {prob_right:.4f}")  # 0.0250

Центральная предельная теорема (CLT)

Ключевое свойство: Среднее значение выборки из любого распределения стремится к нормальному распределению, если размер выборки достаточно большой.

import numpy as np
import matplotlib.pyplot as plt

# Генерируем выборки из равномерного распределения
sample_means = []
for _ in range(10000):
    sample = np.random.uniform(0, 1, size=100)  # Выборка из uniform
    sample_means.append(np.mean(sample))

# Строим гистограмму средних
plt.hist(sample_means, bins=50, density=True, alpha=0.7)
plt.xlabel('Среднее значение')
plt.ylabel('Частота')
plt.title('Распределение средних значений (CLT)')
plt.show()

# Результат: даже хотя исходные данные равномерны,
# распределение средних почти нормально!

Проверка нормальности данных

1. Q-Q Plot (Quantile-Quantile Plot)

from scipy import stats
import matplotlib.pyplot as plt

data = np.random.normal(100, 15, 1000)

# Q-Q plot
stats.probplot(data, dist="norm", plot=plt)
plt.title('Q-Q Plot')
plt.show()

# Если точки лежат на прямой → данные нормально распределены

2. Тест Шапиро-Уилка (Shapiro-Wilk Test)

from scipy.stats import shapiro

data = np.random.normal(100, 15, 100)

# H0: данные нормально распределены
statistic, p_value = shapiro(data)
print(f"p-value: {p_value:.4f}")

if p_value > 0.05:
    print("✓ Данные нормально распределены (не отклоняем H0)")
else:
    print("✗ Данные НЕ нормально распределены (отклоняем H0)")

3. Тест Колмогорова-Смирнова (Kolmogorov-Smirnov Test)

from scipy.stats import kstest, norm

data = np.random.normal(100, 15, 100)

# Сравниваем с теоретическим нормальным распределением
statistic, p_value = kstest(data, 'norm', args=(np.mean(data), np.std(data)))
print(f"p-value: {p_value:.4f}")

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

1. Предположение для методов (параметрические тесты)

  • t-тест, ANOVA требуют нормально распределённых данных
  • Если данные не нормальны → используй непараметрические альтернативы

2. Линейная регрессия

  • Остатки (residuals) должны быть нормально распределены
  • Проверь с помощью Q-Q plot

3. Максимум правдоподобия (Maximum Likelihood Estimation)

  • Многие модели предполагают нормальное распределение ошибок

4. Контроль качества

  • Нормальное распределение используется для определения допустимых пределов

Примеры в реальности

✓ Нормально распределены:
  - Рост и вес людей
  - IQ
  - Ошибки измерений
  - Шум в сигналах

✗ НЕ нормально распределены:
  - Доходы людей (асимметричное, с длинным хвостом)
  - Количество заказов (дискретное)
  - Цены акций (логнормальное)
  - Количество клиентов (асимметричное)