Какие распределения вероятностей вы знаете?

«Какие распределения вероятностей вы знаете?» — вопрос из категории Статистика и теория вероятностей, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В машинном обучении и статистике я часто работаю со следующими распределениями:

Дискретные распределения:

  • Распределение Бернулли: Моделирует одно испытание с двумя исходами (успех/неудача). Параметр — вероятность успеха p.
    from scipy.stats import bernoulli
    # Моделируем 10 подбрасываний монеты с p=0.5
    data = bernoulli.rvs(p=0.5, size=10)
  • Биномиальное распределение: Описывает количество успехов в n независимых испытаниях Бернулли. Параметры: n (число испытаний) и p (вероятность успеха).
    from scipy.stats import binom
    # Вероятность получить ровно 7 орлов в 10 подбрасываниях честной монеты
    prob = binom.pmf(k=7, n=10, p=0.5)
  • Распределение Пуассона: Используется для моделирования числа редких событий, происходящих за фиксированный интервал времени или пространства. Параметр λ (лямбда) — среднее количество событий.
    from scipy.stats import poisson
    # Моделируем число кликов на баннер за час (λ=5)
    clicks = poisson.rvs(mu=5, size=100)

Непрерывные распределения:

  • Нормальное (Гауссово) распределение: Фундаментальное распределение, описывающее многие природные процессы. Параметры: μ (среднее) и σ (стандартное отклонение).
    import numpy as np
    # Генерация данных и оценка параметров
    data = np.random.normal(loc=100, scale=15, size=1000)
    sample_mean = np.mean(data)
    sample_std = np.std(data)
  • Равномерное распределение: Все значения в заданном интервале [a, b] равновероятны.
    # Генерация случайной точки на отрезке [0, 1]
    point = np.random.uniform(low=0.0, high=1.0)
  • Экспоненциальное распределение: Моделирует время между событиями в пуассоновском процессе. Параметр λ — интенсивность (обратное среднему времени).
    from scipy.stats import expon
    # Моделируем время между запросами к серверу (среднее время = 2 сек)
    times = expon.rvs(scale=2, size=50)

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