首页 > 解决方案 > 绘制带有求和的概率曲线

问题描述

我有以下问题:

我正在研究一个公式来计算一些网络效应。这个想法是我有 450 个“红色用户”和 6550 个“蓝色用户”,总共有 7000 个用户。现在我想绘制“选择 x 个用户(同一用户不能被选择两次,所以这是没有替换的抽样)并计算至少 1 个用户是红色的概率”。

例如对于 x = 3,这意味着我从 7000 个随机用户中挑选 3 个并检查其中是否有“红色用户”

至少有 1 个红色用户的概率是 p = 1 - 所有 3 个选择都是蓝色用户的概率,蓝色用户的概率等于 p = 6550/7000,对吗?

导致至少 1 个红色用户的概率: * p = 1 - 6550/7000 * 6549/6999 * 6548/6998 *

因此我想出了公式:

f(x) = e^-(1- sum of (6500-i)/(7000-i)); for i = 0, till x)

我意识到曲线非常前卫,因为它只是从 ℕ 中的一个值到 ℕ 中的下一个值。尽管添加十进制数字没有多大意义,因为“选择 0,5 个用户甚至 0,01 个用户”只是愚蠢的,但我希望看到完整的图表以便能够将公式与其他公式进行比较。

有什么办法可以在python中实现吗?

此致,

科尔比

标签: pythonnumpymatplotlibprobability-theory

解决方案


您正在寻找的东西之前已经被广泛研究过,在概率论和统计学中被称为超几何分布。因此无需重新发明轮子!

我们在不同大小的样本中寻找至少一个红色用户x。这等价于1 - Pr(0 red users | sample size = x),即 1 减去它的补码。

让我们通过考虑样本量来说明这一点[1, # red users]。一些 Python 代码可以帮助你,

from scipy.stats import hypergeom
import matplotlib.pyplot as plt

red = 450
total = 7000

sample_sizes = list(range(1, red + 1))

probabilities = [1 - hypergeom(total, red, sample_size).pmf(0)
                 for sample_size in sample_sizes]

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(sample_sizes, probabilities, 'bo')

ax.set_xlabel('Users drawn (#)')
ax.set_ylabel('Probability of at least one red user')
plt.show()

产生下图,

至少一名红色用户对样本量的概率。

显然,随着样本大小的增加,绘制至少一个红色用户的概率会迅速增加——鉴于我们对超几何分布的了解,这一切都不是我们所预料的!


推荐阅读