ポアソン分布は、一定の平均発生率と事象の独立性を仮定した場合、固定された時間枠または空間内での特定の事象数の確率を表す、計数データのモデリングに役立つツールです。しかし、現実世界のデータセットは、これらの理想的な条件から逸脱することがよくあります。この記事では、Pythonを用いて様々なデータセットにポアソン分布を当てはめる方法を説明し、過分散などの課題に対処します。
目次
Pythonにおける基本的なポアソン分布の当てはめ
scipy.stats
ライブラリを使用してポアソン分布を当てはめる基本的な手順から始めましょう。中核となる関数はpoisson.fit()
であり、平均事象発生率を表すλ(ラムダ)を推定します。
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
# サンプルデータ:1分あたりの通過車両数(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()
は簡単な出発点となりますが、負の二項分布を使用して過分散を認識し対処することは、正確な計数データモデリングに不可欠です。分布の選択は、データセットの特定の特性に依存します。プロットを使用して当てはめを視覚的に検査することで、選択した分布がデータに正確に反映されていることを確認できます。