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

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Короткое объяснение

Нормальное распределение (гауссово, bell curve) — самый частый шаблон распределения в природе и статистике.

Форма — «колокол»: много значений около центра, мало на краях.

Свойства

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

Левый и правый хвост одинаковые.

2. Определяется двумя параметрами

  • μ (mu) — среднее (центр колокола)
  • σ (sigma) — стандартное отклонение (ширина колокола)

3. Mean = Median = Mode

Все три характеристики центра совпадают.

4. Без границ

Теоретически от −∞ до +∞.

Правило 68-95-99.7

В нормальном распределении:

  • 68% значений лежат в пределах μ ± 1σ
  • 95% — в μ ± 2σ (точнее 1.96σ)
  • 99.7% — в μ ± 3σ

Пример: средний чек 1000 ₽, σ = 200.

  • 68% чеков: [800; 1200]
  • 95%: [600; 1400]
  • 99.7%: [400; 1600]

Чек 1800 ₽ — 4σ от среднего. Вероятность ~0.01%. Возможно, выброс.

Примеры из жизни

  • Рост людей (примерно нормально)
  • IQ (специально нормализовано)
  • Ошибки измерений
  • Суммы большого количества случайных величин (благодаря ЦПТ)

Примеры НЕ-нормальных данных

  • Доход / зарплата — скошенные, хвост вправо
  • Размер чека — скошенные (много мелких, мало крупных)
  • Время отклика сервера — хвост вправо
  • LTV — киты искажают
  • Retention curve — падающая экспонента

Standard Normal — частный случай

Нормальное с μ = 0, σ = 1. Обозначается N(0, 1).

Любое нормальное можно нормализовать:

z = (x − μ) / σ

Z — стандартное отклонение от среднего.

Zачем нужно в статистике

1. A/B-тесты

Классические тесты (t-test, z-test) предполагают нормальность. Для пропорций (CR) работает при больших выборках (благодаря ЦПТ).

2. Доверительные интервалы

CI = mean ± z × SE

Где z = 1.96 для 95% ДИ — из нормального распределения.

3. Многие алгоритмы ML

Линейная регрессия предполагает normal ошибки. GMM, PCA — тоже.

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

Визуально

Histogram, Q-Q plot, density plot.

import matplotlib.pyplot as plt
import scipy.stats as stats

stats.probplot(data, dist='norm', plot=plt)

Если Q-Q plot похож на прямую — близко к нормальному.

Статистические тесты

  • Shapiro-Wilk — для малых выборок
  • Anderson-Darling — более чувствительный
  • Kolmogorov-Smirnov — классика

Но эти тесты на больших выборках почти всегда отвергают нормальность (из-за мелких отклонений).

Central Limit Theorem (ЦПТ)

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

Поэтому:

  • Среднее выборки — нормально при достаточной N
  • Суммы — тоже
  • Многие биомедицинские показатели — тоже

Для A/B-тестов CR — дискретный, но при N > 30 биномиальное приближается к нормальному.

Работа с НЕ-нормальным

Если данные не нормальные:

1. Log-трансформация

y_log = np.log1p(y)

Часто превращает скошенные (чек, время) в нормальное.

2. Box-Cox

from scipy.stats import boxcox
y_transformed, lam = boxcox(y)

3. Непараметрические тесты

Mann-Whitney U вместо t-test.

4. Bootstrap

Работает без предположений о распределении.

Частые ошибки

1. Считать всё нормальным

Реальные данные часто не нормальные (доход, время, LTV).

2. Игнорировать normality test

Прогонять t-test на скошенных данных → неверные p-values.

3. Применять правило 68-95-99.7 к не-нормальному

«Мой чек 1800 — это 4σ, выброс!» А на самом деле чек — lognormal, 1800 вполне нормален.

4. Путать σ и SE

  • σ — разброс данных
  • SE = σ / sqrt(n) — разброс оценки среднего

Связанные темы

FAQ

Все ли данные распределены нормально?

Нет. Рост, IQ — да. Доход, LTV, время — нет.

Как проверить?

Q-Q plot визуально. Shapiro-Wilk / Anderson-Darling статистически.

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

Log-трансформация, Box-Cox, bootstrap, непараметрические тесты.

68-95-99.7 — только для нормального?

Да. Для других распределений — другие проценты.


Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.