草庐IT

php - 向贝叶斯排名系统添加额外因素(点击次数)

coder 2023-10-11 原文

我经营一个面向业余音乐家的音乐网站,我们有一个基于 10 分满分的评分系统,然后计算出总分 100 分。我们有一个直接影响用户的“信誉”积分系统评分时的平均分,但下一步是实现有效使用此数据的图表系统。

我会尝试并准确解释它的工作原理,以便您了解我有哪些数据可供使用。

  • 网站成员给轨道打分,评分在 1 到 10 之间。
  • 该站点成员有一个“信誉”分数,它只是站点周围各种事件所累积的分数的总和。例如,用户通过给出评级获得 100 分,因此他们给出的评级越多,他们的“可信度”分数就越高。只有总可信度分数会保存在数据库中,每次用户执行带有积分奖励的事件时都会更新。这些个人事件不会被存储。
  • 根据该用户相对于对该轨道进行评分的其他用户的可信度,计算该轨道的加权平均值,然后将其作为 1 到 100 之间的数字存储在轨道表中。
  • 在轨道表中,轨道被收听的次数(即播放次数)也存储为总数。

所以我必须处理的数据是:

  • 歌曲的总体评分(1 到 100 之间的数字)
  • 轨道的评分数
  • 轨道的播放次数

在图表系统中,我想创建一个使用上述 3 组数据的排名,以在质量(总体评级,用评级数量标准化)和受欢迎程度之间取得公平的平衡(播放次数)。但是系统应该更重视质量而不是受欢迎程度,例如,质量方面占标准化排名的 75%,受欢迎程度占 25%。

在这个网站上搜索后,我找到了 IMDB Bayesian-style system这有助于确定质量方面的问题,但我如何增加受欢迎程度(播放次数)并以我想要的方式平衡它?

如果有帮助,该站点是用 PHP 和 MySQL 编写的。

编辑:标题说“点击次数”,但这基本上是“播放次数”的直接等价物。

最佳答案

您可能想尝试以下操作。您提到的 IMDB 等式使用权重来倾向于电影的平均评分或所有电影的平均评分:

WR = (v/(v+m)) × R + (m/(v+m)) × C 

所以

v << m => v/(v+m) -> 0; m/(v+m) -> 1 => WR -> C

v >> m => v/(v+m) -> 1; m/(v+m) -> 0 => WR -> R

这通常应该是公平的。根据播放次数计算 0 到 100 之间的人气分数是非常棘手的,除非你真的了解你的数据。作为第一次尝试计算平均播放次数 avg(p) 和方差 var(p),然后您可以使用这些来使用称为白化的技术来缩放播放次数:

WHITE(P) = (p - avg(p))/var(p)

假设您的数据看起来像钟形曲线,这会给您一个介于 -1 和 1 之间的分数。然后,您可以通过再次缩放将其缩放到 0 - 100 范围内:

POP = 50 * (1 + WHITE(P))

要根据某个权重因子 w(例如 0.75)合并分数,您只需执行以下操作:

RATING = w x WR + (1 - w) x POP

试一试这些,让我知道你的进展情况。

注意:这并没有说明这样一个事实,即一次使用可以多次“玩弄”流行度购买轨道。您可以通过惩罚多次播放一首歌曲来解决这个问题:

deltaP = (1 - (Puser - 1)/TPuser) 地点:

  • deltaP = # plays 的变化
  • Puser = 该用户播放此轨道的次数
  • TPuser = 用户播放的轨道总数(不唯一)

因此,用户只播放一首轨道的次数越多,该轨道的总播放次数就越少。如果用户的收听习惯不同,那么 TPuser 会很大,因此 deltaP 会趋向于 1。这仍然可以博弈,但这是一个好的开始。

关于php - 向贝叶斯排名系统添加额外因素(点击次数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017208/

有关php - 向贝叶斯排名系统添加额外因素(点击次数)的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. ruby - 可以通过多少种方法将方法添加到 ruby​​ 对象? - 2

    当谈到运行时自省(introspection)和动态代码生成时,我认为ruby​​没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby​​的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资

  5. ruby - 如何在 Ruby 中向现有方法定义添加语句 - 2

    我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca

  6. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  7. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  8. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  9. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  10. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

随机推荐