我为业余音乐家经营一个音乐网站,我们有一个基于10分的评分系统,然后计算出100分的总分 . 我们有一个“可信度”分数系统,直接影响平均分数的用户在评级点,但下一步是实施一个有效使用这些数据的图表系统 .
我会尝试解释它是如何工作的,这样你就可以看到我拥有哪些数据 .
-
网站成员对1到10之间的曲目进行评级 .
-
该网站成员的得分为"credibility",这只是网站周围各种活动积累的总分数 . 例如,用户获得评分时获得100分,因此他们给出的评分越多,他们的评分就越高 . 只有总可信度得分才会保存在数据库中,每次用户执行附加积分奖励的活动时都会更新 . 不存储这些个人活动 .
__9__基于该用户的可信度与已评定该轨道的其他用户相比,计算该轨道的加权平均值,然后将其作为1到100之间的数字存储在轨道表中 . -
在曲目表中,收听曲目的次数(即播放次数)也作为总计存储 .
所以我必须处理的数据是:
-
赛道的总评分(1到100之间的数字)
-
曲目的评分数量
-
曲目的播放次数
在图表系统中,我想创建一个排名,使用上述3组数据在 quality (总评级,按评级数标准化)和 popularity (播放次数)之间创建公平的 balancer . 但是系统应该比质量更重要地考虑质量,因此例如质量方面占标准化排名的75%和流行率25% .
在这个网站上搜索后,我找到了IMDB Bayesian-style system,这有助于计算质量方面,但是如何添加流行度(播放次数)并按照我想要的方式 balancer ?
该网站是用PHP和MySQL编写的,如果有帮助的话 .
编辑: Headers 显示“点击次数”,但这基本上相当于“播放次数” .
1 回答
您可能想尝试以下操作 . 您提到的IMDB等式使用称重倾向于电影的平均评级或所有电影的平均评级:
所以
和
这应该是公平的 . 除非你真的知道你的数据,否则根据游戏次数计算0到100之间的受欢迎度得分是非常棘手的 . 首先尝试计算平均播放次数avg(p)和方差var(p),然后您可以使用这些来使用技术调用白化来缩放播放次数:
假设您的数据看起来像钟形曲线,这将给出-1到1之间的分数 . 然后,您可以通过再次缩放将其缩放到0 - 100范围内:
要根据某个加权因子w(例如0.75)组合得分,您只需执行以下操作:
玩这些,让我知道你是如何进行的 .
注意:这并不能解释这样一个事实:一个用户可以“游戏”人气购买多次播放曲目 . 你可以通过惩罚一首歌的多个剧本来解决这个问题:
deltaP =(1 - (Puser - 1)/ TPuser)其中:
deltaP = #play中的变化
Puser =此用户播放此曲目的时间
TPuser =用户播放的曲目总数(非唯一)
因此,用户只播放一首曲目的次数越多,它对该曲目的播放总数就越少 . 如果用户的收听习惯多种多样,那么TPuser会很大,所以deltaP会回到1.这仍然可以游戏,但这是一个好的开始 .