我应该为时间线事件中的蒙特卡洛模拟选择什么可视化?

数据挖掘 可视化 模拟 蒙特卡洛
2021-10-10 17:31:49

我不确定是否应该在 Cross Validated 或此处打开这个问题。但是由于这个问题属于一个与数据科学相关的更大的项目,所以我选择了这个。

我将展示我的工作项目的简化版本,因为原始版本太复杂且特定于领域。

假设我们有 1 小时(60 分钟)的时间线。在此期间,作业开始运行并在随机点创建用户通知。我写了一个蒙特卡罗模拟来研究这个过程。

我的主要问题:

  1. 这些通知在 60 分钟内的传播情况如何?
  2. 我们是否有部分时间线不包含通知,其余部分是否集中在特定时间?
  3. 在实现中更改随机函数,上述答案将如何受到影响?

模拟实际代码的蒙特卡洛伪代码是:

Repeat one million times
    number_of_notifications  = get_random_number_of_notifications ()
    previous_point = 0
    for i in range(0 to number_of_notifications):
        interval = get_random_interval()
        new_point = previous_point + interval
        previous_point = new_point

注意:在当前的实现中,两个或多个通知可以在同一分钟。

首先,我认为在模拟期间创建特定分钟的直方图将有助于我回答第一个问题。但后来,我意识到我可以对上半场的所有事件和下​​半场的所有事件进行一个模拟,并且直方图误导它传播得很好。

然后我认为在每个模拟中绘制间隔的最小值、最大值、平均值和标准可能会很好。但是,是否足以回答他们?

我应该尝试什么样的可视化来让我了解蒙特卡洛模拟中的通知?

1个回答

代替(或附加于)直方图,您可以检查事件之间的间隔分布的密度图。r下面的片段中,进程 id 标识为 ID,间隔长度为INT_LEN

densityplot(~INT_LEN,  groups = ID,
data =  df,    
scales=list(x=list(rot=90, cex= .9),y=list(cex=.9)),par.strip.text=list(cex=.8), plot.points = F,  
ylab="density", xlab="Interval between Events", main=paste("Interval Length Density per Process"  ) )

在此处输入图像描述

这显示了分布(在我的简单情况下,有两种不同的分布)。一组进程具有事件的正态分布,平均值为 1,2。因此,您可能会争辩说平均每分钟有 50 个事件。

但这可能不是真的,因为时间序列在这个视图中丢失了。

为了获取时间序列信息,我选择了一个基本间隔长度,其中事件的分布不再起作用。我用了一分钟,但如果这是粗略下去。关键是在间隔(分钟)开始时获取所有事件或在间隔内均匀分布没有区别。

此选择允许在间隔级别聚合数据并将其呈现为时间序列。下图显示了每分钟的事件计数。

xy <- xyplot(CNT ~ MINUTE_NO , groups = ID,   
data =  df ,    type=c("o","g"),
scales=list(rot=90, x=list( cex= .9 ),y=list(rot=0, cex=.8, alternating = c(1,1), tck=c(1,0), relation = "free")),par.strip.text=list(cex=.8), 
ylab="event count per minute", xlab="time", main=paste("Time Series - Event Count per Minute"  ) )
print (xy)

在此处输入图像描述

在这里,您可以发现事件分布的可能趋势。