我有一个由俱乐部组成的数据库,以及人们为他们提供的评分。
目前,我正在根据俱乐部执行平均评分,然后按降序对这些平均值进行排序,以获得评分最高的俱乐部列表。
我遇到的问题是应根据您拥有的评分数量进行一些加权。 一个俱乐部可能会获得5(5.0)的评分,并最终排在榜单的顶部,对抗一个拥有16K评级且平均评分为5.0的俱乐部。
我正在寻找的是算法,该算法会考虑评级数量,以确保我们使用加权算法查询数据,该算法会考虑评级数量。
目前我的算法是:
(sum of club ratings)/(total number of ratings) to give me the average
这不包含权重算法
答案 0 :(得分:0)
让我们假设您的评分可以从0k
变为100k
(正如您所说,某些俱乐部的评分为16k
)。现在,您希望将其标准化为0k
到5k
的范围。
让我们说0k
到100k
是实际范围。 (A_lower到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
修改强>
再解释一下
我们normalization,如果有大范围传播的值,我们希望将它们表示在较小的范围内。
问:什么是标准化值。
如果实际范围(0到100)稍微小一点(0到5),那么该值将代表实际值(25k)的确切位置。
问:为什么我将标准化范围除以实际范围,然后乘以实际评级。
要理解这一点,让我们使用一些单一的方法逻辑。
当范围为25
时,您有一个值0 to 100
,并且如果范围为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
。您可以选择任何您想要的范围。
答案 1 :(得分:0)
如果简单地添加一个非常小的价值加权等级呢? 这只是一个非常基本的想法:
(分数总和)/(评分总数)+ 0.00000001 *(分数评分数)
这样,具有相同平均值的俱乐部按评分数排名。