4

我为业余音乐家经营一个音乐网站,我们有一个基于 10 分的评分系统,然后将其计算为总分 100 分。我们有一个直接影响平均分数的用户“可信度”积分系统在评级点,但下一步是实施一个有效使用这些数据的图表系统。

我将尝试准确解释这一切是如何工作的,以便您可以查看我拥有哪些数据。

  • 网站成员对曲目的评分介于 1 到 10 之间。
  • 该站点成员具有“可信度”分数,这只是站点周围各种活动累积的总积分。例如,用户给出评分可以获得 100 分,因此他们给出的评分越多,他们的“可信度”分数就越高。只有总的可信度得分保存在数据库中,每次用户执行带有积分奖励的活动时都会更新。这些单独的活动不会被存储。
  • 根据该用户与其他已评价曲目的用户相比的可信度,计算该曲目的加权平均值,然后将其作为 1 到 100 之间的数字存储在曲目表中。
  • 在曲目表中,曲目被收听的次数(即播放次数)也被存储为总数。

所以我必须使用的数据是:

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

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

在这个网站上搜索后,我发现IMDB 贝叶斯风格的系统有助于解决质量方面的问题,但我如何添加流行度(播放次数)并以我想要的方式平衡它?

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

编辑:标题说“点击次数”,但这基本上直接相当于“播放次数”。

4

1 回答 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 = 播放次数的变化
  • Puser = 此用户播放此曲目的次数
  • TPuser = 用户播放的曲目总数(不是唯一的)

因此,用户只播放一首曲目的次数越多,它对该曲目的总播放次数就越少。如果用户的收听习惯不同,那么 TPuser 将很大,因此 deltaP 将趋于 1。这仍然可以被玩弄,但这是一个好的开始。

于 2011-05-18T15:39:43.547 回答