威尔逊排序算法在实际运用中,使用的比较多,目前像贴吧、知乎的评论等排序等都用到此算法,自己在实践中用的比较多的地方就是对酒店排序,下面就介绍本公众号的第一篇文章!

威尔逊区间迄今为止,这个系列都在讨论,如何给出"某个时段"的排名,比如"过去24小时最热门的文章但是,很多场合需要的是"所有时段"的排名,比如"最受用户好评的产品"。这时,时间因素就不需要考虑了。这个系列的最后两篇,就研究不考虑时间因素的情况下,如何给出排名。

一种常见的错误算法是:[得分 = 赞成票 - 反对票

假定有两个项目,项目A是60张赞成票,40张反对票,项目B是550张赞成票,450张反对票。请问,谁应该排在前面?按照上面的公式,B会排在前面,因为它的得分(550 - 450 = 100)高于A(60 - 40 = 20)。但是实际上,B的好评率只有55%(550 / 1000),而A为60%(60 / 100),所以正确的结果应该是A排在前面。

另一种常见的错误算法是得分 = 赞成票 / 总票数

如果"总票数"很大,这种算法其实是对的。问题出在如果"总票数"很少,这时就会出错。假定A有2张赞成票、0张反对票,B有100张赞成票、1张反对票。这种算法会使得A排在B前面。这显然错误。Amazon就是这种错误算法的实例。

那么,正确的算法是什么呢?我们先做如下设定:

(1)每个用户的投票都是独立事件。

(2)用户只有两个选择,要么投赞成票,要么投反对票。

(3)如果投票总人数为n,其中赞成票为k,那么赞成票的比例p就等于k/n。

如果你熟悉统计学,可能已经看出来了,这是一种统计分布,叫做"二项分布"(binomial distribution)。这很重要,下面马上要用到。

我们的思路是,p越大,就代表这个项目的好评比例越高,越应该排在前面。但是,p的可信性,取决于有多少人投票,如果样本太小,p就不可信。好在我们已经知道,p是"二项分布"中某个事件的发生概率,因此我们可以计算出p的置信区间。所谓"置信区间",就是说,以某个概率而言,p会落在的那个区间。比如,某个产品的好评率是80%,但是这个值不一定可信。根据统计学,我们只能说,有95%的把握可以断定,好评率在75%到85%之间,即置信区间是[75%, 85%]。

这样一来,排名算法就比较清晰了:

第一步,计算每个项目的"好评率"(即赞成票的比例)。

第二步,计算每个"好评率"的置信区间(以95%的概率)。

第三步,根据置信区间的下限值,进行排名。这个值越大,排名就越高。

这样做的原理是,置信区间的宽窄与样本的数量有关。比如,A有8张赞成票,2张反对票;B有80张赞成票,20张反对票。这两个项目的赞成票比例都是80%,但是B的置信区间(假定[75%, 85%])会比A的置信区间(假定[70%, 90%])窄得多,因此B的置信区间的下限值(75%)会比A(70%)大,所以B应该排在A前面。置信区间的实质,就是进行可信度的修正,弥补样本量过小的影响。如果样本多,就说明比较可信,不需要很大的修正,所以置信区间会比较窄,下限值会比较大;如果样本少,就说明不一定可信,必须进行较大的修正,所以置信区间会比较宽,下限值会比较小。

二项分布的置信区间有多种计算公式,最常见的是"正态区间"(Normal approximation interval),教科书里几乎都是这种方法。但是,它只适用于样本较多的情况(np > 5 且 n(1 − p) > 5),对于小样本,它的准确性很差。1927年,美国数学家 Edwin Bidwell Wilson提出了一个修正公式,被称为"威尔逊区间",很好地解决了小样本的准确性问题。 在上面的公式中,表示样本的"赞成票比例",n表示样本的大小,表示对应某个置信水平的z统计量,这是一个常数,可以通过查表或统计软件包得到。

以上是威尔逊算法的基本原理,下面我们给出其具体运用公式.

威尔逊得分排序算法,Wilson Score,用于质量排序,数据含有好评和差评,综合考虑评论数与好评率,得分越高,质量越高。

u表示正例数(好评),v表示负例数(差评),n表示实例总数(评论总数),p表示好评率,z是正态分布的分位数(参数),S表示最终的威尔逊得分。z一般取值2即可,即95%的置信度。

算法性质:性质:得分S的范围是[0,1),效果:已经归一化,适合排序

性质:当正例数u为0时,p为0,得分S为0;效果:没有好评,分数最低;

性质:当负例数v为0时,p为1,退化为1/(1 + z^2 / n),得分S永远小于1;效果:分数具有永久可比性;

性质:当p不变时,n越大,分子减少速度小于分母减少速度,得分S越多,反之亦然;效果:好评率p相同,实例总数n越多,得分S越多;

性质:当n趋于无穷大时,退化为p,得分S由p决定;效果:当评论总数n越多时,好评率p带给得分S的提升越明显;

性质:当分位数z越大时,总数n越重要,好评率p越不重要,反之亦然;效果:z越大,评论总数n越重要,区分度低;z越小,好评率p越重要;

PS:评分等级问题:如五星评价体系,或者百分评价体系,该怎么办呢?

将威尔逊得分的公式由 伯努利分布 修改为 正态分布 即可。

注意:均值和方差均是归一化之后的数值。

PS:关于z参数,即正太分位数。正太分位数影响wilson得分的分布,z参数取值依据就是样本数的量级。举个例子:同样是100个样本,90个好评,z取值2或6,分数差别很大,体

系所容纳(或区分)的样本数也相差较大(同样是0.82分和90%好评率,z=2需要100个样本,z=6需要1000个样本),一般而言,样本数的量级越大,z的取值大。

威尔逊置信区间 php,排序之威尔逊区间算法相关推荐

  1. 正态分布 置信区间 威尔逊置信区间(Wilson score interval)

    一.正态分布 标准正态分布 标准正态分布就是均值为0,标准差为1的分布,如下图 一般正态分布 一般正态分布n,假设其均值是 μ,标准差为σ ,即服从 n~N(μ,σ) 经过变换可以转换成标准正态分布: ...

  2. 威尔逊置信区间 php,Evvail | 威尔逊置信区间(Wilson confidence intervals )计算 | Omics - Hunter...

    1927年,美国数学家 Edwin Bidwell Wilson提出了一个修正公式,被称为"威尔逊置信区间",也称为"Plus Four Confidence Inter ...

  3. 技术图文:排序技术在求解算法题中的应用

    背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第五篇图文. 理论部分 C# 中的排序 对集合类的排序,我们通常使用位于 System.Core 程序集,System.Lin ...

  4. R语言生成数据及其95%置信区间数据(或者其它区间)、使用geom_ribbon函数为ggplot2图像手动添加置信区间的阴影区域using geom_ribbon to create shaded

    R语言生成数据及其95%置信区间数据(或者其它区间).使用geom_ribbon函数为ggplot2图像手动添加置信区间的阴影区域(using geom_ribbon to create shaded ...

  5. STL区间成员函数及区间算法总结

    STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法: 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间 ...

  6. Algorithm:C++语言实现之内排序、外排序相关算法(插入排序 、锦标赛排序、归并排序)

    Algorithm:C++语言实现之内排序.外排序相关算法(插入排序 .锦标赛排序.归并排序) 目录 一.内排序 1.插入排序 2.锦标赛排序 3.归并排序 二.外排序 1.过程 一.内排序 1.插入 ...

  7. C++非递归合并排序的通用实现算法(附完整源码)

    C++非递归合并排序的通用实现算法 C++非递归合并排序的通用实现算法完整源码(定义,实现,main函数测试) C++非递归合并排序的通用实现算法完整源码(定义,实现,main函数测试) #inclu ...

  8. 求解多变量非线性全局最优解_约束条件下多变量非线性函数的区间算法.doc

    约束条件下多变量非线性函数的区间算法.doc 一种求解约束条件下多变量非线性函数所有全局最优解的区间算法李爽,许才军,王新洲(武汉大学测绘学院,湖北,武汉,430079)摘要研究和实践中经常会遇到附有 ...

  9. 图论算法—图的拓扑排序介绍和Kahn算法原理解析以及Java代码的实现

    详细介绍了图的拓扑排序的概念,然后介绍了求拓扑序列的算法:Kahn算法的原理,最后提供了基于邻接矩阵和邻接表的图对该算法的Java实现. 阅读本文需要一定的图的基础,如果对于图不是太明白的可以看看这篇 ...

最新文章

  1. 媒体行业注册什么企业邮箱比较好?
  2. invalid character in identifier
  3. ArcGIS 坐标系统文件
  4. C#中#region,#if的作用
  5. Tomcat下使用Druid配置JNDI数据源
  6. PHD considerations
  7. java string类型详解_Java字符串类型详解
  8. ISTQB 软件测试资质认证
  9. 专访尤雨溪:先别管4.0了,Vue CLI重构了解一下
  10. 在Idea2017.1中编译时发生如下的错误
  11. Matlab中的滤波器
  12. 外卖返利淘宝客小程序公众号淘宝客APP花卷云美团饿了么返利系统
  13. 10年老台式机4分钟攻破量子加密算法,此前12年无人破解,核心原理来自25年前...
  14. Angular端口4200被占用后如何处理
  15. ‘Staff‘ object has no attribute ‘data‘
  16. jQuery简单倒计时插件
  17. 三星设备如何打开开发者模式、如何下载安装play store以便进行正常的Android开发中的google购买测试
  18. Photoshop2021入门教程|认识Photoshop界面
  19. 计算机辅助设计基础试题,CAD基础试题「附答案」
  20. 双屏下微信截屏错位解决办法

热门文章

  1. 增大/减少Mp3文件的默认音量—令其统一音量
  2. Linux批量巡检日志,linux 巡检报告
  3. 立思辰扫描仪G4060F+驱动程序和客户端-银河麒麟V10 sp1版本
  4. psp游戏 lanzou_PSP上的第一人称射击游戏
  5. K8s常见问题分析解决
  6. 获得研究生学历的6种方式
  7. Stata教程(三)---认识变量
  8. php登录 无漏洞,AKCMS 6.0 /akcms/login.php 登录绕过漏洞
  9. 基于ANSYS 2019R1全解一款双吸泵的双向流固耦合方法
  10. 织梦模板改html教程,dedecms织梦模板介绍及制作修改