编程语言
首页 > 编程语言> > php – 为贝叶斯排名系统添加额外因子(点击次数)

php – 为贝叶斯排名系统添加额外因子(点击次数)

作者:互联网

我为业余音乐家经营一个音乐网站,我们有一个基于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 = #play中的变化
> Puser =此用户播放此曲目的时间
> TPuser =用户播放的曲目总数(非唯一)

因此,用户只播放一首曲目的次数越多,它对该曲目的播放总数就越少.如果用户的收听习惯多种多样,那么TPuser会很大,所以deltaP会回到1.这仍然可以游戏,但这是一个好的开始.

标签:php,mysql,ranking,bayesian,rating-system
来源: https://codeday.me/bug/20190630/1338996.html