给定每天的到达次数,模拟泊松到达时间
Simulate Poisson arrival times given count of arrivals per day
我正在尝试对具有到达时间的流程建模。我对实际到达人数进行了抽样,并且连续多天每天都有一系列到达人数。我想使用这个测量数据来制作一系列服从泊松分布的实际到达时间戳。
例如,给定:
countPerDay = [2,3,1,...]
计算:
到达时间 = [0.324, 0.547, 1.223, 1.563, 1.844, 2.618, ...]
观察第一天2个到,第二天3个,第三天1个,以此类推
我目前使用如下均匀分布来执行此操作:
arrivalTimes = []
for d,j in zip(range(len(countPerDay)), countPerDay):
l = random.sample(range(ticksPerDay), j)
arrivalTimes += [(d*ticksPerDay + v) for v in l]
如何更改此设置以使到达时间服从泊松分布而不是均匀分布?我知道指数分布旨在提供泊松到达间隔时间,但在这种情况下,我需要每天到达的确切数量,我担心它会使所有到达时间偏向于每天的开始。
直觉上,泊松到达时间与均匀到达时间有何不同/更好?
您的代码没有问题,因为随机分布的一组到达时间的后续时间将呈指数分布。为了测试,我使用了以下代码:
n = int(1e8) # Many points
event_times = n * np.random.rand(n)
event_times.sort()
event_distances = event_times[1:] - event_times[:-1]
plt.hist(event_distances, bins=100)
plt.xlim(0, 8) # To show the part with high n
event_distances.mean()
其中 returns 均值为 0.99999996740170383 和以下分布:
我正在尝试对具有到达时间的流程建模。我对实际到达人数进行了抽样,并且连续多天每天都有一系列到达人数。我想使用这个测量数据来制作一系列服从泊松分布的实际到达时间戳。
例如,给定: countPerDay = [2,3,1,...] 计算: 到达时间 = [0.324, 0.547, 1.223, 1.563, 1.844, 2.618, ...]
观察第一天2个到,第二天3个,第三天1个,以此类推
我目前使用如下均匀分布来执行此操作:
arrivalTimes = []
for d,j in zip(range(len(countPerDay)), countPerDay):
l = random.sample(range(ticksPerDay), j)
arrivalTimes += [(d*ticksPerDay + v) for v in l]
如何更改此设置以使到达时间服从泊松分布而不是均匀分布?我知道指数分布旨在提供泊松到达间隔时间,但在这种情况下,我需要每天到达的确切数量,我担心它会使所有到达时间偏向于每天的开始。
直觉上,泊松到达时间与均匀到达时间有何不同/更好?
您的代码没有问题,因为随机分布的一组到达时间的后续时间将呈指数分布。为了测试,我使用了以下代码:
n = int(1e8) # Many points
event_times = n * np.random.rand(n)
event_times.sort()
event_distances = event_times[1:] - event_times[:-1]
plt.hist(event_distances, bins=100)
plt.xlim(0, 8) # To show the part with high n
event_distances.mean()
其中 returns 均值为 0.99999996740170383 和以下分布: