【问题标题】:What is the best algorithm to calculate the most scored item?计算得分最高的项目的最佳算法是什么?
【发布时间】:2023-03-28 13:19:01
【问题描述】:

我有一个用户评分在 1 到 5 之间的音乐项目,并且 我需要一个公式来获得得分最高的 5 个项目。

但是很明显,一个从 1000 个不同用户获得 3.5 平均分的项目将比一个仅从 5 个用户获得 4.9 平均分的项目得分更高......换句话说,我认为如果一个项目得到人们的关注来得分它,这表明该项目很有趣。所以在计算中 votesCount 参数需要有一个幂。 (多少功率?我不确定,我请你出主意)。

我认为我们在函数中需要以下参数:votesAverage, votesCount。

【问题讨论】:

  • 在 Netflix 挑战中可以开始阅读这些类型的问题。有大量有用且有趣的网络发布 + 算法示例处理这类事情。
  • 你需要更好地定义“得分最高”这个概念——如果你不能,告诉我们你希望通过这个分数达到什么目标;这可能会让我们更好地了解您在说什么。
  • 只求总分有什么问题?在您的示例中,一项总共获得 3,500,而另一项仅获得 24.5
  • @wheaties 谢谢,我会尝试搜索它。 @Jacob 现在好点了吗? @MAK 请尝试理解。
  • Carlos: 1000 票 1 的项目优于 100 票 5 的项目? :)

标签: algorithm math


【解决方案1】:

有大量选民的 5 星级系统的加权投票

您可以使用贝叶斯估计来计算加权投票。

IMDb(互联网电影数据库)使用此计算来确定其 IMDb 前 250 名。(注意:IMDb 使用 10 颗星,但公式相同使用 5 颗星)。

Top Rated 250 Titles 的计算公式给出了真正的贝叶斯估计:

加权评级 (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C

地点:

  • R = 电影的平均值(平均值)=(评分)
  • v = 电影票数 = (votes)
  • m = 进入前 250 名所需的最低票数(目前为 3000)
  • C = 整个报告的平均投票数(目前为 6.9)

IMDb Reference

Wikipedia Reference

【讨论】:

  • +1 我会看一下,但你认为,这对我的情况有好处吗?我有大约 35,000 张选票,每人 700 到 1800 张。
  • 这听起来对我来说是一个理想的匹配。使用一些样本(或真实)数据进行尝试,看看结果是否符合您的要求。
  • 为了完整性,请注意这里的 WR = (Rv + Cm) / (v+m),当您设​​置 H=m 时,这也是我的解决方案(如下)
  • 当 m=0 时,公式为 WR = R = votesAverage。但我说我也想在公式中加入 votesCount...
  • c(整个报告的平均投票数)是什么意思?你能解释一下吗?
【解决方案2】:

如果你真的想以正确的方式去做,reddit 评分算法可能是最好的选择。这是explained in detail herea high level by xkcd author Randall here

问题在于,它并不真正适用于您想要的五星级评级。您应该能够概括 reddit 的排序系统以使用评级。哎呀,它可能已经在某个地方完成了。我去找找。

【讨论】:

  • 由于罗伯特提供了一个很好的五星级评级排序系统示例(并且由于我无法根据统计置信度找到一个),所以我将把它留在这里。在最坏的情况下,您将评分为 3 或更高的评分视为正面,评分为 2 及以下的评分为负面,并将这些结果用作威尔逊评分区间的输入。
  • reddit 算法的重点是找到实际评分的 90% 置信区间的下限。应该很容易将这个从是/否评级概括为 5 星系统。
【解决方案3】:

平衡系统的一个简单方法是添加固定数量的假设用户(比如计数为 H),他们都投票支持所有作品的长期平均 A。假设平均值为 3;那么公式就变成了

分数 = (votesCount x votesAverage + H x A) / (votesCount + H)

现在,当 votesCount 增加时,假设的平均投票者的相对影响会减少。

您可以通过实验设置 H,也可以通过思考来设置。例如。如果您认为 20 票足以建立相对较高的评分,您可以设置 H=5。说吧。

【讨论】:

  • +1 非常有趣的答案。我不认为这对我的情况有好处,因为我不需要显示评分,我需要做的是获得需要获胜的 5。
  • 那么你可以根据这个修改后的分数进行排序,显示最高的5个
【解决方案4】:

我正在为我的音乐文件使用以下方法:

评分以百分比 (0-100) 衡量 未评级的歌曲获得 50% 作为礼物 每次有人为一首歌投票时,它的评分都会增加 每当有人投票反对这首歌时,它的评分就会降低 如果歌曲评分高于 MAX(即 100),则将 MAX 设置为当前歌曲评分 如果歌曲评分低于 MIN,则将 MIN 设置为歌曲评分 在每次更改 MIN 或 MAX 的投票之后,我都会对列表中的每首歌曲进行标准化:

NewRating = (CurrentRating - MIN) *100/(MAX -MIN) 然后我将 MIN 设置为 0,将 MAX 设置为 100。

这种方法让新旧歌曲有平等的机会快速获得正确的评分。此外,每个对最佳和最差歌曲的投票都会影响其他人,我也认为这是正确的做法。

在选择要播放(或投票)的歌曲时,我会生成一个 0-100 范围内的随机数,并搜索评级等于或高于此数字的下一首歌曲。

糟糕的歌曲正在下降并且很少被选择,好的歌曲正在上升并且被更频繁地选择,但我仍然有机会在将来的某个时候播放(投票)甚至最糟糕的歌曲。

【讨论】:

    【解决方案5】:

    这个术语是bayesian estimate

    一个常见的例子:

    贝叶斯评级 = (v*R + m*C)/(v+m)
    其中:
    R = 歌曲的平均评分
    v = 歌曲的票数
    m = 最低票数必须列出(例如 10 首)
    C = 所有首歌曲的平均投票

    【讨论】:

    • 但是当m=0 => Bayesian rating = R.我希望在函数中保留v
    • @Mendy... 所以不要将 m 设置为 0。重点是您要列出评分最高的 10 首歌曲;一首只有 5 票或 6 票的歌曲没有足够的票数来决定(从统计上)它是否比一首 1000 票的歌曲更好或更差,即使第二首歌曲平均有 3.0 颗星,而第一首歌曲全部是 5 颗星跨度>
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2015-08-21
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多