我正在开发实施星级评分系统的代码,允许用户在1&之间进行评分。 5星。它不是显示项目的实际评级,而是使用此算法:
( rating_votes / ( rating_votes+10 ) ) * ( rating_total/rating_votes ) ) + ( 10 / ( rating_votes+10 ) ) * 4
基于我的直觉,似乎这样做的目的是将评级默认为" 4星"并且在10票以下时不要太快降低评级。
有谁知道这个算法的数学名称是什么?它的实现也可以简化并仍然产生相同的输出吗?
答案 0 :(得分:6)
这被称为“贝叶斯平均值”,是加性平滑的变体。基本的想法是,您预先加载一个新的估算器,预先估计“实际”平均值可能是什么,然后将额外的投票添加到现有证据中。这意味着需要大量投票来平均上调或下调。
是的,它的实现可以简化。有关基本公式,请参阅https://en.wikipedia.org/wiki/Bayesian_average。
答案 1 :(得分:6)
我得到了:
(rating_votes / ( rating_votes +10 )) * ( rating_total / rating_votes ) +
( 10 / ( rating_votes +10 ) ) *4
= (rating_total / (rating_votes + 10)) + (40 / (rating_votes + 10))
= (rating_total + 40) / (rating_votes + 10)
......你似乎错过了一个开场支架,但这是你的意思吗?如果是这样,那么你的直觉是正确的 - 它假装有10个人投了票#4;' 4'在其他人跳入之前。
除了整数舍入之外,根据您的语言,简化应该会产生相同的结果。
答案 2 :(得分:4)
你是对的 - 最终评级可以改写为
final = (1-f) * rating + f * 4
因素f
决定"实际"评级很重要"默认" 4
。
现在你必须说服自己f
可以写成
f = 10 / (votes + 10)