algorithm - 评价餐厅的抗偏算法

标签 algorithm math statistics prediction equation

我正在开发一个餐厅应用程序,用户可以在逻辑上对餐厅进行评分,例如 10 人的评分方程如下:
用户可以从 1 到 5 评分
9 评分为 5
1 已评价 1
方程是((9*5)+(1*1))/10(人的总和)=46/10=4.6
答案是 4.6,这是不公平的,因为 1 人的低利率使结果下降到 4.6 在我看来结果应该是 4.9 我搜索并发现了一个叫做算法偏差的东西我不太理解,zomato 应用公司找到了一个解决方案对于这种情况,喜欢在低评级和虚假评级中保持公平

所以谁能帮我一个公平的方程或算法

最佳答案

算法偏差

这个问题远非微不足道。事实上,它根本无法解决。至少不是你认为的数学方式。我将首先尝试通过几个示例来解释算法偏差:

亚马逊训练了一个人工智能来做出招聘决定。一段时间后,他们意识到人工智能更喜欢男性而不是女性申请人,因为这种偏见也出现在训练数据集中。在这种情况下,判断人工智能是否有不公平的偏见是相当微不足道的。

假设我设置了另一个 AI,它也决定邀请哪些申请人参加面试。现在我向亚马逊学习,并通过简单地删除性别、姓名或种族等细节来避免性别偏见。不,我的 AI 既不能是种族主义者,也不能是性别歧视者,所以应该是公平的,对吧?好吧,我的 AI 了解到,最好雇用 30 岁左右的申请人,因为他们有最先进技术的经验,而且对这个行业并不陌生。这对公司来说是理想的(可能至少——我会忽略那个细节,为了简单起见只是假设它)。但是现在我们忽略了新人和超过一定年龄的人。这公平吗?越来越模糊了

之前描述的 AI 被认为是不公平的,现在我还确保新的 AI 忽略了年龄。它现在对待新人的方式与对待 30 岁和年长者的方式相同。所以现在是公平的,对吧?但是现在它不太在乎申请人的经验,并且会给没有线索的人提供与投入时间和金钱来获得经验的人相同的机会。那么公平吗?好吧,我几乎无法回答这个问题

或者最后但并非最不重要的一点:对这个问题的评论已经表明定义什么是(不)公平是多么棘手。对于剩下的问题,我将假设您提出的评级方案是公平的。

修改评级评估的可能方法

有很多方法可以替代地编译评级。我只会展示两个简单的选项来实现你想要的,尽管肯定有很多方法可以用一点创造力来弄乱数字。

Median

中位数是一个很好的统计工具,可以消除由评级中的一些异常值引起的偏差。通常中位数计算为排序列表中间的值 - 或者如果评级数甚至是两个中间值的平均值。

def median(arr):
    if len(arr) % 2 == 1:
        return sorted(arr)[len(arr) // 2]
    else:
        i = len(arr) // 2
        return sum(sorted(arr)[i - 1 : i + 1]) / 2

对于具有 9 个 5 星评级和 1 个 1 星评级的示例,结果将是 5。公平吗?可能不会,因为这将以相同的方式处理任何不等于中位数的评级。 IE。对于上面的用户评分,最后一个用户给一星还是四星都没有区别。另一方面,对于具有极端异常值的偏斜数据,该统计数据非常稳健。所以无论如何它都不是正确的工具。

结合中位数和算术平均值

这个创建的结果更接近您的预期 - 4.8。我们不再完全忽略异常值,但我们给予它们的权重要小得多。所以总的来说,这个评级对最常见的观点有很大的偏见,但并没有像以前那样赋予它那么多的值(value)。

甚至可以添加中位数和平均值的权重,以调整对异常值的权重:
def weighted_rating(arr, w):
    arithm = sum(arr) / len(arr)
    m = median(arr)

    return m * w + arithm * (1 - w)

上述代码中w应介于 0(仅算术平均值)和 1(仅中位数)之间。对于 w = 0.75 ,评分为 4.9。因此,为了获得这样的评级,中位数的权重是平均值的两倍。

编辑:

一种以更公平的方式处理异常值的实用方法是 @user3386109's answer .我的回答主要是为了展示“公平”统计数据的复杂性,而不是提供任何实际的算法来计算评级。

关于algorithm - 评价餐厅的抗偏算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568769/

相关文章:

algorithm - 两个矩形相交

java - 搜索数组

php - 从数字数组生成字符串范围(1-10、13、16、17-25.. 等)的算法

c - 模乘法(C 语言)

mysql - 带有连接的 SQL 查询计算每条记录的多个结果按计数排序

optimization - 计算 Redis 中 index(zset) 之间关联了多少个元素

R:mle() 错误的问题:非有限有限差分值 [2]

c++ - 字符串匹配算法

python - 根据它们的交集在成对的项目中找到一条路径

c# - 计算一个位置与许多其他位置之间的接近度