Распределение Пуассона — ценный инструмент для моделирования данных подсчета, представляющий вероятность определенного числа событий в течение фиксированного периода времени или пространства, предполагая постоянную среднюю скорость и независимость событий. Однако реальные наборы данных часто отклоняются от этих идеальных условий. В этой статье рассматривается подгонка распределений Пуассона к различным наборам данных в Python, а также решаются такие проблемы, как избыточная дисперсия.
Содержание
- Базовая подгонка распределения Пуассона в Python
- Метод наименьших квадратов для интервальных данных
- Учет избыточной дисперсии с помощью отрицательного биномиального распределения
- Заключение
Базовая подгонка распределения Пуассона в Python
Начнем с основного процесса подгонки распределения Пуассона с использованием библиотеки scipy.stats
. Основная функция — poisson.fit()
, которая оценивает λ (лямбда), представляющую среднюю скорость событий.
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
# Пример данных: Количество машин, проезжающих мимо точки в минуту (100 минут)
data = np.random.poisson(lam=5, size=100)
# Подгонка распределения Пуассона
lambda_fit, = poisson.fit(data)
# Вывод подогнанного лямбда
print(f"Подогнанное лямбда: {lambda_fit}")
# Подготовка к построению графика
x = np.arange(0, max(data) + 1)
# Гистограмма и подогнанное распределение
plt.hist(data, bins=range(max(data) + 2), density=True, alpha=0.6, label='Данные')
plt.plot(x, poisson.pmf(x, lambda_fit), 'r-', label=f'Подогнанное распределение Пуассона (λ={lambda_fit:.2f})')
plt.xlabel('Количество машин')
plt.ylabel('Вероятность')
plt.legend()
plt.title('Подгонка распределения Пуассона')
plt.show()
Этот простой подход хорошо работает, когда данные точно следуют распределению Пуассона. Однако реальные данные часто отклоняются.
Метод наименьших квадратов для интервальных данных
Хотя poisson.fit()
удобен, метод наименьших квадратов для интервальных данных предлагает более надежную альтернативу, особенно при ограниченных данных или значительных отклонениях от предположений Пуассона. Этот метод включает в себя группировку данных и минимизацию квадратов разностей между наблюдаемыми и ожидаемыми частотами. Реализация требует итерационной оптимизации (например, используя scipy.optimize.minimize
) и выходит за рамки этого краткого примера, но легко находится в специализированных статистических пакетах.
Учет избыточной дисперсии с помощью отрицательного биномиального распределения
Избыточная дисперсия возникает, когда дисперсия данных превышает их среднее значение, нарушая ключевое предположение Пуассона (дисперсия равна среднему). Отрицательное биномиальное распределение, учитывающее избыточную дисперсию, обеспечивает лучшую подгонку в таких случаях.
from scipy.stats import nbinom
# Пример данных с избыточной дисперсией
overdispersed_data = np.random.negative_binomial(n=2, p=0.5, size=100)
# Подгонка отрицательного биномиального распределения
n_fit, p_fit = nbinom.fit(overdispersed_data)
# Вывод подогнанных параметров
print(f"Подогнанное n: {n_fit}")
print(f"Подогнанное p: {p_fit}")
# Подготовка к построению графика
x = np.arange(0, max(overdispersed_data) + 1)
# Гистограмма и подогнанное распределение
plt.hist(overdispersed_data, bins=range(max(overdispersed_data) + 2), density=True, alpha=0.6, label='Данные')
plt.plot(x, nbinom.pmf(x, n_fit, p_fit), 'r-', label=f'Подогнанное отрицательное биномиальное распределение (n={n_fit:.2f}, p={p_fit:.2f})')
plt.xlabel('Количество событий')
plt.ylabel('Вероятность')
plt.legend()
plt.title('Подгонка отрицательного биномиального распределения для данных с избыточной дисперсией')
plt.show()
Это демонстрирует, как отрицательное биномиальное распределение эффективно отражает характеристики данных с избыточной дисперсией, предлагая более точную модель, чем принудительная подгонка Пуассона.
Заключение
Эффективная подгонка распределения Пуассона требует тщательного анализа данных. Хотя poisson.fit()
обеспечивает простую отправную точку, распознавание и учет избыточной дисперсии с помощью отрицательного биномиального распределения имеет решающее значение для точного моделирования данных подсчета. Выбор распределения зависит от конкретных характеристик набора данных. Визуальный осмотр подгонки с помощью графиков гарантирует, что выбранное распределение точно представляет данные.