توزیع پواسون (Poisson Distribution)
در این صفحه با توزیع پواسون در پایتون آشنا می شویم. این توزیع برای شمردن تعداد رخدادها در یک بازه زمان یا فضا استفاده می شود.
آشنایی با توزیع پواسون در پایتون
توزیع پواسون یک توزیع گسسته (Discrete Distribution) است. یعنی فقط روی عددهای صحیح تعریف می شود.
این توزیع حدس می زند یک رویداد چند بار رخ می دهد. مثلا اگر کسی معمولا روزی دو بار غذا بخورد، احتمال سه بار غذا خوردن او چقدر است.
نکته: گسسته یعنی بین دو مقدار، مقدارهای میانی در نظر گرفته نمی شوند. مثلا 2 و 3 بار رخداد داریم، اما 2٫5 بار رخداد معنی ندارد.
پارامترهای توزیع پواسون در NumPy
در نامپای، تابع random.poisson() توزیع پواسون در پایتون را می سازد. این تابع دو پارامتر مهم دارد.
- lam: نرخ رخدادها در بازه مشخص است. مثلا اگر به طور میانگین در یک ساعت دو پیام می گیری، lam برابر 2 است.
- size: شکل آرایه خروجی را مشخص می کند. یعنی چند نمونه از توزیع می خواهی.
می توانی lam را مثل میانگین تعداد رخداد در یک بازه ببینی. سپس با size تعیین می کنی چند بار این وضعیت را شبیه سازی کنی.
ساخت داده پواسون با NumPy
در مثال منبع، یک آرایه یک بعدی با ده مقدار می سازیم. هر مقدار نشان می دهد رویداد با نرخ 2، چند بار در یک بازه رخ داده است.
from numpy import random
x = random.poisson(lam=2, size=10)
print(x)
هر بار کد را اجرا کنی، عددها کمی عوض می شوند. اما هنوز بیشتر مقدارها نزدیک نرخ اصلی یعنی دو هستند.
نمایش نمودار توزیع پواسون با Seaborn
برای فهم بهتر توزیع پواسون در پایتون، نمودار آن خیلی کمک می کند. در منبع، با Seaborn و Matplotlib نمودار توزیع را رسم می کنیم.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
sns.displot(random.poisson(lam=2, size=1000))
plt.show()
در نمودار، می بینی بیشتر ستون ها نزدیک عدد 2 هستند. یعنی تعداد رخدادها معمولا نزدیک نرخ متوسط می ماند.
تفاوت توزیع نرمال و توزیع پواسون
توزیع نرمال پیوسته است، اما توزیع پواسون گسسته است. در نرمال، روی همه عددهای حقیقی کار می کنیم، اما در پواسون فقط روی عددهای صحیح.
با این حال، اگر lam بزرگ باشد، توزیع پواسون شبیه توزیع نرمال می شود. در منبع، این شباهت با یک مثال و نمودار نشان داده شده است.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
data = {
"normal": random.normal(loc=50, scale=7, size=1000),
"poisson": random.poisson(lam=50, size=1000)
}
sns.displot(data, kind="kde")
plt.show()
در این نمودار، دو منحنی خیلی شبیه هم دیده می شوند. برای یادگیری بیشتر می توانی بعدا به صفحه توزیع نرمال در پایتون هم سر بزنی.
تفاوت توزیع دوجمله ای و توزیع پواسون
در توزیع دوجمله ای فقط دو نتیجه ممکن داریم. مثلا شیر یا خط. اما توزیع پواسون تعداد رخداد را می شمارد و می تواند تعدادهای مختلف داشته باشد.
با این حال، اگر در توزیع دوجمله ای تعداد آزمون ها خیلی زیاد باشد و احتمال p خیلی کوچک باشد، این توزیع شبیه پواسون می شود. شرط تقریبی این است که n * p تقریبا برابر lam باشد.
from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns
data = {
"binomial": random.binomial(n=1000, p=0.01, size=1000),
"poisson": random.poisson(lam=10, size=1000)
}
sns.displot(data, kind="kde")
plt.show()
در نمودار منبع می بینی دو منحنی تقریبا روی هم قرار می گیرند. برای مرور توزیع دوجمله ای می توانی از صفحه توزیع دوجمله ای در پایتون کمک بگیری.
تمرین گام به گام با توزیع پواسون در پایتون
برای تمرین، این مراحل را انجام بده و با توزیع پواسون در پایتون راحت تر شو.
- با
random.poisson(lam=3, size=20)یک آرایه بساز و خروجی را ببین. - lam را تغییر بده؛ مثلا 1، 5 و 10. ببین عددها چگونه عوض می شوند.
- خروجی را در یک نمودار با
sns.displotنمایش بده. - نتیجه را با نمودارهای توزیع نرمال و دوجمله ای مقایسه کن و برای مرور از صفحات توزیع نرمال در پایتون و توزیع دوجمله ای در پایتون کمک بگیر.
- در پایان، یک بار دیگر این صفحه توزیع پواسون در پایتون را مرور کن.
جمع بندی سریع
- توزیع پواسون در پایتون برای شمردن تعداد رخدادها استفاده می شود.
- تابع
random.poisson()در نامپای، این توزیع را تولید می کند. - lam نرخ متوسط رخداد است و size شکل آرایه خروجی را مشخص می کند.
- توزیع پواسون گسسته است، اما برای lam بزرگ شبیه توزیع نرمال می شود.
- برای n بزرگ و p کوچک در توزیع دوجمله ای، نتیجه شبیه توزیع پواسون با lam برابر n * p است.