当前位置:   article > 正文

【概率分布】泊松分布(Poisson Distribution)

泊松分布

定义:

现实生活多数服从于泊松分布

假设你在一个呼叫中心工作,一天里你大概会接到多少个电话?它可以是任何一个数字。现在,呼叫中心一天的呼叫总数可以用泊松分布来建模。这里有一些例子:

  • 医院在一天内录制的紧急电话的数量。
  • 某个地区在一天内报告的失窃的数量。
  • 在一小时内抵达沙龙的客户人数。
  • 书中每一页打印错误的数量。 泊松分布适用于在随机时间和空间上发生事件的情况,其中,我们只关注事件发生的次数。

当以下假设有效时,则称为泊松分布

  • 任何一个成功的事件都不应该影响另一个成功的事件。
  • 在短时间内成功的概率必须等于在更长的间内成功的概率。
  • 时间间隔很小时,在给间隔时间内成功的概率趋向于零。

 泊松分布中使用了这些符号:

  • λ是事件发生的速率

  • t是时间间隔的长

  • X是该时间间隔内的事件数。

  • 其中,X称为泊松随机变量,X的概率分布称为泊松分布。

  • 令μ表示长度为t的间隔中的平均事件数。那么,µ = λ*t。

 例如说一个医院中,每个病人来看病都是随机并独立的概率,则该医院一天(或者其他特定时间段,一小时,一周等等)接纳的病人总数可以看做是一个服从poisson分布的随机变量。但是为什么可以这样处理呢? 通俗定义:假定一个事件在一段时间内随机发生,且符合以下条件:

  • (1)将该时间段无限分隔成若干个小的时间段,在这个接近于零的小时间段里,该事件发生一次的概率与这个极小时间段的长度成正比。
  • (2)在每一个极小时间段内,该事件发生两次及以上的概率恒等于零。
  • (3)该事件在不同的小时间段里,发生与否相互独立。

则该事件称为poisson process。这个第二定义就更加利于大家理解了,回到医院的例子之中,如果我们把一天分成24个小时,或者24x60分钟,或者24x3600秒。时间分的越短,这个时间段里来病人的概率就越小(比如说医院在正午12点到正午12点又一毫秒之间来病人的概率是不是很接近于零?)。 条件一符合。另外如果我们把时间分的很细很细,是不是同时来两个病人(或者两个以上的病人)就是不可能的事件?即使两个病人同时来,也总有一个人先迈步子跨进医院大门吧。条件二也符合。倒是条件三的要求比较苛刻。应用到实际例子中就是说病人们来医院的概率必须是相互独立的,如果不是,则不能看作是poisson分布。
 

已知平均每小时出生3个婴儿,请问下一个小时,会出生几个?

有可能一下子出生6个,也有可能一个都不出生。这是我们没法知道的。

泊松分布就是描述某段时间内,事件具体的发生概率。

 

 

上面就是泊松分布的公式。等号的左边,P 表示概率,N表示某种函数关系,t 表示时间,n 表示数量,1小时内出生3个婴儿的概率,就表示为 P(N(1) = 3) 。等号的右边,λ 表示事件的频率。

接下来两个小时,一个婴儿都不出生的概率是0.25%,基本不可能发生。

 

 接下来一个小时,至少出生两个婴儿的概率是80%。

 

 

  1. # IMPORTS
  2. import numpy as np
  3. import scipy.stats as stats
  4. import matplotlib.pyplot as plt
  5. import matplotlib.style as style
  6. from IPython.core.display import HTML
  7. # PLOTTING CONFIG
  8. %matplotlib inline
  9. style.use('fivethirtyeight')
  10. plt.rcParams["figure.figsize"] = (14, 7)
  11. plt.figure(dpi=100)
  12. # PDF
  13. plt.bar(x=np.arange(20),
  14. height=(stats.poisson.pmf(np.arange(20), mu=5)),
  15. width=.75,
  16. alpha=0.75
  17. )
  18. # CDF
  19. plt.plot(np.arange(20),
  20. stats.poisson.cdf(np.arange(20), mu=5),
  21. color="#fc4f30",
  22. )
  23. # LEGEND
  24. plt.text(x=8, y=.45, s="pmf (normed)", alpha=.75, weight="bold", color="#008fd5")
  25. plt.text(x=8.5, y=.9, s="cdf", alpha=.75, weight="bold", color="#fc4f30")
  26. # TICKS
  27. plt.xticks(range(21)[::2])
  28. plt.tick_params(axis = 'both', which = 'major', labelsize = 18)
  29. plt.axhline(y = 0.005, color = 'black', linewidth = 1.3, alpha = .7)
  30. # TITLE, SUBTITLE & FOOTER
  31. plt.text(x = -2.5, y = 1.25, s = "Poisson Distribution - Overview",
  32. fontsize = 26, weight = 'bold', alpha = .75)
  33. plt.text(x = -2.5, y = 1.1,
  34. s = 'Depicted below are the normed probability mass function (pmf) and the cumulative density\nfunction (cdf) of a Poisson distributed random variable $ y \sim Poi(\lambda) $, given $ \lambda = 5 $.',
  35. fontsize = 19, alpha = .85)

 改变参数λ:

  1. plt.figure(dpi=100)
  2. # PDF LAM = 1
  3. plt.scatter(np.arange(20),
  4. (stats.poisson.pmf(np.arange(20), mu=1)),#/np.max(stats.poisson.pmf(np.arange(20), mu=1))),
  5. alpha=0.75,
  6. s=100
  7. )
  8. plt.plot(np.arange(20),
  9. (stats.poisson.pmf(np.arange(20), mu=1)),#/np.max(stats.poisson.pmf(np.arange(20), mu=1))),
  10. alpha=0.75,
  11. )
  12. # PDF LAM = 5
  13. plt.scatter(np.arange(20),
  14. (stats.poisson.pmf(np.arange(20), mu=5)),
  15. alpha=0.75,
  16. s=100
  17. )
  18. plt.plot(np.arange(20),
  19. (stats.poisson.pmf(np.arange(20), mu=5)),
  20. alpha=0.75,
  21. )
  22. # PDF LAM = 10
  23. plt.scatter(np.arange(20),
  24. (stats.poisson.pmf(np.arange(20), mu=10)),
  25. alpha=0.75,
  26. s=100
  27. )
  28. plt.plot(np.arange(20),
  29. (stats.poisson.pmf(np.arange(20), mu=10)),
  30. alpha=0.75,
  31. )
  32. # LEGEND
  33. plt.text(x=3, y=.1, s="$\lambda = 1$", alpha=.75, rotation=-65, weight="bold", color="#008fd5")
  34. plt.text(x=8.25, y=.075, s="$\lambda = 5$", alpha=.75, rotation=-35, weight="bold", color="#fc4f30")
  35. plt.text(x=14.5, y=.06, s="$\lambda = 10$", alpha=.75, rotation=-20, weight="bold", color="#e5ae38")
  36. # TICKS
  37. plt.xticks(range(21)[::2])
  38. plt.tick_params(axis = 'both', which = 'major', labelsize = 18)
  39. plt.axhline(y = 0, color = 'black', linewidth = 1.3, alpha = .7)
  40. # TITLE, SUBTITLE & FOOTER
  41. plt.text(x = -2.5, y = .475, s = "Poisson Distribution - $\lambda$",
  42. fontsize = 26, weight = 'bold', alpha = .75)
  43. plt.text(x = -2.5, y = .425,
  44. s = 'Depicted below are three Poisson distributed random variables with varying $\lambda $. As one can easily\nsee the parameter $\lambda$ shifts and flattens the distribution (the smaller $ \lambda $ the sharper the function).',
  45. fontsize = 19, alpha = .85)

  构造随机分布:

  1. import numpy as np
  2. from scipy.stats import poisson
  3. # draw a single sample
  4. np.random.seed(42)
  5. print(poisson.rvs(mu=10), end="\n\n")
  6. # draw 10 samples
  7. print(poisson.rvs(mu=10, size=10), end="\n\n")
12

[ 6 11 14  7  8  9 11  8 10  7]

 画出概率密度函数

  1. from scipy.stats import poisson
  2. # additional imports for plotting purpose
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. %matplotlib inline
  6. plt.rcParams["figure.figsize"] = (14,7)
  7. # continuous pdf for the plot
  8. x_s = np.arange(15)
  9. y_s = poisson.pmf(k=x_s, mu=5)
  10. plt.scatter(x_s, y_s, s=100);

 计算累积概率密度函数的概率: 

  1. from scipy.stats import poisson
  2. # probability of x less or equal 0.3
  3. print("P(X <=3) = {}".format(poisson.cdf(k=3, mu=5)))
  4. # probability of x in [-0.2, +0.2]
  5. print("P(2 < X <= 8) = {}".format(poisson.cdf(k=8, mu=5) - poisson.cdf(k=2, mu=5)))
P(X <=3) = 0.2650259152973616
P(2 < X <= 8) = 0.8072543457950705

  绘制λ:

  1. from collections import Counter
  2. plt.figure(dpi=100)
  3. ##### COMPUTATION #####
  4. # DECLARING THE "TRUE" PARAMETERS UNDERLYING THE SAMPLE
  5. lambda_real = 7
  6. # DRAW A SAMPLE OF N=1000
  7. np.random.seed(42)
  8. sample = poisson.rvs(mu=lambda_real, size=1000)
  9. # ESTIMATE MU AND SIGMA
  10. lambda_est = np.mean(sample)
  11. print("Estimated LAMBDA: {}".format(lambda_est))
  12. ##### PLOTTING #####
  13. # SAMPLE DISTRIBUTION
  14. cnt = Counter(sample)
  15. _, values = zip(*sorted(cnt.items()))
  16. plt.bar(range(len(values)), values/np.sum(values), alpha=0.25);
  17. # TRUE CURVE
  18. plt.plot(range(18), poisson.pmf(k=range(18), mu=lambda_real), color="#fc4f30")
  19. # ESTIMATED CURVE
  20. plt.plot(range(18), poisson.pmf(k=range(18), mu=lambda_est), color="#e5ae38")
  21. # LEGEND
  22. plt.text(x=6, y=.06, s="sample", alpha=.75, weight="bold", color="#008fd5")
  23. plt.text(x=3.5, y=.14, s="true distrubtion", rotation=60, alpha=.75, weight="bold", color="#fc4f30")
  24. plt.text(x=1, y=.08, s="estimated distribution", rotation=60, alpha=.75, weight="bold", color="#e5ae38")
  25. # TICKS
  26. plt.xticks(range(17)[::2])
  27. plt.tick_params(axis = 'both', which = 'major', labelsize = 18)
  28. plt.axhline(y = 0.0009, color = 'black', linewidth = 1.3, alpha = .7)
  29. # TITLE, SUBTITLE & FOOTER
  30. plt.text(x = -2.5, y = 0.19, s = "Poisson Distribution - Parameter Estimation",
  31. fontsize = 26, weight = 'bold', alpha = .75)
  32. plt.text(x = -2.5, y = 0.17,
  33. s = 'Depicted below is the distribution of a sample (blue) drawn from a Poisson distribution with $\lambda = 7$.\nAlso the estimated distrubution with $\lambda \sim {:.3f}$ is shown (yellow).'.format(np.mean(sample)),
  34. fontsize = 19, alpha = .85)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/962153
推荐阅读
相关标签
  

闽ICP备14008679号