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

Какие знаешь распределения?

2.0 Middle🔥 201 комментариев
#Machine Learning#Статистика и теория вероятностей

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

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

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

Основные статистические распределения

1. Нормальное распределение (Normal Distribution)

Характеристика: симметричное, колоколообразное распределение с одним пиком.

Когда встречается:

  • Рост людей в популяции
  • Ошибки измерений
  • Доходы среднего класса
  • IQ в популяции

Параметры: среднее (μ) и стандартное отклонение (σ)

Свойства:

  • 68% данных в диапазоне μ ± σ
  • 95% данных в диапазоне μ ± 2σ
  • 99.7% данных в диапазоне μ ± 3σ
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# Генерация нормального распределения
data = np.random.normal(loc=100, scale=15, size=10000)
plt.hist(data, bins=50, density=True, alpha=0.7)
plt.plot(np.linspace(50, 150, 100), norm.pdf(np.linspace(50, 150, 100), 100, 15))
plt.title('Нормальное распределение')
plt.show()

2. Логнормальное распределение (Lognormal)

Характеристика: асимметричное, с длинным хвостом справа. Логарифм значений распределён нормально.

Когда встречается:

  • Размеры компаний
  • Доходы населения
  • Размеры файлов
  • Цены акций

Свойство: если X ~ Lognormal, то ln(X) ~ Normal

from scipy.stats import lognorm

data = np.random.lognormal(mean=0, sigma=1, size=10000)
plt.hist(data, bins=100, density=True, alpha=0.7)
plt.title('Логнормальное распределение')
plt.xlim(0, 50)  # Ограничиваем для видимости
plt.show()

3. Биномиальное распределение (Binomial)

Характеристика: дискретное распределение результатов n независимых испытаний с вероятностью успеха p.

Когда встречается:

  • Количество конверсий из 100 посещений
  • Количество положительных ответов в опросе
  • Число дефектных товаров в партии

Параметры: n (количество испытаний), p (вероятность успеха)

from scipy.stats import binom

n, p = 100, 0.3  # 100 испытаний, вероятность 30%
data = np.random.binomial(n=n, p=p, size=10000)
plt.hist(data, bins=30, density=True, alpha=0.7)
plt.title(f'Биномиальное распределение (n={n}, p={p})')
plt.show()

4. Пуассоновское распределение (Poisson)

Характеристика: дискретное распределение редких событий в фиксированном временном интервале.

Когда встречается:

  • Количество запросов в секунду на сервер
  • Количество ошибок в коде
  • Количество телефонных звонков в час
  • Количество отказов машины в месяц

Параметр: λ (интенсивность)

from scipy.stats import poisson

lambda_param = 5  # Среднее количество событий
data = np.random.poisson(lam=lambda_param, size=10000)
plt.hist(data, bins=20, density=True, alpha=0.7)
plt.title(f'Пуассоновское распределение (λ={lambda_param})')
plt.show()

5. Экспоненциальное распределение (Exponential)

Характеристика: непрерывное распределение времени между событиями в процессе Пуассона.

Когда встречается:

  • Время ожидания до следующего события
  • Время жизни батареи
  • Время между отказами оборудования
  • Время ответа сервера

Параметр: λ (интенсивность)

from scipy.stats import expon

data = np.random.exponential(scale=2, size=10000)  # scale = 1/λ
plt.hist(data, bins=50, density=True, alpha=0.7)
plt.xlim(0, 20)
plt.title('Экспоненциальное распределение')
plt.show()

6. Равномерное распределение (Uniform)

Характеристика: все значения в диапазоне имеют одинаковую вероятность.

Когда встречается:

  • Случайный выбор из диапазона
  • Погрешность округления
  • Случайные координаты на плане

Параметры: a (минимум), b (максимум)

data = np.random.uniform(low=0, high=100, size=10000)
plt.hist(data, bins=50, density=True, alpha=0.7)
plt.title('Равномерное распределение U(0, 100)')
plt.show()

7. Экспоненциальное (power-law) распределение

Характеристика: частоты следуют закону f(x) ∝ x^(-α). Много малых значений, мало больших.

Когда встречается:

  • Распределение доходов (80/20 правило Парето)
  • Размеры землетрясений
  • Популярность веб-сайтов
  • Количество друзей в социальных сетях
# Power-law: P(X > x) ∝ x^(-α)
alpha = 2.5
data = np.random.pareto(a=alpha, size=10000) + 1
plt.hist(data, bins=100, density=True, alpha=0.7)
plt.xlim(1, 50)
plt.title(f'Power-law распределение (α={alpha})')
plt.show()

8. Гамма-распределение (Gamma)

Характеристика: обобщение экспоненциального, для времени ожидания k событий.

Когда встречается:

  • Время ожидания в очереди
  • Общая продолжительность работы
  • Интервалы между телефонными звонками

Параметры: shape (k), scale (θ)

from scipy.stats import gamma

k, theta = 2, 2
data = np.random.gamma(shape=k, scale=theta, size=10000)
plt.hist(data, bins=50, density=True, alpha=0.7)
plt.xlim(0, 30)
plt.title(f'Гамма-распределение (k={k}, θ={theta})')
plt.show()

9. Хи-квадрат распределение (Chi-squared)

Характеристика: сумма квадратов k независимых стандартных нормальных переменных.

Когда встречается:

  • Проверка независимости в таблицах сопряженности
  • Гипотезы о дисперсии
  • Критерии согласия
from scipy.stats import chi2

df = 5  # степени свободы
data = np.random.chisquare(df=df, size=10000)
plt.hist(data, bins=50, density=True, alpha=0.7)
plt.xlim(0, 25)
plt.title(f'Хи-квадрат распределение (df={df})')
plt.show()

10. t-распределение (Student's t)

Характеристика: похоже на нормальное, но с более тяжёлыми хвостами. Используется при неизвестной дисперсии.

Когда встречается:

  • t-тесты при малых выборках
  • Доверительные интервалы
  • Интервалы предсказания

Параметр: df (степени свободы)

from scipy.stats import t

df = 5
data = np.random.standard_t(df=df, size=10000)
plt.hist(data, bins=50, density=True, alpha=0.7, label=f't(df={df})')
plt.hist(np.random.normal(size=10000), bins=50, density=True, alpha=0.3, label='Normal')
plt.xlim(-10, 10)
plt.legend()
plt.title('t-распределение vs Нормальное')
plt.show()

Таблица выбора распределения

Тип данныхРаспределениеПараметры
Непрерывное, симметричноеНормальноеμ, σ
Непрерывное, асимметричноеЛогнормальноеμ, σ (логарифма)
Дискретное, испытанияБиномиальноеn, p
Дискретное, редкие событияПуассоновскоеλ
Время до событияЭкспоненциальноеλ
Равномерное случайноеРавномерноеa, b
Очень неравномерноеPower-lawα

Практический пример

# Как определить, какое распределение?
from scipy.stats import shapiro, kstest, anderson

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

# Тест Шапиро-Уилка
stat, p = shapiro(data)
print(f"Shapiro-Wilk: p-value={p:.4f}")
if p > 0.05:
    print("Похоже на нормальное распределение")

# Тест Колмогорова-Смирнова
stat, p = kstest(data, 'norm', args=(100, 15))
print(f"KS test: p-value={p:.4f}")

Понимание распределений критично для выбора правильного статистического теста и интерпретации результатов анализа данных.

Какие знаешь распределения? | PrepBro