3.3 联合概率¶
上一节里,小率学会了把“可能发生什么”放进样本空间里。可现实问题很少只问一件事。
天气预报里,我们不只关心“今天下雨吗”,还会关心“今天下雨并且我还出门跑步了吗”;抽卡游戏里,我们不只关心“抽到稀有卡吗”,还会关心“抽到稀有卡并且它正好是想要的角色吗”;数据分析里,我们也常常不只看“用户点击了吗”,还要看“用户点击并且下单了吗”。
均哥把小率过去 100 天的天气记录拿出来:“今天我们先不急着问‘在某种天气下跑步的概率’,只问一个更朴素的问题:两件事同时发生,占全部记录的多少?”
这就是 联合概率(Joint Probability)。
3.3.1 “且”表示同时满足¶
先看这张 100 天记录表:
| 天气 | 该天气天数 | 其中跑步天数 | 同时发生的说法 |
|---|---|---|---|
| 下雨 | 20 天 | 4 天 | 下雨且跑步 |
| 刮风 | 30 天 | 27 天 | 刮风且跑步 |
| 晴天 | 50 天 | 30 天 | 晴天且跑步 |
这里的“且”,意思是两个条件都要满足。
比如“下雨且跑步”,不是所有下雨天,也不是所有跑步天,而是两者的交集:既下雨,又跑步。
在全部 100 天里:
3.3.2 用交集写联合概率¶
如果用事件表示:
- \(A\):今天下雨。
- \(B\):今天跑步。
那么“下雨且跑步”可以写成:
读作“\(A\) 和 \(B\) 的交集”,也就是两个事件同时发生。
联合概率就是:
有些书也会写成:
它们表达的是同一件事:\(A\) 和 \(B\) 同时发生的概率。
看到“并且”“同时”“既……又……”
题目里出现“并且”“同时”“既……又……”,通常就要想到交集 \(A\cap B\),也就是联合概率。
3.3.3 联合概率不是条件概率¶
小率很快问了一个容易混淆的问题:
“下雨且跑步是 \(4/100\)。那下雨时跑步是不是也是 \(4/100\)?”
均哥摇摇头:“不一样。你刚刚偷偷换了分母。”
| 问法 | 分母 | 计算 |
|---|---|---|
| 下雨且跑步的概率 | 全部 100 天 | \(4/100=0.04\) |
| 下雨时跑步的概率 | 下雨的 20 天 | \(4/20=0.20\) |
前者是联合概率:
后者是下一节要讲的条件概率:
两者都在数同一批“下雨且跑步”的格子,但分母不同,所以含义不同。
3.3.4 联合概率也可以由两步相乘得到¶
如果我们已经知道:
- 下雨的概率是 \(P(\text{下雨})=0.20\)。
- 下雨时跑步的概率是 \(P(\text{跑步}\mid\text{下雨})=0.20\)。
那么“下雨且跑步”的概率也可以写成两步:
一般地:
也可以换个顺序:
这两个式子说的是同一件事,只是走路的方向不同:
- 先发生 \(A\),再在 \(A\) 的范围里看 \(B\)。
- 先发生 \(B\),再在 \(B\) 的范围里看 \(A\)。
到这里,联合概率就接上了后面的两节:条件概率会解释“竖线右边为什么会改变分母”,全概率公式会把很多条联合路径加起来,而贝叶斯定理会在最后反过来问“看到结果以后,哪条路径最可能”。
3.3.5 用 Python 数联合概率¶
import pandas as pd
data = pd.DataFrame({
"天气": ["下雨", "刮风", "晴天"],
"天气天数": [20, 30, 50],
"跑步天数": [4, 27, 30],
})
total_days = data["天气天数"].sum()
data["联合概率"] = data["跑步天数"] / total_days
print(data)
输出中的“联合概率”就是:
| 天气 | 联合概率 |
|---|---|
| 下雨且跑步 | \(0.04\) |
| 刮风且跑步 | \(0.27\) |
| 晴天且跑步 | \(0.30\) |
联合概率的第一要点很简单:不要只看事件名,要先问分母是谁。
