概率计算器

古典/条件/贝叶斯

432 次访问

概率计算

结果

关于本工具

了解工具定位 · 使用场景 · 对比优势

使用场景

🎲

抽卡出货概率

手游玩家在限定卡池中,单抽概率 1.5%,保底 90 抽。用本工具计算 100 抽内至少出一张的累积概率(约 78%),对比 200 抽的期望收益,决定是否投入全部资源。输入抽数即可输出累积概率曲线,避免盲目氪金。

⚕️

体检假阳性焦虑

某罕见病发病率 0.1%,检测准确率 99%。阳性结果后,用贝叶斯模块输入先验概率和似然比,算出真实患病概率仅约 9%。帮助用户理性看待筛查结果,避免不必要的过度医疗。

📊

AB测试显著性

产品经理在 A/B 实验中,对照组转化率 5%,实验组 5.5%,样本量各 10000。用条件概率模块计算 p 值(约 0.04),判断差异是否统计显著。输入两组数据即可输出置信区间和决策建议。

🔐

密码破解时间

安全工程师评估 8 位纯数字密码(10^8 种组合)vs 8 位大小写字母+数字(62^8 种组合)的暴力破解难度。输入字符集大小和长度,工具输出枚举全部组合所需时间(假设 10 亿次/秒),直观展示密码强度差异。

🏭

质检良率预测

工厂生产线良率 95%,抽检 200 件。用古典概率模块计算至少 190 件合格的累积概率(约 99.7%)。输入良率和抽检数,输出合格件数分布图,辅助制定抽检标准。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (Wolfram|Alpha)传统方法 (手工计算)
数据隐私纯浏览器端计算,输入数据不上传服务器输入数据上传至云端服务器处理数据完全掌握在计算者手中,无网络传输
处理速度输入即出,毫秒级响应依赖网络请求和服务器负载,通常 3-10 秒依赖计算者熟练度,复杂问题需数十分钟至数小时
离线可用完全离线,断网可用必须联网完全离线
费用免费基础功能免费,高级功能需订阅 (Pro)仅需纸笔或免费计算器
使用门槛无需注册,打开即用,界面直观需访问网站,部分功能需理解 Wolfram 语法需具备概率论知识及公式记忆能力
计算验证结果可即时复现,支持参数调整对比结果可复现,但需重新提交请求结果可逐步验证,但过程繁琐易错
场景覆盖聚焦古典概型、条件概率、贝叶斯公式覆盖数学全领域,概率仅为子集,操作路径长理论上覆盖所有概率问题,但实际受限于计算者能力

使用指南

上手步骤 · 输入输出 · 避坑提示

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
P(A)=0.5, P(B)=0.2, P(A|B)=0.8P(A∩B)=0.16, P(B|A)=0.32典型场景:已知条件概率求联合概率
P(A)=0.1, P(B|A)=0.9, P(B|¬A)=0.05P(A|B)=0.1667典型场景:贝叶斯公式计算后验概率
P(A)=0, P(B)=0.5, P(A|B)=0P(A∩B)=0, P(B|A)=未定义(分母为0)边界 case:零概率事件导致条件概率无定义
P(A)=1, P(B)=0.5, P(A|B)=1P(A∩B)=0.5, P(B|A)=0.5边界 case:必然事件与任意事件的联合概率
P(A)=0.5, P(B)=0.5, P(A|B)=0.5P(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.75P(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.25P(A∩B)=0.2, P(B|A)=1易错 case:A 是 B 的子集时后验概率为 1

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 条件概率中交换了事件顺序

错误
P(下雨|多云) = 0.3 → 输入 A=下雨, B=多云
修复
条件概率 P(A|B) 表示 B 发生条件下 A 的概率。输入 A=多云, B=下雨 才得到 0.3

P(A|B) ≠ P(B|A)。竖线后的条件是已知事件,竖线前是待求事件。顺序颠倒结果完全不同。

2. 贝叶斯公式中先验概率与似然概率混淆

错误
输入 P(疾病)=0.01, P(阳性|疾病)=0.99, P(阳性)=0.02 → 直接输出 0.99
修复
贝叶斯公式:P(疾病|阳性)=P(阳性|疾病)*P(疾病)/P(阳性)=0.99*0.01/0.02=0.495

P(疾病|阳性) 是后验概率,不是 P(阳性|疾病)。贝叶斯定理需要三个输入:先验、似然、证据概率。

3. 古典概型中把有序排列当无序组合算

错误
从 5 张牌中抽 2 张,顺序重要 → 输入 C(5,2)=10
修复
有序排列用 P(5,2)=20,无序组合用 C(5,2)=10。抽牌顺序重要时用排列数。

排列(顺序重要)和组合(顺序不重要)是古典概型最常混淆的概念。工具默认按组合计算,需手动切换。

4. 概率值输入超出 [0,1] 范围

错误
输入概率 1.5 或 -0.2
修复
所有概率值必须在 0 到 1 之间,包括先验概率、条件概率、事件概率。

概率公理规定概率值 ∈ [0,1]。超出范围的计算无数学意义,工具会拒绝或报错。

5. 条件概率分母为零

错误
P(A|B) 中 B 的概率为 0,输入 P(B)=0
修复
条件概率定义要求 P(B) > 0。若 B 不可能发生,条件概率无定义。

数学上 P(A|B)=P(A∩B)/P(B),分母为零时结果无意义。工具应提示用户检查条件事件概率。

6. 贝叶斯公式中证据概率小于先验概率×似然

错误
输入 P(疾病)=0.5, P(阳性|疾病)=0.9, P(阳性)=0.2
修复
全概率公式要求 P(阳性) ≥ P(阳性|疾病)*P(疾病)=0.45。输入 0.2 会导致后验概率>1。

证据概率必须至少等于先验与似然的乘积,否则后验概率会超过 1,违反概率公理。

7. 把百分比当小数输入

错误
输入 50% 或 50 表示 50% 概率
修复
概率值用小数表示,50% 应输入 0.5。

工具按小数解析输入,50 会被当作 5000%,导致结果荒谬。百分比需手动换算为小数。

8. 贝叶斯更新时忘记更新先验

错误
第一次后验 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》。

原理图

选择概率类型古典 / 条件 / 贝叶斯输入事件参数样本空间 / 事件数本地公式计算P(A|B) = P(AB)/P(B)展示概率结果数值 + 百分比调整参数重算修改事件 / 样本数循环迭代
用户输入 本地处理 输出结果

开发者集成

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.5
package 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.5000

常见问题

8 个高频疑问

这个概率计算器怎么用?我输入了事件A和事件B,但结果看不懂。
页面提供古典、条件、贝叶斯三种概率模式。古典概率用于等可能事件(如掷骰子),输入事件总数和发生次数即可;条件概率需要先输入事件A和事件B的单独概率,再输入P(A∩B)或P(A|B)中的已知量,工具自动计算未知量;贝叶斯模式则需要先验概率、似然度和证据概率。结果区域会显示计算公式和最终数值,如果输入字段变红或提示“非法”,说明当前值超出了0-1的概率范围或格式不对。
为什么我算出来的概率和课本/考试答案对不上?
常见原因有三个:一是输入混淆了“发生次数”与“概率”——古典模式要求的是整数(如骰子点数6的次数),而条件/贝叶斯模式要求输入0到1之间的小数;二是事件间独立性假设错误,工具默认按你输入的联合概率P(A∩B)计算,如果你自己假设了独立但实际不独立,结果必然偏差;三是贝叶斯公式中的证据概率P(B)必须包含所有可能路径,如果只输入了部分路径,后验概率会偏高。建议对照题目中的已知条件逐字段核对。
计算结果保留几位小数?能不能自己设置精度?
默认保留4位小数(如0.1234),超过4位时会四舍五入。目前不支持手动设置小数位数,但你可以复制结果框中的数值到其他计算工具中自行截取。如果你需要高精度(比如科学计算),建议用专业统计软件(如R、Python的scipy),因为浏览器JavaScript浮点运算在极端案例(如极小概率0.00001%级别)可能有0.0001的舍入误差,本工具更适合日常教学和快速估算场景。
输入概率时,百分数(如30%)可以直接填进去吗?
不能直接填百分数。所有概率字段只接受0到1之间的小数(如0.3),填“30%”或“30”会提示非法。百分数需要你先手动除以100再填入。这是为了避免混淆——因为古典模式中的“事件发生次数”是整数(如30次),如果混用百分数格式会导致计算错误。建议养成习惯:概率一律用小数,次数用整数。
这个工具和手机上的概率计算App有什么区别?
核心区别有三点:一是本工具完全在浏览器本地运行,不联网、不上传数据,隐私性高于大部分需要注册的App;二是同时支持古典、条件、贝叶斯三种模式,而很多App只做简单的掷骰子/抽卡概率;三是没有广告和付费墙,输入即出结果。但App端的优势在于支持历史记录保存和复杂场景建模(如多步概率树),本工具更适合单次、快速的计算验证。
贝叶斯模式里的“先验概率”和“似然度”到底是什么意思?能举个例子吗?
先验概率是你在看到新证据之前对事件A发生的初始判断(如:人群中某疾病发病率1%)。似然度是假设事件A发生时,观察到某证据B的概率(如:患者检测阳性的概率95%)。工具会结合你输入的这两个值和证据概率P(B),自动算出后验概率(即看到证据后对A的新判断)。举个例子:先验0.01、似然0.95、证据概率0.03,后验=0.01×0.95÷0.03≈0.3167,即检测阳性后得病概率从1%上升到31.67%。
计算器提示“输入非法”或结果无限大,是什么原因?
概率值必须在0到1之间(包括0和1),如果输入负数或大于1的数,工具会直接拒绝。结果无限大(显示Infinity)通常是因为分母为0——比如条件概率中P(B)输入为0,但P(A|B)的分母就是P(B),数学上无定义。贝叶斯模式中如果证据概率P(B)=0,同样会报错。解决方法:检查所有输入是否在合法范围内,特别是分母对应的概率不能为0。如果确认输入无误,说明该条件概率在数学上不存在(不可能事件)。
这个概率计算器能算彩票中奖概率吗?比如双色球。
可以算古典概率中的组合概率,但需要你自己计算组合数。双色球一等奖(6红+1蓝)的概率是C(33,6)×C(16,1)=1/17,721,088,你可以在古典模式中输入“事件总数=17721088”、“发生次数=1”,得到概率约0.000000056。但工具不内置彩票规则库,也不支持多步骤概率链(如“前5次没中,第6次中的概率”),这些需要你手动分解成独立事件分别计算。另外,彩票每次开奖独立,历史结果不影响未来概率,工具不会帮你预测号码。
选择 打开 +新窗口 esc关闭