为什么会发明Exponential分布,什么时候会用到Exponential分布?指数分布其实来源于Poisson分布,它在Poisson分布同样的假设前提下,讨论了距离下一个事件发生还有多久时间的概率分布。
- 距离下一个新生儿出生还有多久时间.
- 距离下一次用户购买还需要等多久。
- 距离下一辆公交车到还需要等待多少时间。
指数分布的公式:
这里的参数和Poisson分布中的完全一致,表示一个事件在单位时间里面发生的速率。例如每天我们的商店有300个人到访,全国每月有4000次交通事故等等。现在通常还用decay parameter或者decay rate来描述指数分布的参数,其实对应的就是
的倒数,表示每多久会发生一次事件。例如商店每1/300天就有一个人到访,全国每1/4000个月就有一次交通事故等。
【推导指数分布】
可以从Poisson分布来推导出指数分布。下一个事件发生时候需要等多久换句话说就是在等待的时间里面,事件没有发生过一次,也就是Poisson(X=0).

因为Poisson分布描述的是在单位时间里面,时间发生K次的概率。如果我们想知道知道在一段时间里面没有任何事情发生的概率分布,在每个事件都相互独立的假设前提下,可以相乘多个Poisson(X=0)的分布。
P(在t个单位时间内没有任何事情发生的概率)= P(X=0 在第一个时间单位内) * P(X=0 在第二个时间单位内) * … * P (X=0 在t个时间单元内) = e^−λ * e^−λ * … * e^−λ = e^(-λt)
这样我们就得出了CDF分布1-e^(-λt),那么PDF可以通过求导获得:

【特别性质】
P(T > a + b | T > a) = P(T > b)


举例说明这个性质,如果一个设备已经使用9年没有出现问题,那么上述性质说明接下来三年不发生问题的概率和一个新机器在接下来三年不发生问题的概率一致。这个显然是不符合直觉的,肯定一个新机器更加不容易发生问题。为了模拟这种情况,我们可以利用Weibull分布。
这也说明先后的事情应该是相互独立的,比如说模拟车祸或者是中奖,之前有没有发生过车祸其实是完全不会影响之后车祸发生概率的,这也是为什么通常叫作危险系数(hazard rate)。
【实际应用】
那么在哪些情况下面可以适合用指数分布来解决问题。
a) 等待时间模拟
- 公共汽车平均每十五分钟来一次(单位时间里面进站的公共汽车满足泊松分布),如果我来的时候一个汽车刚刚开走,那么下一辆车10分钟之内到站的概率有多少?
- 90%的概率下面,需要等多长时间到下一辆车进站。
b)可靠性问题
- 设备重启的平均时间大概为8000小时,如果没有备用机器的情况下,我有多少的概率能够让设备运转10000小时。
【附录】


import random import operator as op from functools import reduce import numpy as np import matplotlib.pyplot as plt import seaborn as sns sns.set_style("whitegrid") custom_params = {"axes.spines.right": False, "axes.spines.top": False} sns.set_theme(style="ticks", rc=custom_params) #################### # 指数分布 import math def exponential(x, lbd): y = [] for k in x: res = lbd * np.exp(-lbd*k) y.append(res) return y def exponentialcdf(x, lbd): y = [] for k in x: res = 1 - np.exp(-lbd*k) y.append(res) return y plt.figure(dpi=150) k = [0.5, 1, 1.5] for lbd in k: x = np.arange(0, 4*k[-1], 0.1) y = exponential(x, lbd) plt.plot(x, y, label=f'\lambda={lbd}') plt.legend() plt.ylabel('Probability Density') plt.xlabel('Time Periods') plt.show() plt.figure(dpi=150) k = [0.5, 1, 1.5] for lbd in k: x = np.arange(0, 4*k[-1], 0.1) y = exponentialcdf(x, lbd) plt.plot(x, y, label=f'\lambda={lbd}') plt.legend() plt.ylabel('Probability') plt.xlabel('Time Periods') plt.show()