Beta分布Python 3.12实战:5种参数组合可视化与期望/方差计算
Beta分布是概率论中一种定义在(0,1)区间的连续概率分布,在贝叶斯统计、机器学习等领域有广泛应用。本文将使用Python 3.12结合SciPy和Matplotlib库,通过5种典型参数组合的可视化分析,深入理解Beta分布的特性。
1. 环境准备与基础概念
在开始之前,我们需要确保Python环境已安装必要的科学计算库。Beta分布由两个形状参数α和β决定,其概率密度函数(PDF)为:
from scipy.stats import beta import matplotlib.pyplot as plt import numpy as np # 设置绘图样式 plt.style.use('seaborn') plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题Beta分布的数学定义如下:
$$ f(x; \alpha, \beta) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)} $$
其中$B(\alpha, \beta)$是Beta函数,与Gamma函数的关系为:
$$ B(\alpha, \beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)} $$
Beta分布的关键统计量:
| 统计量 | 计算公式 |
|---|---|
| 期望 | $\frac{\alpha}{\alpha+\beta}$ |
| 方差 | $\frac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}$ |
| 众数 | $\frac{\alpha-1}{\alpha+\beta-2}$ (当α,β>1时) |
2. 5种典型参数组合的可视化分析
我们选择以下5组具有代表性的(α,β)参数组合进行对比分析:
- (2,5): 左偏分布
- (5,2): 右偏分布
- (1,1): 均匀分布
- (0.5,0.5): U型分布
- (2,2): 对称钟型分布
# 定义参数组合 params = [(2,5), (5,2), (1,1), (0.5,0.5), (2,2)] colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'] # 创建画布 plt.figure(figsize=(12, 8)) x = np.linspace(0, 1, 1000) # 绘制PDF曲线 for (a, b), color in zip(params, colors): y = beta.pdf(x, a, b) plt.plot(x, y, label=f'α={a}, β={b}', color=color, linewidth=2.5) plt.title('Beta分布概率密度函数(PDF)对比', fontsize=16) plt.xlabel('x', fontsize=14) plt.ylabel('概率密度', fontsize=14) plt.legend(fontsize=12) plt.grid(True, alpha=0.3) plt.show()每种参数组合呈现不同的分布形态:
- (2,5)组合:峰值偏左,表示随机变量倾向于取较小值
- (5,2)组合:峰值偏右,与(2,5)呈镜像关系
- (1,1)组合:退化为均匀分布,所有值概率相等
- (0.5,0.5)组合:U型分布,两端概率高而中间低
- (2,2)组合:对称钟型分布,中心在0.5处
3. 累积分布函数(CDF)与分位数
累积分布函数反映了概率的累加过程,对于理解Beta分布的性质非常重要。
plt.figure(figsize=(12, 8)) # 绘制CDF曲线 for (a, b), color in zip(params, colors): y = beta.cdf(x, a, b) plt.plot(x, y, label=f'α={a}, β={b}', color=color, linewidth=2.5) plt.title('Beta分布累积分布函数(CDF)对比', fontsize=16) plt.xlabel('x', fontsize=14) plt.ylabel('累积概率', fontsize=14) plt.legend(fontsize=12) plt.grid(True, alpha=0.3) plt.show()关键观察点:
- 所有CDF曲线从0开始,在1处达到1
- (2,5)的CDF上升最快,表明大部分概率质量集中在左侧
- (0.5,0.5)的CDF呈S型,中部变化缓慢而两端变化快
计算各分布的中位数和95%置信区间:
# 计算统计量 stats = [] for a, b in params: median = beta.ppf(0.5, a, b) lower = beta.ppf(0.025, a, b) upper = beta.ppf(0.975, a, b) stats.append([f'α={a},β={b}', median, lower, upper]) # 显示结果表格 import pandas as pd df = pd.DataFrame(stats, columns=['参数', '中位数', '2.5%分位数', '97.5%分位数']) print(df.to_markdown(index=False))4. 期望、方差与众数计算
实现一个函数计算Beta分布的关键统计量:
def beta_stats(a, b): """计算Beta分布的期望、方差和众数""" mean = a / (a + b) var = (a * b) / ((a + b)**2 * (a + b + 1)) if a > 1 and b > 1: mode = (a - 1) / (a + b - 2) else: mode = None # 众数不存在的情况 return mean, var, mode # 计算各参数组合的统计量 stats = [] for a, b in params: mean, var, mode = beta_stats(a, b) stats.append([f'α={a},β={b}', mean, var, mode]) # 创建统计量表格 stats_df = pd.DataFrame(stats, columns=['参数', '期望', '方差', '众数']) print(stats_df.to_markdown(index=False))统计量对比分析:
- 期望值反映了分布的中心位置
- 方差衡量了分布的离散程度
- 当α,β>1时,众数存在且与峰值位置对应
- (1,1)的方差最大,(5,5)的方差最小
5. 实际应用案例
Beta分布在A/B测试中的应用:假设我们进行了一个网页转化率测试,A版本获得了80次转化,200次未转化;B版本获得了120次转化,300次未转化。
# A/B测试数据 data_A = (80, 200) data_B = (120, 300) # 计算后验分布 alpha_A, beta_A = 1 + data_A[0], 1 + data_A[1] # 使用无信息先验Beta(1,1) alpha_B, beta_B = 1 + data_B[0], 1 + data_B[1] # 绘制后验分布 x = np.linspace(0, 1, 1000) plt.figure(figsize=(12, 6)) plt.plot(x, beta.pdf(x, alpha_A, beta_A), label='版本A后验', color='blue') plt.plot(x, beta.pdf(x, alpha_B, beta_B), label='版本B后验', color='orange') # 添加统计量标记 mean_A = alpha_A / (alpha_A + beta_A) mean_B = alpha_B / (alpha_B + beta_B) plt.axvline(mean_A, color='blue', linestyle='--', alpha=0.6) plt.axvline(mean_B, color='orange', linestyle='--', alpha=0.6) plt.title('A/B测试转化率后验分布', fontsize=16) plt.xlabel('转化率', fontsize=14) plt.ylabel('概率密度', fontsize=14) plt.legend() plt.grid(True, alpha=0.3) plt.show() # 计算B优于A的概率 samples = 100000 samples_A = beta.rvs(alpha_A, beta_A, size=samples) samples_B = beta.rvs(alpha_B, beta_B, size=samples) prob_B_better = np.mean(samples_B > samples_A) print(f"版本B优于版本A的概率: {prob_B_better:.2%}")在这个案例中,我们使用Beta分布作为二项分布的共轭先验,通过后验分布可以直观比较两个版本的转化率差异。