1. Phân phối Poisson trong Numpy

Phân phối Poisson là một Phân phối rời rạc. Nó ước tính trung bình số lần xảy ra thành công của một sự kiện trong một khoảng thời gian nhất định. Điều này giả định rằng những sự kiện này xảy ra với tốc độ không đổi và cũng không phụ thuộc vào sự kiện cuối cùng.Giá trị trung bình của phân phối Poisson được gọi là lamda, ký hiệu là .

Trong Numpy, để tạo ra mảng dựa theo phân phối Poisson ta sẽ cần sử dụng hàm random.poisson() – hàm này yêu cầu 2 tham số:

  • Tham số lam – là tỷ lệ hay số lần xuất hiện đã biết (Giá trị trung bình trong phân phối Poisson )
  • Tham số size – là kích thước mảng cần trả về

Ví dụ dưới đây, sử dụng hàm random.poisson() để tạo ra một mảng 1 chiều có kích thước 1 x 10, các giá trị theo phân phối Poisson với số lần xuất hiện đã biết (hay giá trị trung bình) bằng (nghĩa là lam = 2) như sau:

from numpy import random

x = random.poisson(lam=2, size=10)

print(x)

Kết quả:

[0 2 1 0 0 3 2 3 1 2]

2. Trực quan hóa phân phối Poisson

Chúng ta có thể trực quan hóa các phân phối nhị thức thông qua hàm sns.distplot() trong mô-đun Seaborn.

Ví dụ dưới đây, trực quan hóa phân phối Poisson có số lần xuất hiện đã biết (hay giá trị trung bình) bằng bằng hàm sns.distplot() như sau:
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns

sns.distplot(random.poisson(lam=2, size=1000), kde=False)

plt.show()

3. Sự khác biệt giữa phân phối nhị thức và Poisson

Phân phối Poisson khác với phân phối nhị thức ở chỗ:  Thông tin cho biết không phải là xác suất để một sự kiện xảy ra thành công trong một lần thử hay số lần mà sự kiện đó xảy ra trong n lần thử như trong phân phối nhị thức. Thay vào đó, phân phối Poisson chính là trung bình số lần xảy ra thành công của một sự kiện trong một khoảng thời gian nhất định. 

Nhưng đối với phân phối nhị thức, khi số lần thử nghiệm là rất lớn và các xác suất xuất hiện của mỗi lần thử p có giá trị gần bằng – Khi đó n * p của phân phối nhị thức sẽ gần bằn giá trị lam trong phân phối Poisson.

from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns

sns.distplot(random.binomial(n=1000, p=0.01, size=1000), hist=False, label='binomial')
sns.distplot(random.poisson(lam=10, size=1000), hist=False, label='poisson')

plt.show()