我有一个PHP评级系统(1-5),其中,一些评委来评价一些产品。我希望这些产品的结果是公平的。通常情况下,一些评委会非常严格,可能只对1-2的产品进行评分。有些评委认为产品只在4-5范围内。有些人在1-5之间正确判断。
有些人可以提出一个想法或帮助创建一个平均评判算法,可以扩展评委的评分并计算产品评分。
我想在所有产品上取得评判分数的平均值,但这是前进的方式,或者某个人有另一个好的选择来获得公平的结果。
修改
评级系统不适用于电子商务应用程序。这里只有少数评委说10名评价所有产品。例如,该产品可能是比赛中的歌曲。有些法官可能非常严格,有些非常自由。可能有几场比赛,所以我必须记录这些非常严格和自由的法官的评级,甚至是其他比赛,并为他们制定规则。
答案 0 :(得分:0)
听起来您可能正在尝试将算法解决方案应用于非算法问题。我想为什么有些“法官”只投票1-2票而其他人只投票4-5票。
一个可能的原因可能是自我选择。例如,在线购买物品的人如果对他们的购买特别失望或特别满意,则更有可能审查该物品。如果这是你的问题,你可以尝试鼓励购物者投票更多,这样即使那些有非极端经历的人也会回来投票。
另一个可能的问题可能是指导。也许你对评级系统的解释并不清楚。您可以尝试添加每个评级的含义说明,看看是否可以提高数据质量。
总之,任何一种解决您的评级问题的方法都需要有一个“人”组件,并考虑到评委如何选择评级及其原因的完整故事。如果您的输入数据质量很差,排名算法可以做很多事情。另一方面,如果你的数据质量很好,那么平均值就可以了。
采取平均值的一个不相关的问题是,具有一个五星评级的项目将排名高于具有百五星评级的项目+一个四星评级。一个简单的解决方案是拉普拉斯平滑,它通过以每个值(1,2,3,4,5)的一票投票有效地启动每个项目来解决问题。您不显示“平滑”值,但在排序时使用它们。有关备用解决方案,请参阅How Not To Sort By Average Rating帖子。
答案 1 :(得分:0)
truncated mean怎么样? Here是对这个想法的一个很好的解释。
修改强>
假设您有以下投票:[1,4,3,2,5,1,1,3,2,4]
。
您需要按升序对数组进行排序,为您提供:[1,1,1,2,2,3,3,4,4,5]
。
然后让我们说你想要摆脱25%的选票,即3
(四舍五入)。你只需从左边和右边丢弃三张投票,给你[2,2,3,3]
。
然后,使用算术平均值得到2.5
。
编辑2
根据您的数据库架构,您可以查询数据库以按升序返回投票。然后,计算百分比,使用array_slice()
来帮助您(阅读documentation)并计算算术平均值是您现在最不关心的问题。
答案 2 :(得分:0)
简单地说,你根据他们的典型投票范围给法官分配一个权重(注意,他们一定不会意识到这个权重,否则他们会抛弃系统。)总是投票给一个分数的评委得到最轻的重量。赋予各种分数的评判被认为更准确。
这也假设这些法官判断的产品质量合理;因此,如果你给他们一堆好的或坏的产品,并期望一系列的投票水平,这可能是不现实的。
你所寻找的是具有最高权重的最高标准差(最高变异)的法官,而具有最低权重的法官具有最低权重。
非算法解决方案(基本上)是在裁判上运行算法,然后挑选美国偶像风格,判断彼此平衡以获得感觉准确的结果。在这种情况下,你要注意平均投票和标准偏差,也许设置三个评判,一个具有较宽的标准差,然后两个较窄,一个高,一个低(自由和严格)来判断它。通过这种方式,他们感觉不到“声音不那么”,因为它们更严格或更宽松。
然后,这可能是他们变得更少/更严格的推动力 - 如果他们在产品上过于容易或过于努力,他们就会“失声”。