为简单起见,我们有一组可能的分数{0,1,2}。有没有办法根据分数计算平均值而不进入毛茸茸的查找表等95%置信区间计算?
dreeves在此发布了一个解决方案:How can I calculate a fair overall game score based on a variable number of matches?
现在说我们有2个场景......
情景A)2票2的值导致SE = 0,导致均值为2
场景B)10000票值2导致SE = 0,导致均值为2
我希望场景A的值小于2,因为投票数很少,但似乎这个解决方案似乎没有处理(当你的集合中没有所有值等于dreeve的等式时)彼此)。我错过了什么或者是否有其他算法可以用来计算更好的分数。
我可以获得的数据是:
谢谢!
答案 0 :(得分:4)
你可以在排名结果时给它一个加权分数,而不是只显示到目前为止的平均投票,乘以一些投票数的函数。
C#中的一个例子(因为那是我碰巧最了解的......),可以很容易地翻译成您选择的语言:
double avgScore = Math.Round(sum / n);
double rank = avgScore * Math.Log(n);
这里我使用了n
的对数作为加权函数 - 但只有在投票数不是太小或太大的情况下它才能正常工作。 “最佳”究竟有多大取决于您希望投票数量的重要程度。
如果您喜欢对数方法,但基数10
与您的投票计数无关,则可以轻松使用其他基数。例如,要在基础3
中执行此操作:
double rank = avgScore * Math.Log(n, 3);
您应该使用哪种功能进行称重最好取决于您希望达到的投票数量级。
您还可以通过定义
来使用自定义加权函数double rank = avgScore * w(n);
其中w(n)
根据投票数返回权重值。然后根据需要定义w(n)
,例如:
double w(int n) {
// caution! ugly example code ahead...
// if you even want this approach, at least use a switch... :P
if (n > 100) {
return 10;
} else if (n > 50) {
return 8;
} else if (n > 40) {
return 6;
} else if (n > 20) {
return 3;
} else if (n > 10) {
return 2;
} else {
return 1;
}
}
答案 1 :(得分:0)
如果你想在我的其他参考答案中使用这个想法(谢谢!)平均使用悲观的下界,那么我认为需要注入一些额外的假设/参数。
为了确保我理解:凭10000票,每一票都是“2”,你非常确定真正的平均值是2.有2票,每张都是“2”,你很不确定 - - 也许有些0和1会进来并降低平均值。但是如何量化,我认为是你的问题。
这是一个想法:每个人都从一些“行李”开始:单个幻影投票“1”。具有2个真正“2”票的人将具有平均(1 + 2 + 2)/ 3 = 1.67,其中具有10000个真正“2”票的人将具有平均1.9997。仅此一项就可以满足您的标准。或者,为了增加悲观的下限想法,有2票的人将有一个悲观的平均得分为1.333,拥有10k票的人将为1.99948。
(绝对确定你永远不会有零标准错误的问题,使用两个不同的幻影投票。或者使用尽可能多的幻影投票,因为有可能的投票值,每个值一票。)