概率与统计
概率论课本通常会给出事件概率,然而,生活中很难做到这一点。相反,我们在真实世界中得到的是数据,需要用这些数据去估算概率。这就是统计学的作用:利用数据,对概率做出估计。
例如:概率论中,我们会被告知公平的投掷硬币,得到正面的概率是 ,而我们想知道在 20 次抛掷硬币中得到 7 次正面的概率。
在统计学中,我们会反过来:假设你观察到 20 次抛掷硬币中,正面出现 7 次,那么在一次抛硬币中得到正面的概率是多少?在这里,我们并不知道概率是多少。也就是说 统计学是概率论的反面。
在给定数据的情况下,求出概率的任务叫做 推理(inference),它是统计学的基础。
神秘黑盒子
现在有一个神秘的黑盒子,没有任何说明。但是如果你放入一枚硬币,有时候可以吐出来两枚硬币,有时候什么也没有发生(每次只能放入一枚硬币,而且也不存在满的情况,这是高维空间盒子)。第一次投入 1 枚硬币,什么也没有发生。
这时候你很好奇,拿出一摞硬币,总共 40 个。第二次投入 1 枚硬币,吐出了 2 枚硬币。这时候,你会猜测 。
为了收集更多数据,你把剩下硬币都用完了。得到以下数据:
- 吐出硬币 14 次
- 吞掉硬币 27 次
到了这里,你可能会想将概率调整为
计算可能性的概率
为了简化问题,我们给每一个假设分配一个变量 :
直觉上,当然是 更有可能,但我们需要在数学上证明这一点。
我们用 表示获得的数据,代入二项分布,可以得到:
的概率是几乎是 的 10 倍!
我们也可以做出其它假设,例如 。
如果我们想要探索一个规律,我们可以从 0.1 到 0.9 选出一个作为概率,然后以 0.01 的单位进行递增,计算数据在每一个分布中的概率。
p = 0.1:0.01:0.9;
y = binopdf(14, 41, p);
figure(1);
plot(p, y, 'o', 'MarkerSize', 4);
xlabel('概率 p');
ylabel('P(X=14|n=41,p)');
title('二项分布似然函数 (k=14, n=41)');
首先,可能性有无数个,无论我们用多么小的增量。第二,不难发现大于 0.1 点不止 10 个。这意味着概率之和并不等于 1。
根据概率规则,如果概率之和小于 1,说明遗漏了某些假设;如果大于 1,说明我们违反了概率必须在 0 和 1 之间的规则。
这就是为什么我们想要 β 分布。
β 分布
与二项分布的离散值不同,β 分布是连续的。
我们使用概率密度函数(probability density function, PDF)来定义 β 分布:
- 代表一个事件的概率。
- 代表我们所关心的事件发生的次数。比如吐出两枚硬币;
- 代表我们关心的事件不发生的次数。在这个例子中,就是被吞掉硬币。
实验的总次数是 ,分子的结构和二项分布很像(只不过指数要减 1),分母是一个 函数(注意小写),是 从 0 到 1 的 积分,用于 归一化。
使用 β 分布绘图
我们将黑盒子的观察结果代入 β 分布并作图:
alpha = 14;
beta = 27;
x = 0:0.001:1;
y = betapdf(x, alpha, beta);
plot(x, y, 'b-', 'LineWidth', 2);
xlabel('p');
ylabel('概率');
title('Beta(14,27)的分布');
可以看到密度大部分小于 0.5。数据显示,吐出两次硬币的次数还不到向黑盒子放硬币次数的一半。
现在我们已经知道,这个黑盒子赔钱的概率比赢钱的概率大。
用积分量化连续分布
如果我们想知道黑盒子的概率小于 0.5 的概率(也就是值在 0 到 0.5 之间),那么我们可以使用积分:
使用 MATLAB,可以计算出来:
>> betacdf(0.5, 14, 27)
ans =
0.9808
当然,也可以使用积分
integral(@(t) betapdf(t, 14, 27), 0, 0.5)
也就是说,基于目前的数据,从黑盒子中得到两枚硬币的真实概率小于 0.5 的概率达到 0.98。这意味着很可能会输钱。
逆向解构抽卡游戏
在现实生活中,我们几乎不可能知道事件的真实概率。这就是为什么 β 分布是我们理解数据最强大的工具之一。
假设在《星穹铁道》中,这一次我们想要抽白厄。我们花了一大笔钱,抽了 1200 次,只抽到 5 次白厄。
我们有一个朋友正考虑玩这个游戏,但只有抽到白厄的机会大于 0.005 的概率超过 0.7 的时候,他才会氪金去玩这个游戏。
在我们的数据下,可以表示成 ,使用 MATLAB 绘制出分布:
alpha = 5;
beta = 1195;
x = 0:0.0001:0.01;
y = betapdf(x, alpha, beta);
plot(x, y, 'b-', 'LineWidth', 2);
xlabel('p');
ylabel('概率');
title('抽取白厄的概率分布:Beta(5,1195)的分布');
那么多大概率大于 0.005 呢?
>> 1 - betacdf(0.005, 5, 1195)
ans =
0.2851
朋友说,只有大于 0.7 才去抽卡。因此,不应该去抽卡。
完整的 β 分布公式
其中 也就是伽马函数。