Распределение Пуассона простыми словами

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

«Сколько покупок будет за час», «сколько запросов в сервис за минуту», «сколько деффектов на 1000 строк кода» — все эти задачи описываются Пуассоном. Это базовое распределение для count-данных.

На собесах часто: «как моделировать число звонков в call-center?». Правильный ответ — Poisson с параметром λ.

Короткое объяснение

Poisson(λ) описывает количество событий за фиксированный интервал (время, пространство), когда:

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

Примеры:

  • Число сообщений в Telegram за час
  • Число автобусов на остановке за 10 минут
  • Число ошибок на странице

Формула

P(X = k) = (λ^k × e^(-λ)) / k!

Характеристики

  • Среднее: λ
  • Дисперсия: λ ← равна среднему!
  • Std: √λ

Уникальная особенность: mean = variance.

Пример в аналитике

В среднем за минуту приходит 5 посетителей. Какова вероятность, что за минуту придёт ровно 7?

λ = 5, k = 7.

from scipy.stats import poisson
print(poisson.pmf(7, 5))  # ≈ 0.104

Около 10%.

В Python

from scipy.stats import poisson

# Вероятность ровно 10 событий при λ = 7
poisson.pmf(10, 7)

# Вероятность ≤ 5 событий при λ = 3
poisson.cdf(5, 3)

# Симуляция
samples = poisson.rvs(mu=5, size=1000)

Связь с биномиальным

Если N велико и p мало, то Binomial(N, p) ≈ Poisson(Np).

Пример: 10 000 рассылок с CR = 0.01%. Binomial(10000, 0.0001) ≈ Poisson(1).

Использование

Web-трафик

Число запросов к серверу в секунду. В infra-аналитике — Poisson-модель для capacity planning.

Маркетинг

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

Качество

Дефекты на единицу продукции. Классика из бизнеса.

Редкие события

Покупки премиума в час. Редкие события без upper bound.

Ожидание vs variance

Если mean ≠ variance — возможно, overdispersion. Тогда не Poisson, а negative binomial.

Тест:

mean = data.mean()
var = data.var()
# Если var / mean > 1.5 — overdispersed

Задачи

Задача 1

«В call-center 20 звонков в час. Сколько вероятность, что в час будет ≥ 30?».

λ = 20.

1 - poisson.cdf(29, 20) ≈ 1.7%

Задача 2

«Клик по email раз в 100 рассылок. За день 500 рассылок. Распределение кликов?».

λ = 500 / 100 = 5. Poisson(5).

В A/B-тестах

Для count-метрик (число действий на user):

  • events_per_user — часто Poisson
  • Тест t-тестом на средних работает, но при overdispersion — negative binomial лучше

На собесе

«Что описывает Poisson?» Число событий за интервал, при постоянной средней скорости и независимости.

«Mean и variance Poisson?» Оба = λ.

«Когда не подходит?» При overdispersion (variance > mean) или при зависимых событиях.

«Связь с биномиальным?» Poisson — предел биномиального при N → ∞, p → 0, Np = const.

Частые ошибки

Использовать для continuous

Poisson — только для счётных неотрицательных. Не для continuous.

Игнорировать overdispersion

Реальные данные часто имеют variance > mean. Тогда negative binomial.

Не учитывать burstiness

Если события идут «пачками» (bursty) — Poisson не подойдёт. Это Hawkes process или self-exciting.

Связанные темы

FAQ

Пример в жизни?

Число звонков в техподдержку за час. Число кликов по рекламе за минуту.

Можно ли для времени между событиями?

Нет, это exponential. Poisson — количество, exponential — интервалы между.

Параметр λ как найти?

По данным: λ̂ = mean.


Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.