🎲 概率分布

从零开始的数据分析之旅

📖 概率分布:理解数据的生成机制

数据不是随机出现的——它背后有生成机制。概率分布就是描述这种机制的数学工具。考试成绩服从正态分布,网站访问量服从泊松分布,硬币正反面服从二项分布。理解分布,你就能从样本推断总体,预测未来,量化不确定性。

概率分布分类: 离散分布 连续分布 ──────── ──────── 伯努利 Bernoulli(p) 正态 Normal(μ,σ²) ← 最重要的分布 二项 Binomial(n,p) 均匀 Uniform(a,b) 泊松 Poisson(λ) 指数 Exp(λ) 几何 Geometric(p) 伽马 Gamma(α,β) 超几何 Hypergeometric 卡方 Chi-square(ν) 负二项 NegBinomial(r,p) t分布 t(ν) F分布 F(ν1,ν2) 核心定理: ──────── 大数定律: 样本均值 → 总体均值 (n→∞) 中心极限定理: 样本均值 → 正态分布 (n→∞, 无论总体分布)

1. 正态分布

from scipy import stats
import numpy as np

# 正态分布 N(0,1) — 标准正态
print(f"PDF(x=0): {stats.norm.pdf(0):.4f}")      # 0.3989
print(f"CDF(x=0): {stats.norm.cdf(0):.4f}")      # 0.5000

# 95%置信区间
print(f"P(-1.96

🎲 二项分布与泊松分布

二项分布 B(n, p)

n次独立实验中成功k次的概率:

P(X=k) = C(n,k) · p^k · (1-p)^(n-k)   |   E[X] = np   |   Var[X] = np(1-p)
# 10次实验,每次成功概率0.3
n, p = 10, 0.3
print(f"P(X=3) = {stats.binom.pmf(3, n, p):.4f}")  # 0.2668
print(f"E[X] = {n*p}, Var[X] = {n*p*(1-p)}")       # 3.0, 2.1

泊松分布 Poisson(λ)

单位时间内稀有事件发生k次的概率:

P(X=k) = λ^k · e^(-λ) / k!   |   E[X] = λ   |   Var[X] = λ
lam = 3  # 平均每小时3次
print(f"P(X=3) = {stats.poisson.pmf(3, lam):.4f}")  # 0.2240

🔬 大数定律与中心极限定理

大数定律验证

np.random.seed(42)
for size in [100, 1000, 10000, 100000]:
    samples = np.random.binomial(10, 0.3, size)
    print(f"n={size:>6d}: 均值={samples.mean():.4f} (理论3.0)")
# n=   100: 均值=2.8200
# n= 10000: 均值=2.9802
# n=100000: 均值=2.9999  → 收敛到理论值!

中心极限定理验证

# 均匀分布 → 样本均值服从正态分布
uniform_samples = np.random.uniform(0, 1, (10000, 30))
means = uniform_samples.mean(axis=1)
print(f"均值={means.mean():.4f}(理论0.5), 标准差={means.std():.4f}(理论0.0527)")
# 均值=0.5005, 标准差=0.0527 → 完美匹配!

🎲 蒙特卡洛模拟

import numpy as np
np.random.seed(42)

# 1. 估计pi值
n = 100000
x = np.random.uniform(-1, 1, n)
y = np.random.uniform(-1, 1, n)
inside = (x**2 + y**2) <= 1
pi_est = 4 * inside.mean()
print(f"pi估计: {pi_est:.4f}")

# 2. 蒙特卡洛积分
samples = np.random.uniform(0, 1, 100000)
integral = np.mean(samples**2)
print(f"积分: {integral:.4f} (理论0.3333)")

# 3. 投资组合模拟
returns = np.random.normal(0.08/252, 0.15/np.sqrt(252), (10000,252))
portfolio = 10000 * np.cumprod(1+returns, axis=1)
print(f"VaR(5%): {np.percentile(portfolio[:,-1],5):.0f}")

📊 分布拟合与检验

from scipy import stats

# 正态性检验
stat, p = stats.shapiro(data[:50])  # Shapiro-Wilk
stat, p = stats.kstest(data, 'norm', 
                        args=(data.mean(), data.std()))  # K-S

# 拟合分布参数
loc, scale = stats.norm.fit(data)
print(f"拟合: mu={loc:.2f}, sigma={scale:.2f}")
Shapiro-Wilk适合小样本(n<50),K-S适合大样本。QQ图是直观判断正态性的最佳工具。

💻 完整实战代码

#!/usr/bin/env python3
# 概率分布 — 完整实战

import numpy as np
from scipy import stats

# ============ 正态分布 ============
mu, sigma = 0, 1
print(f"正态 N(0,1): PDF(x=0)={stats.norm.pdf(0):.4f}, CDF(x=0)={stats.norm.cdf(0):.4f}")
print(f"P(-1.966d}: 均值={samples.mean():.4f} (理论3.0)")

# ============ 中心极限定理 ============
uniform_samples = np.random.uniform(0, 1, (10000, 30))
means = uniform_samples.mean(axis=1)
print(f"\nCLT验证: 均值={means.mean():.4f}(理论0.5), 标准差={means.std():.4f}(理论{1/np.sqrt(12*30):.4f})")

# ============ 指数分布 ============
exp_samples = np.random.exponential(2, 10000)
print(f"\n指数 Exp(2): 均值={exp_samples.mean():.3f}(理论2.0), 标准差={exp_samples.std():.3f}(理论2.0)")

print("\n✅ Python验证通过 — 正态/泊松/二项分布模拟")
🏆 成就解锁:概率分布模拟验证通过
大数定律:样本均值随n增大收敛到理论值。
中心极限定理:均匀分布的样本均值服从正态分布,标准差与理论值完美匹配。

📐 2024-2025 概率分布前沿

  • 重尾分布:幂律分布、Pareto分布,描述极端事件
  • 混合模型:GMM(高斯混合模型),多峰分布建模
  • 贝叶斯推断:先验+似然→后验,分布更新
  • 生成模型:GAN/VAE学习数据的隐式分布
  • 不确定性量化:Conformal Prediction,分布无关的置信区间
🏆 成就解锁:正态/泊松/二项分布模拟
Python验证通过 — 正态95%区间=0.9500完美,二项B(10,0.3)的P(X=3)=0.2668,泊松P(3|λ=3)=0.2240。大数定律:n=100000时均值=2.9999。CLT验证:均匀→正态,std=0.0527匹配理论0.0527。
思考题:
① 二项分布和泊松分布的关系是什么?
② 中心极限定理为什么重要?
③ 什么是稀有事件?泊松分布的适用条件?
④ 如何判断数据服从哪种分布?

📝 课后练习

  1. 用蒙特卡洛方法估计圆周率π
  2. 模拟赌徒破产问题(随机游走)
  3. 实现中心极限定理的交互式可视化
  4. 用最大似然估计拟合分布参数
  5. 模拟生日悖论并验证理论概率
📚 参考资料:
• Probability and Statistics (DeGroot & Schervish)
• Think Stats (Allen B. Downey)
• Scipy Stats: scipy.org/scipy/stats
• Khan Academy: 概率与统计

🗺️ 概率分布选择指南

概率分布选择决策树: 数据类型? ├ 离散 │ ├ 两种结果(0/1) → 伯努利 Bernoulli(p) │ ├ n次实验成功次数 → 二项 Binomial(n,p) │ ├ 稀有事件计数 → 泊松 Poisson(λ) │ ├ 首次成功次数 → 几何 Geometric(p) │ └ 有/无放回抽样 → 超几何 Hypergeometric └ 连续 ├ 自然现象/中心极限 → 正态 Normal(μ,σ²) ├ 等概率区间 → 均匀 Uniform(a,b) ├ 等待时间 → 指数 Exp(λ) ├ 正态平方和 → 卡方 Chi²(ν) ├ 小样本均值 → t分布 t(ν) └ 方差比 → F分布 F(ν₁,ν₂) 经验法则: ──────── • 计数数据 → 泊松或负二项 • 比例数据 → 二项或贝塔 • 等待时间 → 指数或韦布尔 • 对称连续 → 正态或逻辑斯谛 • 右偏连续 → 对数正态或伽马

分布参数速查

分布参数均值方差scipy
正态μ, σμσ²stats.norm
二项n, pnpnp(1-p)stats.binom
泊松λλλstats.poisson
指数λ1/λ1/λ²stats.expon
均匀a, b(a+b)/2(b-a)²/12stats.uniform
卡方ννstats.chi2

🔑 本课关键要点

概率分布核心5条:
① 正态分布是统计学的基石——中心极限定理保证了它的普遍性
② 二项分布=多次伯努利,泊松分布=稀有事件计数
③ 大数定律:样本量越大,样本均值越接近总体均值
④ 中心极限定理:无论总体分布如何,样本均值趋向正态
⑤ 蒙特卡洛模拟是概率论最强大的应用——用随机采样估计复杂问题
# 概率分布速查
from scipy import stats

# 正态分布
stats.norm.pdf(x, mu, sigma)   # PDF
stats.norm.cdf(x, mu, sigma)   # CDF
stats.norm.ppf(0.95, mu, sigma) # 分位数

# 二项分布
stats.binom.pmf(k, n, p)       # PMF
stats.binom.cdf(k, n, p)       # CDF

# 泊松分布
stats.poisson.pmf(k, lam)      # PMF

# 拟合检验
stats.shapiro(data)             # 正态性
stats.kstest(data, 'norm')      # K-S检验
stats.norm.fit(data)            # 参数估计
概率分布实战建议:①先画直方图+KDE判断分布形态 ②用Q-Q图检验正态性 ③多分布拟合比较选最佳 ④蒙特卡洛模拟验证理论结果 ⑤贝叶斯方法更新分布参数。
概率分布常见错误:①把样本统计量当总体参数 ②忽略中心极限定理的条件(n≥30) ③混淆PDF和PMF(连续vs离散) ④泊松近似二项时λ=np不能太大 ⑤假设正态分布但不检验。
概率分布常见错误:①把样本统计量当总体参数使用 ②忽略中心极限定理的样本量条件(n≥30) ③混淆PDF和PMF(连续用PDF/离散用PMF) ④泊松近似二项时要求np和n(1-p)都≥5 ⑤假设数据正态但不做检验 ⑥忽略数据的支撑集(如收入不可能为负)。