概率计算
结果
古典/条件/贝叶斯
结果
了解工具定位 · 使用场景 · 对比优势
手游玩家在限定卡池中,单抽概率 1.5%,保底 90 抽。用本工具计算 100 抽内至少出一张的累积概率(约 78%),对比 200 抽的期望收益,决定是否投入全部资源。输入抽数即可输出累积概率曲线,避免盲目氪金。
某罕见病发病率 0.1%,检测准确率 99%。阳性结果后,用贝叶斯模块输入先验概率和似然比,算出真实患病概率仅约 9%。帮助用户理性看待筛查结果,避免不必要的过度医疗。
产品经理在 A/B 实验中,对照组转化率 5%,实验组 5.5%,样本量各 10000。用条件概率模块计算 p 值(约 0.04),判断差异是否统计显著。输入两组数据即可输出置信区间和决策建议。
安全工程师评估 8 位纯数字密码(10^8 种组合)vs 8 位大小写字母+数字(62^8 种组合)的暴力破解难度。输入字符集大小和长度,工具输出枚举全部组合所需时间(假设 10 亿次/秒),直观展示密码强度差异。
工厂生产线良率 95%,抽检 200 件。用古典概率模块计算至少 190 件合格的累积概率(约 99.7%)。输入良率和抽检数,输出合格件数分布图,辅助制定抽检标准。
| 维度 | 本工具 | 竞品 A (Wolfram|Alpha) | 传统方法 (手工计算) |
|---|---|---|---|
| 数据隐私 | 纯浏览器端计算,输入数据不上传服务器 | 输入数据上传至云端服务器处理 | 数据完全掌握在计算者手中,无网络传输 |
| 处理速度 | 输入即出,毫秒级响应 | 依赖网络请求和服务器负载,通常 3-10 秒 | 依赖计算者熟练度,复杂问题需数十分钟至数小时 |
| 离线可用 | 完全离线,断网可用 | 必须联网 | 完全离线 |
| 费用 | 免费 | 基础功能免费,高级功能需订阅 (Pro) | 仅需纸笔或免费计算器 |
| 使用门槛 | 无需注册,打开即用,界面直观 | 需访问网站,部分功能需理解 Wolfram 语法 | 需具备概率论知识及公式记忆能力 |
| 计算验证 | 结果可即时复现,支持参数调整对比 | 结果可复现,但需重新提交请求 | 结果可逐步验证,但过程繁琐易错 |
| 场景覆盖 | 聚焦古典概型、条件概率、贝叶斯公式 | 覆盖数学全领域,概率仅为子集,操作路径长 | 理论上覆盖所有概率问题,但实际受限于计算者能力 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| P(A)=0.5, P(B)=0.2, P(A|B)=0.8 | P(A∩B)=0.16, P(B|A)=0.32 | 典型场景:已知条件概率求联合概率 |
| P(A)=0.1, P(B|A)=0.9, P(B|¬A)=0.05 | P(A|B)=0.1667 | 典型场景:贝叶斯公式计算后验概率 |
| P(A)=0, P(B)=0.5, P(A|B)=0 | P(A∩B)=0, P(B|A)=未定义(分母为0) | 边界 case:零概率事件导致条件概率无定义 |
| P(A)=1, P(B)=0.5, P(A|B)=1 | P(A∩B)=0.5, P(B|A)=0.5 | 边界 case:必然事件与任意事件的联合概率 |
| P(A)=0.5, P(B)=0.5, P(A|B)=0.5 | P(A∩B)=0.25, P(B|A)=0.5 | 边界 case:独立事件(P(A|B)=P(A)) |
| P(A)=0.3, P(B)=0.4, P(A|B)=0.75 | P(A∩B)=0.3, P(B|A)=1 | 易错 case:P(A∩B) 等于 P(A) 时 B 包含 A |
| P(A)=0.2, P(B)=0.8, P(A|B)=0.25 | P(A∩B)=0.2, P(B|A)=1 | 易错 case:A 是 B 的子集时后验概率为 1 |
P(下雨|多云) = 0.3 → 输入 A=下雨, B=多云条件概率 P(A|B) 表示 B 发生条件下 A 的概率。输入 A=多云, B=下雨 才得到 0.3P(A|B) ≠ P(B|A)。竖线后的条件是已知事件,竖线前是待求事件。顺序颠倒结果完全不同。
输入 P(疾病)=0.01, P(阳性|疾病)=0.99, P(阳性)=0.02 → 直接输出 0.99贝叶斯公式:P(疾病|阳性)=P(阳性|疾病)*P(疾病)/P(阳性)=0.99*0.01/0.02=0.495P(疾病|阳性) 是后验概率,不是 P(阳性|疾病)。贝叶斯定理需要三个输入:先验、似然、证据概率。
从 5 张牌中抽 2 张,顺序重要 → 输入 C(5,2)=10有序排列用 P(5,2)=20,无序组合用 C(5,2)=10。抽牌顺序重要时用排列数。排列(顺序重要)和组合(顺序不重要)是古典概型最常混淆的概念。工具默认按组合计算,需手动切换。
输入概率 1.5 或 -0.2所有概率值必须在 0 到 1 之间,包括先验概率、条件概率、事件概率。概率公理规定概率值 ∈ [0,1]。超出范围的计算无数学意义,工具会拒绝或报错。
P(A|B) 中 B 的概率为 0,输入 P(B)=0条件概率定义要求 P(B) > 0。若 B 不可能发生,条件概率无定义。数学上 P(A|B)=P(A∩B)/P(B),分母为零时结果无意义。工具应提示用户检查条件事件概率。
输入 P(疾病)=0.5, P(阳性|疾病)=0.9, P(阳性)=0.2全概率公式要求 P(阳性) ≥ P(阳性|疾病)*P(疾病)=0.45。输入 0.2 会导致后验概率>1。证据概率必须至少等于先验与似然的乘积,否则后验概率会超过 1,违反概率公理。
输入 50% 或 50 表示 50% 概率概率值用小数表示,50% 应输入 0.5。工具按小数解析输入,50 会被当作 5000%,导致结果荒谬。百分比需手动换算为小数。
第一次后验 P(疾病|阳性)=0.495,第二次直接再用 P(疾病)=0.01第二次计算应将先验更新为第一次的后验 0.495,再输入新的似然和证据。贝叶斯更新是迭代过程:后验概率成为下一次计算的先验。不更新先验等于丢弃已有信息。
公式推导 · 流程图解 · 依据出处
P(A|B) = P(B|A) × P(A) / P(B)
P(A|B) — 事件 B 发生后 A 的条件概率P(B|A) — 事件 A 发生时 B 的条件概率P(A) — 事件 A 的先验概率P(B) — 事件 B 的边缘概率某疾病在人群中患病率 P(A)=0.01(1%)。检测灵敏度 P(B|A)=0.99(患病者 99% 阳性),假阳性率 5%(健康人 5% 阳性)。则 P(B)=0.01×0.99 + 0.99×0.05=0.0594。代入贝叶斯公式:P(A|B)=0.99×0.01/0.0594≈0.1667。即检测阳性者实际患病概率约 16.7%,而非 99%。
适用于事件 A、B 有明确先验概率且互斥完备的情况。不适用于事件间存在因果混淆或先验概率未知的场景。公式源自 1763 年 Bayes 论文《An Essay towards solving a Problem in the Doctrine of Chances》。
3 种主流语言 · 复制即用
import itertools
from fractions import Fraction
# 古典概率:从 n 个球中不放回抽 k 个,求某特定组合的概率
n, k = 10, 3 # 10 个球中抽 3 个
total = len(list(itertools.combinations(range(n), k)))
favorable = 1 # 只有一种特定组合
print(f"古典概率: {Fraction(favorable, total)}") # 1/120 ≈ 0.00833
# 条件概率:P(A|B) = P(A∩B) / P(B)
p_a_and_b = Fraction(1, 10) # 假设已知
p_b = Fraction(1, 4)
p_a_given_b = p_a_and_b / p_b
print(f"条件概率 P(A|B): {p_a_given_b}") # 2/5
# 贝叶斯定理:P(H|E) = P(E|H) * P(H) / P(E)
p_h = Fraction(1, 100) # 先验概率 1%
p_e_given_h = Fraction(99, 100) # 灵敏度 99%
p_e_given_not_h = Fraction(1, 100) # 假阳性率 1%
p_e = p_e_given_h * p_h + p_e_given_not_h * (1 - p_h)
p_h_given_e = p_e_given_h * p_h / p_e
print(f"贝叶斯后验概率: {float(p_h_given_e):.4f}") # 约 0.5package main
import (
"fmt"
"math/big"
)
// 贝叶斯概率计算(使用有理数避免浮点误差)
func bayes(prior, likelihood, falsePositive *big.Rat) *big.Rat {
// P(E) = P(E|H)*P(H) + P(E|¬H)*P(¬H)
one := new(big.Rat).SetInt64(1)
notPrior := new(big.Rat).Sub(one, prior)
pE := new(big.Rat).Add(
new(big.Rat).Mul(likelihood, prior),
new(big.Rat).Mul(falsePositive, notPrior),
)
// P(H|E) = P(E|H)*P(H) / P(E)
posterior := new(big.Rat).Quo(
new(big.Rat).Mul(likelihood, prior),
pE,
)
return posterior
}
func main() {
// 疾病检测:先验 1%,灵敏度 99%,假阳性 1%
prior := new(big.Rat).SetFrac64(1, 100)
likelihood := new(big.Rat).SetFrac64(99, 100)
falsePositive := new(big.Rat).SetFrac64(1, 100)
posterior := bayes(prior, likelihood, falsePositive)
fmt.Printf("后验概率: %s ≈ %.4f\n", posterior.RatString(), float64(posterior.Num().Int64())/float64(posterior.Denom().Int64()))
// 输出: 后验概率: 1/2 ≈ 0.5000
}// 古典概率:从 52 张牌中抽到特定牌的概率
function classicalProbability(total, favorable) {
if (favorable > total) throw new Error('favorable 不能大于 total');
return favorable / total;
}
console.log(classicalProbability(52, 4)); // 0.0769(抽到 A 的概率)
// 条件概率:P(A|B) = P(A∩B) / P(B)
function conditionalProbability(pIntersection, pB) {
if (pB === 0) throw new Error('P(B) 不能为 0');
return pIntersection / pB;
}
console.log(conditionalProbability(0.1, 0.25)); // 0.4
// 贝叶斯定理:P(H|E) = P(E|H) * P(H) / P(E)
function bayesTheorem(prior, likelihood, falsePositive) {
const pE = likelihood * prior + falsePositive * (1 - prior);
return (likelihood * prior) / pE;
}
// 疾病检测例子
const posterior = bayesTheorem(0.01, 0.99, 0.01);
console.log(posterior.toFixed(4)); // 0.50008 个高频疑问