Что вы понимаете под термином нормальное распределение?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что вы понимаете под термином нормальное распределение?
Нормальное распределение (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
- Ошибки измерений
- Шум в сигналах
✗ НЕ нормально распределены:
- Доходы людей (асимметричное, с длинным хвостом)
- Количество заказов (дискретное)
- Цены акций (логнормальное)
- Количество клиентов (асимметричное)