帮我计算​​一下有多少人会来参加我的婚礼!我可以为每个人分配一个百分比并添加它们吗?

机器算法验证 可能性
2022-02-10 18:33:30

我正在筹划我的婚礼。我想估计有多少人会来参加我的婚礼。我已经创建了一个人员列表以及他们参加的百分比。例如

Dad 100% Mom 100% Bob 50% Marc 10% Jacob 25% Joseph 30%

我有一个大约 230 人的百分比列表。我如何估计有多少人会参加我的婚礼?我可以简单地将百分比相加并除以 100 吗?例如,如果我邀请 10 个人,每个人有 10% 的机会来,我可以期待 1 个人?如果我邀请 20 人,有 50% 的机会来,我可以期待 10 人吗?

更新:140 人参加了我的婚礼 :)。使用下面描述的技术,我预测大约 150。不太寒酸!

4个回答

假设参加婚礼的受邀者的决定是独立的,那么将参加婚礼的客人数量可以建模为成功概率不一定相同的伯努利随机变量之和。这对应于泊松二项分布

是一个随机变量,对应于个受邀者中将参加您的婚礼的总人数。参与者的预期数量确实是个人“出现”概率的总和,即 鉴于概率质量函数 的形式,置信区间的推导并不简单然而,它们很容易用蒙特卡洛模拟来近似。XNpi

E(X)=i=1Npi.

下图显示了基于 10000 个模拟场景(右)使用 230 名受邀者(左)的一些虚假出现概率的婚礼参与者数量分布示例。用于运行此模拟的 R 代码如下所示;它提供了置信区间的近似值。

在此处输入图像描述

## Parameters
N      <- 230    # Number of potential guests
nb.sim <- 10000  # Number of simulations

## Create example of groups of guests with same show-up probability
set.seed(345)
tmp    <- hist(rbeta(N, 3, 2), breaks = seq(0, 1, length.out = 21))
p      <- tmp$breaks[-1]    # Group show-up probabilities
n      <- tmp$counts        # Number of person per group

## Generate number of guests by group
guest.mat <- matrix(NA, nrow = nb.sim, ncol = length(p))
for (j in 1:length(p)) {
    guest.mat[, j] <- rbinom(nb.sim, n[j], p[j])
}

## Number of guest per scenario
nb.guests <- apply(guest.mat, 1, sum)

## Result summary
par(mfrow = c(1, 2))
barplot(n, names.arg = p, xlab = "Probability group", ylab = "Group size")
hist(nb.guests, breaks = 21, probability =  TRUE, main = "", xlab = "Guests")
par(mfrow = c(1, 1))

## Theoretical mean and variance
c(sum(n * p), sum(n * p * (1-p)))
#[1] 148.8500  43.8475

## Sample mean and variance
c(mean(nb.guests), var(nb.guests))
#[1] 148.86270  43.23657

## Sample quantiles
quantile(nb.guests, probs = c(0.01, 0.05, 0.5, 0.95, 0.99))
#1%     5%    50%    95%    99% 
#133.99 138.00 149.00 160.00 164.00 

正如已经指出的那样,期望只是增加了。

但是,知道期望并没有多大用处,您还需要了解它周围的可能变化。

您需要关注以下三件事:

  • 个人预期的变化(一个有 60% 的机会来的人实际上并没有达到他们的预期;他们总是高于或低于预期)

  • 人与人之间的依赖。可能都来的夫妇倾向于要么都参加,要么都不参加。没有父母,年幼的孩子不会参加。在某些情况下,如果有人知道会有其他人在场,他们可能会避免来。

  • 概率估计的错误。这些概率只是猜测;您可能需要考虑一些不同猜测的影响(也许其他人对这些数字的评估)

第一个可以通过正态近似或通过模拟进行计算。第二种可能是在各种假设下模拟的,要么是特定于人的,要么是通过考虑一些依赖关系的分布。(第三项更难。)


编辑以解决评论中的后续问题:

如果我正确理解您的措辞,对于 4 口之家,您有 50% 的机会分别有 4 个人或没有人来。当然,这是一个预期的数字 2,但您也希望对预期周围的可变性有所了解,在这种情况下,您可能希望保持 4 的 0/50% 的 50% 的实际情况。

如果您可以将每个人分成独立的组,那么一个好的第一个近似值(有很多这样的组)将是添加独立组之间的均值和方差,然后将总和视为正常(可能带有连续性校正)。更准确的方法是模拟过程或通过数值卷积精确计算分布;虽然这两种方法都很简单,但对于这个特定的应用来说,这是一个不必要的精度水平,因为已经有很多层的近似值 - 这就像被告知一个房间的尺寸到最近的英尺,然后计算你需要多少油漆到最接近的毫升 - 额外的精度是没有意义的。

所以想象一下(为了简单起见)我们有四个组:

1) A 组(1 人) - 70% 的机会出席

2) B 组(1 人) - 60% 的机会出席

3)C组(4口之家) - 0:0.5 4:0.5(如果有人呆在家里,没有人会来)

4) D 组(两人一组)- 0: 0.4 1: 0.1 2: 0.5(即两者都有 50% 的机会,加上 10% 的机会恰好有一个会来,例如如果另一个有工作承诺或生病)

然后我们得到以下均值和方差:

      mean   variance
  A    0.7     0.21
  B    0.6     0.24
  C    2.0     4.0
  D    1.1     0.89

 Tot   4.4     5.34

因此,在这种情况下,正常的近似值将非常粗略,但表明超过 7 人的可能性很小(大约 5%),大约 75-80% 的时间会出现 6 人或更少。

[更准确的方法是模拟该过程,但对于完整的问题而不是简化的示例,这可能是不必要的,因为已经有很多近似层。]


一旦您拥有包含此类群体依赖性的组合分布,您可能希望应用任何整体联合依赖性来源(例如恶劣天气) - 或者您可能希望根据情况简单地确保甚至忽略此类可能性.

(忽略我之前对此的评论 - 我刚刚意识到我将期望与其他东西混淆了。)鉴于您实际上是在尝试找到出现人数的期望,理论上您可以添加每个人出现的概率最多这样做。

这是因为我们可以认为有人出现时取值,并且因为期望是线性算子。01

然而,这只会给你预期的价值——如果没有进一步的假设,似乎很难估计出现的人的差异,特别是因为假设出现的人 A 不一定独立于出现的人 B 是非常公平的。

除此之外,这里有一篇模糊相关的 BBC 文章。

对于大量数字,80% 是您所期望的。这可能是您建议的详细分析只会在计算中增加错误的情况。
例如,Marc 的潜在出席率真的是 Joseph 的 1/3 吗?约瑟夫真的是 30%,还是可能是 25%?当你达到比所有这些分析高 80% 的大量数字时,事情就会发生。我刚从婚礼回来。已邀请 550 人。452 人出席。为了规划大厅并开始与餐饮服务商交谈,最初估计 440 是可以的。

我可以从我的敬酒中向这对夫妇提供一条线吗?“记住,如果你的妻子快乐,但你不快乐,你仍然比你的妻子不快乐,但你快乐的情况要快乐得多。”