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

Какие виды распределений вы знаете? Приведите примеры.?

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

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

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

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

Виды распределений и примеры

Распределение — это описание того, как часто встречаются разные значения переменной. Знание видов распределений критично для правильного анализа данных, выбора статистических тестов и понимания природы явлений. Разберу основные распределения и их применение.

1. Нормальное (Гауссово) распределение

Описание: Симметричное распределение с одним пиком в центре. Характеризуется средним (μ) и стандартным отклонением (σ).

Формула:

f(x) = (1 / (σ√(2π))) × e^(-(x-μ)²/(2σ²))

Код визуализации:

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

x = np.linspace(-4, 4, 1000)
y = norm.pdf(x)

plt.plot(x, y)
plt.title('Нормальное распределение')
plt.xlabel('Значение')
plt.ylabel('Плотность вероятности')
plt.show()

# Генерация данных из нормального распределения
data = np.random.normal(loc=100, scale=15, size=10000)  # IQ

Свойства:

  • Симметричное
  • Среднее = Медиана = Мода
  • ~68% данных в диапазоне μ ± σ
  • ~95% в диапазоне μ ± 2σ
  • ~99.7% в диапазоне μ ± 3σ

Реальные примеры:

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

Важность: Многие статистические методы предполагают нормальность (t-тесты, ANOVA, регрессия).

2. Биномиальное распределение

Описание: Распределение количества успехов в серии независимых испытаний с двумя исходами (да/нет, успех/неудача).

Параметры:

  • n — количество испытаний
  • p — вероятность успеха в каждом испытании

Код:

from scipy.stats import binom

n = 100  # Количество пользователей
p = 0.1  # Вероятность клика (10%)

# Вероятность ровно 15 кликов
prob = binom.pmf(15, n, p)
print(f"P(X=15) = {prob:.4f}")

# Вероятность не более 15 кликов
cum_prob = binom.cdf(15, n, p)
print(f"P(X≤15) = {cum_prob:.4f}")

# Генерация данных
data = np.random.binomial(n=100, p=0.1, size=10000)  # 10000 экспериментов

Реальные примеры:

  • Количество успешных конверсий из 1000 кликов
  • Количество дефектов в партии из 50 товаров
  • Количество положительных ответов на опрос
  • A/B тестирование (success/no success)

3. Пуассоновское распределение

Описание: Распределение количества событий, происходящих в фиксированном интервале времени или пространства, когда события происходят независимо с фиксированной интенсивностью.

Параметр:

  • λ (lambda) — интенсивность (среднее количество событий)

Код:

from scipy.stats import poisson

lambda_val = 5  # В среднем 5 событий в час

# Вероятность ровно 3 событий
prob = poisson.pmf(3, lambda_val)
print(f"P(X=3) = {prob:.4f}")

# Генерация данных
data = np.random.poisson(lam=5, size=10000)  # 10000 часов наблюдения

Реальные примеры:

  • Количество запросов к серверу в минуту
  • Количество звонков в call-центр в час
  • Количество опечаток на странице
  • Количество отказов оборудования в день

4. Экспоненциальное распределение

Описание: Распределение времени между двумя последовательными событиями. Изучает интервалы, а не количество событий (в отличие от Пуассона).

Параметр:

  • λ — интенсивность

Код:

from scipy.stats import expon

lambda_val = 1/5  # В среднем 5 минут между событиями

# Вероятность того, что время <= 3 минут
prob = expon.cdf(3, scale=1/lambda_val)
print(f"P(T≤3) = {prob:.4f}")

# Генерация данных
data = np.random.exponential(scale=5, size=10000)  # Время между событиями

Реальные примеры:

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

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

Описание: Все значения в диапазоне [a, b] имеют одинаковую вероятность.

Код:

from scipy.stats import uniform

a, b = 0, 100  # Диапазон

# Плотность вероятности
pdf = uniform.pdf(50, loc=a, scale=b-a)  # Одинакова для всех
print(f"f(50) = {pdf:.4f}")

# Генерация данных
data = np.random.uniform(0, 100, size=10000)

Реальные примеры:

  • Случайные числа в компьютере
  • Время прибытия клиента в интервал [8:00, 9:00]
  • Случайный выбор элемента из списка

6. Log-normal распределение

Описание: Если логарифм переменной нормально распределён, то сама переменная имеет log-normal распределение. Асимметричное, часто встречается в реальных данных.

Код:

from scipy.stats import lognorm

# Параметр sigma логарифма нормального распределения
sigma = 0.5
mu = 0

# Генерация данных
data = np.random.lognormal(mean=mu, sigma=sigma, size=10000)

Реальные примеры:

  • Доходы и заработные платы (небольшой доход много людей, большой доход мало)
  • Размеры файлов в интернете
  • Продолжительность сеансов на веб-сайте
  • Цены на имущество

7. Гамма-распределение

Описание: Обобщение экспоненциального распределения. Используется для моделирования времени ожидания сумм независимых событий.

Параметры:

  • α (shape) — форма
  • β (scale) — масштаб

Код:

from scipy.stats import gamma

alpha = 2
beta = 2

# Генерация данных
data = np.random.gamma(shape=alpha, scale=beta, size=10000)

Реальные примеры:

  • Время ремонта оборудования
  • Размер убытков в страховании

8. Распределение Вейбулла

Описание: Часто используется для моделирования времени жизни и надёжности.

Код:

from scipy.stats import weibull_min

c = 1.5  # Shape parameter

# Генерация данных
data = np.random.weibull(a=c, size=10000)

Реальные примеры:

  • Надёжность компонентов
  • Время до отказа оборудования
  • Прогноз скорости ветра

9. Beta-распределение

Описание: Распределение для переменных в диапазоне [0, 1]. Очень гибкое, может принимать разные формы.

Код:

from scipy.stats import beta

alpha, beta_param = 2, 5

# Генерация данных для вероятности
data = np.random.beta(a=alpha, b=beta_param, size=10000)

Реальные примеры:

  • Доля дефектных товаров в партии
  • Вероятность клика на объявление
  • Конверсионные коэффициенты

Тесты на нормальность

Важно проверить, нормально ли распределены данные перед использованием параметрических тестов:

from scipy.stats import shapiro, normaltest, kstest, anderson

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

# Shapiro-Wilk тест (лучший для малых выборок)
stat, p_value = shapiro(data)
print(f"Shapiro-Wilk: p-value = {p_value:.4f}")
if p_value > 0.05:
    print("Данные нормально распределены")
else:
    print("Данные НЕ нормально распределены")

# Kolmogorov-Smirnov тест
stat, p_value = kstest(data, 'norm', args=(np.mean(data), np.std(data)))

# Anderson-Darling тест
result = anderson(data)
print(f"Anderson-Darling: statistic = {result.statistic}")

Как выбрать правильное распределение?

import matplotlib.pyplot as plt
from scipy import stats

def analyze_distribution(data):
    """Анализирует распределение данных"""
    fig, axes = plt.subplots(1, 2, figsize=(12, 4))
    
    # Гистограмма
    axes[0].hist(data, bins=50, density=True, alpha=0.7)
    axes[0].set_title('Гистограмма')
    
    # Q-Q plot (сравнение с нормальным распределением)
    stats.probplot(data, dist="norm", plot=axes[1])
    axes[1].set_title('Q-Q Plot')
    
    plt.tight_layout()
    plt.show()
    
    # Статистика
    skewness = stats.skew(data)
    kurtosis = stats.kurtosis(data)
    print(f"Асимметрия (skewness): {skewness:.3f}")
    print(f"Эксцесс (kurtosis): {kurtosis:.3f}")

data = np.random.normal(loc=100, scale=15, size=10000)
analyze_distribution(data)

Таблица применения распределений

РаспределениеТип данныхКогда использовать
НормальноеНепрерывноеБольшинство непрерывных величин
БиномиальноеДискретноеУспех/неудача в n испытаниях
ПуассонДискретноеКоличество событий в интервале
ЭкспоненциальноеНепрерывноеВремя между событиями
UniformНепрерывноеСлучайный выбор в диапазоне
Log-normalНепрерывноеДоходы, цены, размеры
ГаммаНепрерывноеВремя ожидания
BetaНепрерывное [0,1]Доли, вероятности

Ключевые выводы

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

✅ Выбор теста зависит от распределения

✅ Всегда визуализируй и проверяй распределение

✅ Log-normal часто встречается в реальности больше, чем нормальное

✅ Параметрические тесты требуют проверки предположений