贝叶斯更新在打分排序系统中的应用
贝叶斯更新在打分排序系统中的应用
在数据驱动的决策制定中,如何处理小样本数据的不确定性是一个常见挑战。贝叶斯更新方法提供了一种优雅的解决方案,通过结合先验知识和新数据来不断优化估计值。本文将深入探讨贝叶斯更新在打分排序系统中的应用,包括二元和多元贝叶斯更新的原理和实践。
二元贝叶斯更新
样本分布抽象
在讨论贝叶斯更新之前,我们先回顾一下二项分布的样本抽象。假设每个用户是否点赞的行为服从伯努利分布,即 ( \sim Bernoulli(p) )。对于某一篇文章,N个用户的点赞行为则服从二项分布 ( \sim Binomial(n,p) ),其概率质量函数为:
[ P(X=k|n,p) = \binom{n}{k} p^k (1-p)^{n-k} ]
预期分布抽象 - 共轭先验分布
为了实现贝叶斯更新,我们需要选择一个合适的先验分布。在二项分布的情况下,Beta分布是一个理想的共轭先验分布。Beta分布的概率密度函数为:
[ f(x;a,b) = \frac{x^{a-1} (1-x)^{b-1}}{B(a,b)} ]
其中 ( B(a,b) ) 是Beta函数,定义为:
[ B(a,b) = \frac{\Gamma(a) \Gamma(b)}{\Gamma(a+b)} ]
Beta分布的期望值为:
[ E(X) = \frac{a}{a+b} ]
分布更新 - 贝叶斯更新
利用Beta分布作为共轭先验,我们可以实现贝叶斯更新。具体来说,假设我们有先验分布 ( \pi(p|\alpha, \beta) \sim Beta(\alpha, \beta) ),收集到的样本数据服从二项分布 ( x \sim Binomial(n,p) )。根据贝叶斯定理,后验分布为:
[ \pi(p|\alpha+k, \beta+n-k) \propto P(X=k|p, n) * \pi(p|\alpha, \beta) ]
后验分布的期望值为:
[ E(\hat{p}) = \frac{\alpha + k}{\alpha + \beta + n} ]
其中 ( \alpha ) 和 ( \beta ) 可以理解为虚拟样本的数量。例如,如果我们预期点赞和拍砖的概率是50%/50%,即 ( \alpha = \beta )。当我们对预期不是非常肯定时,可以将 ( \alpha ) 和 ( \beta ) 设置得较小,这样样本会更快地修正先验概率;反之,如果对预期非常有信心,可以将 ( \alpha ) 和 ( \beta ) 设置得较大。
- ( \alpha ) 和 ( \beta ) 越大,方差越小,p的分布越集中
- ( \alpha ) 增加,p的估计均值越大
- ( \beta ) 增加,p的估计均值越小
最终,我们可以用以下简单的表达式来表示用户评分的估计:
[ \hat{p} = \frac{\alpha + k}{\alpha + \beta + n} ]
其中 ( \alpha ) 是预设的点赞量,( \beta ) 是预设的拍砖量,n是收集到的全部样本量,k是收集到的样本中点赞的数量。
多元贝叶斯更新
在实际应用中,用户的行为往往比简单的点赞/拍砖更复杂。例如,在五星评分系统中,用户可以给出1到5分的评分。这种情况下,我们可以使用多项分布和Dirichlet分布来实现贝叶斯更新。
样本分布抽象
假设用户的评分从1分到5分,用户最终打了3分,则可以抽象成一个有5种可能的多项分布,用户的选择用向量表示就是 ( (0,0,1,0,0) )。多项分布的表达式如下:
[ P(x|\theta) = \binom{N}{x_1, \ldots, x_5} \prod_{i=1}^5 \theta_i^{x_i} ]
其中N是用户量,( x_i ) 是选择打i分的用户数,满足 ( \sum_{i=1}^5 x_i = N ),( \theta_i ) 是打i分的概率,满足 ( \sum_{i=1}^5 \theta_i = 1 )。我们通过收集到的用户打分来给出打1分到5分的概率,最终用多项分布的期望作为最终打分:
[ score = \sum_{i=1}^5 p_i * i ]
共轭先验
对于多项分布,其共轭先验分布是Dirichlet分布。Dirchlet分布的概率密度函数如下:
[ Dir(\theta|\alpha) = \frac{\Gamma(\alpha_0)}{\Gamma(\alpha_1) \cdots \Gamma(\alpha_K)} \prod_{k=1}^K \theta_k^{\alpha_k-1} ]
其中 ( \alpha_0 = \sum_{i=1}^K \alpha_i ),当K=2时,Dirichlet分布退化为Beta分布。其中 ( \alpha_i ) 可以理解为对打分为i的预期先验。
贝叶斯更新
确定了先验分布和后验分布后,我们可以用和Beta分布相同的方法用收集到的样本对参数进行更新:
[ Dir(\theta|D) \propto P(D|\theta) * Dir(\theta|\alpha) ]
[ Dir(\theta|D) = \frac{\Gamma(\alpha_0 + N)}{\Gamma(\alpha_1 + m_1) \cdots \Gamma(\alpha_K + m_k)} \prod_{k=1}^K \theta_k^{\alpha_k + m_k-1} ]
其中,当我们收集到N个样本,其中 ( m_i ) 个样本打了i分,则打i分的概率会从预置的先验概率 ( \frac{\alpha_i}{\sum_{i=1}^k \alpha_i} ) 被更新为 ( \frac{\alpha_i + m_i}{\sum_{i=1}^k \alpha_i + N} )。
有了后验概率,我们就可以得到最终打分为:
[ \frac{\sum_{i=1}^K i * (\alpha_i + m_i)}{\sum_{i=1}^k \alpha_i + N} ]
贝叶斯平均
针对小样本打分,一种常用的方法是贝叶斯平均,许多电影网站的打分方法都来源于此。让我们先写一下表达式:
[ x = \frac{C*m + \sum_{i=1}^K{x_i}}{C+N} ]
其中C是预置样本量(给小样本加一些先验样本),N是收集的样本量,m是先验的总体平均打分,( x_i ) 是每个用户的打分。贝叶斯平均可以简单理解为用整体的先验平均打分来对样本估计进行平滑。但其实让我们对上述基于Dirchlet分布给出的打分式进行一下变形:
[ \sum_{i=1}^K i * \alpha_i = C * m ]
[ \sum_{i=1}^K i * m_i = \sum_{i=1}^K x_i ]
会发现两种计算方式是完全一致的!
总结
通过贝叶斯更新方法,我们可以有效地解决小样本估计的不确定性问题。无论是二元还是多元场景,贝叶斯方法都能提供稳健的参数估计。这种方法在推荐系统、评分系统等场景中都有广泛的应用。
参考资料
- Evan Miller. Bayesian Average Ratings. [Online]. Available: http://www.evanmiller.org/bayesian-average-ratings.html
- 阮一峰. Bayesian Average. [Online]. Available: http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_bayesian_average.html
- QuantStart. Bayesian Inference of a Binomial Proportion - The Analytical Approach. [Online]. Available: https://www.quantstart.com/articles/Bayesian-Inference-of-a-Binomial-Proportion-The-Analytical-Approach
- Wikipedia. Beta function. [Online]. Available: https://en.wikipedia.org/wiki/Beta_function