Какие знаешь распределения?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные статистические распределения
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}")
Понимание распределений критично для выбора правильного статистического теста и интерпретации результатов анализа данных.