Beta分布 Python 3.12 实战:5种参数组合可视化与期望/方差计算

Beta分布 Python 3.12 实战:5种参数组合可视化与期望/方差计算
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\beta1)}$众数$\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, labelfα{a}, β{b}, colorcolor, linewidth2.5) plt.title(Beta分布概率密度函数(PDF)对比, fontsize16) plt.xlabel(x, fontsize14) plt.ylabel(概率密度, fontsize14) plt.legend(fontsize12) plt.grid(True, alpha0.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, labelfα{a}, β{b}, colorcolor, linewidth2.5) plt.title(Beta分布累积分布函数(CDF)对比, fontsize16) plt.xlabel(x, fontsize14) plt.ylabel(累积概率, fontsize14) plt.legend(fontsize12) plt.grid(True, alpha0.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(indexFalse))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(indexFalse))统计量对比分析期望值反映了分布的中心位置方差衡量了分布的离散程度当α,β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后验, colorblue) plt.plot(x, beta.pdf(x, alpha_B, beta_B), label版本B后验, colororange) # 添加统计量标记 mean_A alpha_A / (alpha_A beta_A) mean_B alpha_B / (alpha_B beta_B) plt.axvline(mean_A, colorblue, linestyle--, alpha0.6) plt.axvline(mean_B, colororange, linestyle--, alpha0.6) plt.title(A/B测试转化率后验分布, fontsize16) plt.xlabel(转化率, fontsize14) plt.ylabel(概率密度, fontsize14) plt.legend() plt.grid(True, alpha0.3) plt.show() # 计算B优于A的概率 samples 100000 samples_A beta.rvs(alpha_A, beta_A, sizesamples) samples_B beta.rvs(alpha_B, beta_B, sizesamples) prob_B_better np.mean(samples_B samples_A) print(f版本B优于版本A的概率: {prob_B_better:.2%})在这个案例中我们使用Beta分布作为二项分布的共轭先验通过后验分布可以直观比较两个版本的转化率差异。