首页 文章

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

提问于
浏览
4

我为业余音乐家经营一个音乐网站,我们有一个基于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 回答

  • 3

    您可能想尝试以下操作 . 您提到的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.这仍然可以游戏,但这是一个好的开始 .

相关问题