我有一个由俱乐部组成的数据库,人们为他们提供了评级。
目前,我正在根据一家俱乐部的评级进行平均,然后按降序对这些平均值进行排序,以获得评级最高的俱乐部列表。
我遇到的问题是,应该根据你的评分来进行加权一家俱乐部可能会获得5(5.0)的评级,最终排名榜首,而一家俱乐部的评级为16K,平均评级为5.0
我正在寻找的是一种算法,它将评级数量考虑在内,以确保我们使用一种加权算法来查询数据,该算法考虑评级数量。
目前我的算法是:
(sum of club ratings)/(total number of ratings) to give me the average
这不包含权重算法
让我们假设你的评级可以从0k
到100k
(正如你所说的,一些俱乐部有16k
评级)。现在,您希望将其标准化为0k
到5k
的范围。
假设0k
到100k
是实际范围。(A_lower to A_higher)
并且,0k
到5k
是归一化范围。(N_lower到N_higher)
您希望将16k
(即A_rating(实际评级))更改为标准化值N_rating(介于0 to 5k
之间)。
您可以使用的公式是
N-rating = A_rating * ( (N_higher - N_lower) / (A_higher - A_ lower) )
让我们举一个例子
如果实际评级为25k
。实际评级范围为0 to 100k
。你希望它在0 to 5k
之间归一化。然后
N-rating = 25 * ( (5 - 0) / (100 - 0) )
=> N_rating = 1.25
编辑
更多解释
如果存在分布在较大范围内的值,并且我们希望在较小范围内表示它们,则我们进行归一化。
Q)什么是归一化值
如果实际范围(0到100)稍小(0到5),则该值将表示实际值(25k)的确切位置。
Q)为什么我要将标准化范围除以实际范围,然后乘以实际评级
为了理解这一点,让我们使用一点酉方法逻辑。
当范围为0 to 100
时,您有一个值25
,并且想要知道如果范围是0 to 5
,该值将规范化为什么。所以,
//We will take already known values, the highest ones in both the ranges
100 is similar to 5 //the higher value of both the ranges
//In unitary method this would go like
If 100 is 5
//then
1 is (5 / 100)
//and
x is x * (5 / 100) //we put 25 in place of x here
Q)为什么选择0到5k作为归一化范围
我之所以选择,是因为你提到你的评分应该低于5k
。你可以选择你想要的任何范围。
简单地添加一个很小的值加权的评级数怎么样?这只是一个非常基本的想法:
(俱乐部评级总和)/(评级总数)+0.0000000 1*(俱乐部评级数)
通过这种方式,平均水平相同的俱乐部可以根据评级数量进行排名。