问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

终于把统计学中的 beta 分布搞懂了!!

创作时间:
作者:
@小白创作中心

终于把统计学中的 beta 分布搞懂了!!

引用
1
来源
1.
http://www.360doc.com/content/25/0202/13/99071_1145761657.shtml

Beta分布是统计学中一个非常重要的概率分布,广泛应用于贝叶斯统计、A/B测试、机器学习等领域。本文将从Beta分布的定义、性质到实际应用,为您全面解析这一重要概念。

Beta分布是一种定义在区间上的连续概率分布,广泛用于建模概率或比例等随机变量。它由两个正实数参数和控制分布的形状。

Beta分布特别适合用来描述一个事件发生的概率,例如一次实验成功的比例。它也是二项分布的共轭先验分布,这使得它在贝叶斯统计中应用广泛。

概率密度函数 (PDF)

Beta分布的概率密度函数定义为:

其中:

  • 是 Beta 函数,用于归一化概率密度,使总概率为 1。
  • 和是形状参数,控制分布的偏态。
  • 当时,Beta 分布是均匀分布。
  • 当时,分布偏向 1,表示成功的可能性更大。
  • 当时,分布偏向 0,表示失败的可能性更大。
  • 当 时,分布在 0.5 对称,且随着增大,分布越集中。

均值和方差

均值

由此可知,越大,分布的中心越靠近 1,而越大,分布的中心越靠近 0。

方差

随着和的增大,方差减小,分布更加集中。

Beta 分布的直观解释

Beta 分布可以视为对一个成功率的建模。

例如,假设我们希望估计一个硬币正面朝上的概率:

  • 如果我们没有任何信息,初始假设是均匀分布,即 Beta(1, 1)。
  • 如果我们观察到 3 次正面和 2 次反面,新的分布是 Beta(4, 3)(将正面次数加到,反面次数加到)。

Beta 分布的应用

  1. 贝叶斯统计
    Beta 分布作为二项分布或伯努利分布的共轭先验分布,是贝叶斯推断的重要工具。
    例如,用 Beta 分布建模事件的成功率(概率),在观察到数据后更新分布。

  2. A/B 测试
    Beta 分布常用于评估两个组的成功率,例如广告点击率或转化率。
    配合汤普森抽样,可以动态调整实验分组,最大化实验收益。

  3. 机器学习中的多臂老虎机问题
    在探索与利用问题中,用 Beta 分布建模动作的成功概率(例如,点击率)。

  4. 概率建模
    用于描述概率值的不确定性。
    例如,预测新产品的市场成功率。

  5. 生物统计
    描述某一实验或过程的成功率分布,比如基因组学中的分布建模。

案例分享

假设你在做一个在线广告的 A/B 测试,有两个版本的广告(A 和 B)。
你希望判断哪一个广告更有可能获得较高的点击率(CTR)。
在不知道广告点击率真实情况的前提下,你可以通过 Beta 分布对广告点击率的未知概率建模。

  1. 初始设定
    对广告 A 和 B 的点击率有先验分布,即均匀分布,
    这表示在实验开始前对广告点击率没有任何偏好或先验知识。

  2. 数据收集
    在实验中,你会记录广告 A 和 B 的点击(成功)与未点击(失败)次数。
    每当有新数据进来,你就根据 Beta 分布的更新规则来更新参数。

  • 成功(点击):
  • 失败(未点击):
    后验分布
    随着数据积累,A 和 B 各自的 Beta 分布会逐渐收敛到其真实点击率的附近。
    例如,如果广告 A 的点击次数为 30 次,未点击 70 次,那么 A 的后验分布将为。
    这意味着我们对 A 的点击率更有信息,它更有可能在约 30% 左右()。

决策过程
可以使用汤普森抽样进行决策,从每个广告的 Beta 分布中随机抽样一个概率值,然后选择抽样值较高的广告进行下一次展示。如此反复,会逐渐将流量更多地分配给点击率更高的广告。

下面的代码演示了一个简单的过程:

  • 我们模拟广告 A 的真实点击率为 0.3,广告 B 的真实点击率为 0.4。
  • 我们通过不断观察点击数据并更新 Beta 分布参数,最终验证后验均值渐渐接近真实点击率。
import numpy as np
from scipy.stats import beta

# 假设广告 A 和 B 的真实点击率(未知的真值)
true_ctr_A = 0.3
true_ctr_B = 0.4

# 初始先验参数:Beta(1, 1) 对应均匀分布
alpha_A, beta_A = 1, 1
alpha_B, beta_B = 1, 1

# 模拟实验轮数
num_trials = 10000

# 用于记录每次实验的后验均值
posterior_means_A = []
posterior_means_B = []

# 模拟试验过程
for i in range(num_trials):
    # 汤普森抽样:从后验分布中抽样
    sample_A = np.random.beta(alpha_A, beta_A)
    sample_B = np.random.beta(alpha_B, beta_B)

    # 根据抽样值决定这次展示哪个广告
    if sample_A > sample_B:
        # 选择广告 A
        chosen_ad = 'A'
        # 模拟真实点击结果
        click = np.random.rand() < true_ctr_A
        # 根据是否点击更新 A 的Beta分布参数
        if click:
            alpha_A += 1
        else:
            beta_A += 1
    else:
        # 选择广告 B
        chosen_ad = 'B'
        # 模拟真实点击结果
        click = np.random.rand() < true_ctr_B
        # 更新 B 的 Beta 分布参数
        if click:
            alpha_B += 1
        else:
            beta_B += 1

    # 记录此时两组广告后验分布的均值
    posterior_means_A.append(alpha_A / (alpha_A + beta_A))
    posterior_means_B.append(alpha_B / (alpha_B + beta_B))

# 输出最终估计的点击率
print(f'Final estimated CTR for A: {alpha_A / (alpha_A + beta_A):.3f} (True: {true_ctr_A})')
print(f'Final estimated CTR for B: {alpha_B / (alpha_B + beta_B):.3f} (True: {true_ctr_B})')

# 可选:绘制后验分布对比
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 200)
pdf_A = beta(alpha_A, beta_A).pdf(x)
pdf_B = beta(alpha_B, beta_B).pdf(x)

plt.figure(figsize=(10,6))
plt.plot(x, pdf_A, label=f'Ad A Posterior: Beta({alpha_A},{beta_A})')
plt.plot(x, pdf_B, label=f'Ad B Posterior: Beta({alpha_B},{beta_B})')
plt.axvline(true_ctr_A, color='blue', linestyle='--', label='True CTR A')
plt.axvline(true_ctr_B, color='orange', linestyle='--', label='True CTR B')
plt.title('Posterior Distributions after Simulation')
plt.xlabel('CTR')
plt.ylabel('Density')
plt.legend()
plt.show()

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号