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

Ответ

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

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

  • Распределение Бернулли: Моделирует одно испытание с двумя исходами (успех/неудача). Параметр — вероятность успеха 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)

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

Ответ 18+ 🔞

Давай разжую тебе эту тему про распределения, а то смотрю, глаза уже стекленеют. Сидишь и думаешь: «Ну ёпта, опять эти формулы, какого хуя?». А на самом деле всё проще, чем кажется, если не забивать голову терминами, а представить на живых примерах.

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

  • Распределение Бернулли. Вообще примитив до безобразия. Представь одно действие с двумя исходами. Кинул монетку один раз — либо орёл (успех), либо решка (неудача). Весь его смысл — в одной цифре p, вероятности этого успеха. Вот и вся магия.

    from scipy.stats import bernoulli
    # Смоделируем 10 подбрасываний монетки, где орёл выпадает с шансом 0.5
    data = bernoulli.rvs(p=0.5, size=10)

    Получишь просто последовательность нулей и единиц. Волнение ебать — а вдруг все единицы? Хотя с p=0.5 скорее пиздец какой-то бардак будет.

  • Биномиальное распределение. А вот это уже интереснее. Это когда ты ту же монетку кидаешь не один раз, а несколько, и тебе важно, сколько именно раз выпал орёл. Параметры: n — сколько раз кидаем, p — шанс орла за один бросок.

    from scipy.stats import binom
    # Какова вероятность, что из 10 бросков честной монеты ровно 7 будут орлами?
    prob = binom.pmf(k=7, n=10, p=0.5)

    Считаешь — и понимаешь, что вероятность не такая уж и большая. Сам от себя охуел, когда впервые посчитал.

  • Распределение Пуассона. Любимое распределение всех, кто считает редкие события. Допустим, у тебя сайт, и в среднем (λ) за час приходит 5 кликов по баннеру. Но в один час может прийти 2, в другой — 8. Пуассон как раз описывает, как вероятности размазаны вокруг этого среднего.

    from scipy.stats import poisson
    # Смоделируем, сколько кликов будет за час, если в среднем их 5. Сделаем 100 таких "часов".
    clicks = poisson.rvs(mu=5, size=100)

    Глянешь на результат — и видишь, что чаще всего действительно около пяти, но иногда выскакивают значения и побольше. Удивление пиздец — а оно в реальности так и работает.

Теперь второй лагерь — непрерывные. Тут уже не целые числа, а любые, дробные. Как температура или время.

  • Нормальное распределение (Гауссово). Царь и бог всех распределений, ёперный театр. Его колокольчик видели все, даже те, кто про статистику не слышал. Оно описывает кучу всего в природе: рост людей, ошибки измерений, твой IQ (шутка). Параметры: μ — где центр этой горки (среднее), σ — насколько она размазана (разброс).

    import numpy as np
    # Сгенерируем данные роста для 1000 человек: средний рост 100 см, разброс 15 см.
    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)

    Получишь кучу чисел. И заметишь важную вещь: маленькие промежутки (вроде 0.1 сек) будут встречаться часто, а вот ждать очередной запрос 10 секунд — ни хуя себе редкое событие.

А теперь главное, чувак. Весь цирк с выбором распределения — это не просто так. Это фундамент. Если ты моделируешь счётчик (сколько раз что-то случилось) — смотри в сторону Пуассона или Бинома. Если работаешь с ошибками, которые должны быть симметричны вокруг нуля — тебе в гости к Нормальному. Если моделируешь время до какого-то события — Экспоненциальное твой друг. Выбрал не то — и вся твоя модель пойдёт по пизде, как та мартышлюшка на скользком полу.