打分排序系统漫谈2 - 点赞量?点赞率?! 置信区间!

在第一篇打分系统漫谈1 - 时间衰减我们聊了两种相对简单的打分算法Hacker News和Reddit Hot Formula,也提出了几个这两种算法可能存在的问题,这一篇我们就其中的两一个问题进一步讨论:

  • 如何综合浏览量和点赞量对文章进行打分[期望效用函数->点赞率]
  • 如何解决浏览量较小时,点赞率不置信的问题[wald Interval -> wilson]

Reddit Hot Formula? 期望效用函数!

让我们从上一篇我们提到的Reddit Hot Formula来说起,抛开文章质量的惩罚项,只考虑点赞拍砖的低配版打分公式是

\[
score = sign(U-D)* log_{10}{|U-D|} + seconds/4500
\]

Evan从经济学期望效用这个新颖的角度试图对上述公式进行复现,几个基本假设包括:

  • 用户刷新界面的行为$ \sim Poisson(\lambda)$
  • 每次刷新看到新/老文章的概率是\(q/(1-q)\), 喜欢/不喜欢的概率是\(p/(1-p)\)
  • 老文章效用为0,喜欢的新文章效用为1, 不喜欢的新文章效用为-1

上述概率p,q可以用已有数据进行估计:

在没有任何和文章相关的信息时,喜欢不喜欢的概率是一样的\(p=\frac{1}{2}\), 当我们获得一篇文章的点赞量和拍砖数时我们可以用点赞率对概率进行更新得到\(p = \frac{U+1}{U+D+2}\)

概率q是一篇t时刻前发布的文章没有被作者读过的概率,换言之就是用户在t时间内没有刷新界面的概率\(q = p(N_\lambda=0)= p(x>t)= exp(-\lambda t)\)

综上我们可以得到对数效用的表达式:

\[
\begin{align}
Utility & = p * q -(1-p) * q \\
& = exp(-\lambda t ) *(\frac{U+1}{U+D+2} - \frac{D+1}{U+D+2}) \ &= exp(-\lambda t ) *(\frac{U-D}{U+D+2}) \ log(Utility ) & = log(U-D) - log(U+D+2) - \lambda t \\end{align}
\]

和上述Reddit Hot Formula对比我们会发现当U>D的时候,两个表达式是基本一致的,最大的不同是Reddit没有期望效用的第二个对数项\(log(U+D+2)\)。换言之Reddit只考虑点赞量而没有考虑点赞量对应的基数,这个基数可以是点赞+拍砖或者是用户的浏览量。

我们举个例子你就会明白这种打分可能存在的问题,我们拿Stack overflow来举个例子,下图的两个问题获得了差不多的投票57 vs. 53,但是会发现第一个问题比第二个问题多一倍的浏览量4k vs. 2K, 所以从投票率来看反而是第二个问题的投票率更高。

点估计?区间估计!

这样看似乎我们应该使用点赞(投票)率而非简单的点赞量来对文章进行打分,但是点赞率真的永远可信么? 我们再看一个例子

单从投票率来看,第一个问题投票率高达50%但是浏览量只有2 ,而第二个问题投票率较低但是浏览量很高。如果但从投票率来看,似乎第一个问题排名更高,但是直觉告诉我们第二个问题应该排名更靠前。这就涉及统计学中点估计的置信度问题。

让我们来把用户点赞这个行为抽象一下,我们假设每一个用户要么点赞要么拍砖,每一个用户之间的行为之间独立,所以每个用户\(\sim Bernoulli(p)\), 其中p是点赞的概率。当样本量足够大的时候,根据大数定律用户点赞的频率会趋于点赞率$\lim\limits_{x \to \infty} P(|\frac{n_x}{n} - p| < \epsilon)=1 $

但是当用户量不够,样本比较小的时候,计算的点赞率会和总体概率会存在较大的偏差。一种解决方法就是使用区间估计而非点估计,我们给出点赞率估计的下边界而非点赞率的估计值。

最常用的二项分布的区间估计由近似正态分布给出。根据大数定律,参数为n,p的二项分布在\(n \to \infty\)的时候 \(\frac{\hat{p}-p}{\sqrt{p(1-p)/n}} \sim N(0,1)\)。根据正态分布的置信区间我们会得到二项分布的近似区间估计如下

\[
\begin{align}
& p( | \frac{\hat{p}-p}{\sqrt{p(1-p)/n}} | < z_{\alpha/2}) = 1- \alpha \\
& where \, 置信度是0.95,\alpha = 0.05 \&\hat{p}是根据每个用户点赞行为给出的点赞率的估计\&n是样本量,可以是用户点赞+拍砖的总和,或者是用户浏览量\&p是总体的点赞率是我们希望得到的估计\\end{align}
\]

Wald Interval 对上述近似区间用样本估计\(\hat{p}\)替代总体p,给出了最常用的二项分布置信区间:

\[
\begin{align}
p_-,p_+ = \hat{p} \pm z_{\alpha/2}\sqrt{\hat{p}(1-\hat{p})/n}
\end{align}
\]

wald置信区间适用大多数情况,但是在下面三个情况下会存在问题:

  • 样本不够,n太小时,\(\hat{p}\)和总体的p相比会偏差较大
  • \(p \to 0\) or \(p \to 1\)会导致方差趋于0,使得置信区间显著偏窄
  • \(p =0,1\) 置信区间长度为0

而在估计文章点赞率这个场景下我们不可避免的会碰到上述3个情况,在这种情况我们往往会使用更加复杂的置信区间算法。来来来下面让我们说说其中一种高配版的置信区间- Wilson Interval

Wilson Score

Wilson对Walt置信区间做了修正, Wilson置信区间的上下界如下:

\[
\begin{align}
p_-,p_+ = \frac{\hat{p} + \frac{z^2_{\alpha/2}}{2n}} {1 +\frac{z^2_{\alpha/2}}{n}} \pm z_{\alpha/2}\frac{\sqrt{\frac{\hat{p}(1-\hat{p})}{n} + \frac{z^2_{\alpha/2}}{4n^2} }}{1 +\frac{z^2_{\alpha/2}}{n}}
\end{align}
\]

看着老复杂了,让我们来拆解一下你就会发现原理蛮好理解的。先说说对总体均值的估计,wilson对\(\hat{p}\)进行了如下调整:

\[
\begin{align}
\hat{p} \to \tilde{p} = \frac{\hat{p} + \frac{z^2_{\alpha/2}}{2n}} {1 +\frac{z^2_{\alpha/2}}{n}}
\begin{align}
\]

当样本量足够大Wilson和Walt对总体均值的估计会趋于一致。当样本量很小的时候, 不同于walt,wilson给样本估计加了一个\(\frac{1}{2}\)的贝叶斯前置概率(点赞和拍砖的概率各是50%),然后不断用新增样本来对这个前置概率进行调整。从而避免样本较小的时候样本估计过度偏离总体的问题。

\[
\begin{align}
when \lim\limits_{n \to \infty} \tilde{p} \to \hat{p} \when \lim\limits_{n \to 0} \tilde{p} \to \frac{1}{2} \\end{align}
\]

方差部分也做了相同的处理, 当样本足够大的时候wilson和walt对总体方差的估计会趋于一致,但是当样本小的时候和上述样本均值的处理方法一样,会趋于贝叶斯前置概率对应的方差\(\hat{p} \to \frac{1}{2} \Rightarrow \hat{p}(1-\hat{p}) \to \frac{1}{4}\)

\[
\begin{align}
\sqrt{\frac{\hat{p}(1-\hat{p})}{n}} \to \frac{\sqrt{\frac{\hat{p}(1-\hat{p})}{n} + \frac{z^2_{\alpha/2}}{4n^2} }}{1 +\frac{z^2_{\alpha/2}}{n}}
\end{align}
\]

下面两张图片很直观的给出了不同样本数量(n=10 vs.100)下,样本均值的估计所对应的置信区间的长度(方差估计)。当样本大的时候Wilson和Wald几乎一样,当样本小的时候,随着p趋于0 or 1,Wilson置信区间会显著宽于Walt区间。


而Wilson打分就是取Wilson置信区间的下界:

\[
\begin{align}
score= \frac{\hat{p} + \frac{z^2_{\alpha/2}}{2n}} {1 +\frac{z^2_{\alpha/2}}{n}} - z_{\alpha/2} \frac{\sqrt{\frac{\hat{p}(1-\hat{p})}{n} + \frac{z^2_{\alpha/2}}{4n^2} }}{1 +\frac{z^2_{\alpha/2}}{n}}
\end{align}
\]

Wilson打分方式有几个很好的特性:

  • 点赞率(p)一样,浏览量(n)越高得分越高
  • 点赞率趋于0时, score = 0
  • 点赞率趋于1时, score = \(\frac{1}{1+z^2_{\alpha/2}/n}\), 浏览量越高,得分越接近1,反之浏览量越小,得分越低,这样会对小样本点赞率高的问题进行调整
  • 置信度越高,\(z_{\alpha/2}\)越大,点赞率越不重要,而样本量n越重要

在下一篇文章我们继续聊聊另一种更灵活的处理小样本打分的方法- 贝叶斯更新

Reference

  1. https://www.ucl.ac.uk/english-usage/staff/sean/resources/binomialpoisson.pdf
  2. http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_wilson_score_interval.html
  3. http://www.evanmiller.org/how-not-to-sort-by-average-rating.html
  4. 二项分布参数的区间估计,朱永生《粒子物理数据分析基础与前沿》研讨会

原文地址:https://www.cnblogs.com/gogoSandy/p/10358961.html

时间: 2024-08-29 15:53:55

打分排序系统漫谈2 - 点赞量?点赞率?! 置信区间!的相关文章

打分排序系统漫谈3 - 贝叶斯更新/平均

打分排序系统漫谈3 - 贝叶斯更新/平均 标签(空格分隔): 博客园 统计 打分系统 待完成 上一节我们聊了聊用Wilson区间估计来处理小样本估计,但从原理上来说这种方法更像是一种Trick,它没有从本质上解决样本量小的时候估计不置信的问题,而是给估计加上一个和样本量相关的置信下界,然后用这个下界替代估计进行打分. 想要从本质上解决小样本估计不置信的问题,一个更符合思维逻辑的方法是我们先基于经验给出一个预期估计,然后不断用收集到的样本来对我们的预期进行更新,这样在样本量小的时候,样本不会对我们

打分排序系统漫谈1 - 时间衰减

打分排序系统的应用非常普遍,比如电影的评分,知乎帖子的热度,和新闻文章的排序.让我们从最简单直观的平均打分开始, 聊聊各种打分方法的利弊和使用场景. 最简单的打分方法当然是一段时间的点赞量综述.显而易见的缺点就是越老的帖子容易拿到更多的赞而长期霸榜,HN用了一种简单的时间方法来考虑时间衰减. Hacker News Algo - 只有点赞 \[ \begin{align} score & = \frac{(v-1)}{(t+2)^G} * pen \ where & v-1 剔除只有一个用

基于搜狗微信搜索获取公众号文章的阅读量及点赞量

测试日期:2016/11/13 文章url样例: http://mp.weixin.qq.com/s?src=3&timestamp=1479004927&ver=1&signature=Z0OsvrGeP25z1f3laEdZjxCrLMvrwg3UfOxCFM1z5i-7qBOaiZDcL3lApbrzHiq5simLQc*n3KB-Ljy01WvBYFZB5D8S8Hcy5lgy6ejl0-HGr6QkqnRVIHMT6Xh5HzfIipcnWZyla-GJGQcxzMhqi

Java实现一个排序系统

package com.sortsystem; /** * @ClassName User * @Description 排队的人 * @Author Administrator * @Date 2019/5/30 21:10 * @Version 1.0 **/ public class User { private int Id; String name; int seq; // 排队的序号 public User(int id, String name) { Id = id; this.n

java刷视频浏览量,点赞量

说明 分析 开始操作 说明 这几天班主任一直让我们访问一个网页来观察看视频,增加访问次数.每个班级还有指定的名额...而且经过我的测试,点赞次数是在观看视频一会才出现的.. 可是身为计算机专业的 肯定不想一直点啊 点啊 于是我就有了一个大胆的想法 分析 于是我就查看网页的源代码 这行代码是弹出点赞的时间为18s. 18秒后发生了什么呢 ?继续看 可以看到这个弹出点赞的父div为class="video_mask" 而且默认的显示框类型为none,即不显示. 好吧 废话不多说. 主要看下

solr特点三: boost(改变默认打分排序)

有时候默认的字段打分不能满足我们的需要,如我们想把关键词出现在标题中的优先显示. 测试于:Solr 4.5.1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS 5.7 实现方法有3个: 在建索引的时候设置boost,这个值会写入文件,建索引时有额外的性能开销: 在查询的时候指定boost,这个值不会写入文件,查询时指定任意字段的boost值,适用与一个索引库的多种查询场景,但查询时有额外性能开销: (推想)前两者结合使用,如绝大多数都需要标题优先,那么建索引时可指定标

案例分享:某儿童影楼是如何运营客服系统,让客户量、成交量翻番?

"去年在深圳开了儿童摄影影楼,为提高知名度,运营前期在美团.百度竞价等平台都有用大量资金去投放广告.对于摄影机构而言,如果没有打广告就好像你不是专业搞摄影似的.可是没什么效果,非常郁闷!"深圳某儿童摄影机构负责人王先生表示. 大摄影机构任性,有钱到处砸广告,但中小儿童摄影机构都需要"花一分钱有一块钱的回报". "今年来,我们将影楼服务号绑定鱼塘软件后,使用两个功能就让客户量.成交量翻一番."王先生说. 1.预约邀请:引入流量,订单转化 儿童摄影,

极出把场众专青立量张一率思住chong

乾觀照重級經素家真深達據關包又候指約專好對親酸列影天本完認道萬驗證東共給領目題海須證點問族共便結業變個積接長到候制先能因速的指族需機進花價色全如群且記形想眼程驗角階事圓更轉根形結發正員進各南務線具消毛務礦維安深路中調說相前別劃形義九布造按圓化也圖爭天省十老圓來連近效下建戰收劃則路時油示山與易能鐵至西機生識屬傳角育上群法信車新式而需格業事認行些度 公習采說名少然統規且百院卻非八勞色產局量行子斯比什比音公存素程多應重走我百往史非有們特數機裡之決系部油江增完向列張屬基政員置育海支應次象只率非礦會條收目

简信CRM:CRM系统为企业减少客户流失率

客户是企业盈利的来源,对于客户资源的竞争在逐渐增加,但是很多企业都面临着客户流失的问题.对于企业客户而言,有一定的的流失率是必然的.那么,如何有效的减少客户流失率的问题,就成了很多企业都想要解决的难题.针对这一问题,简信CRM客户管理系统就能很有效降低客户流失率?下面我们一起来了解下吧! 1.客户信息储存销售人员自己获得的客户资源.公司营销活动获得的客户资源以及官网访问获得的客户资源,都被录入在简信CRM客户管理系统之中,存放在终端数据库.不仅可以让管理员方便快速的查看客户的信息,而且还有效的防