1

为简单起见,假设我们有一组可能的分数 {0, 1, 2}。有没有一种方法可以根据分数的数量计算平均值,而无需进入毛茸茸的查找表等来计算 95% 的置信区间?

dreeves 在这里发布了一个解决方案:如何根据可变数量的比赛计算公平的整体游戏得分?

现在说我们有两种情况......

场景 A) 2 票值为 2 导致 SE=0 导致平均值为 2

场景 B) 10000 票值为 2 的结果为 SE=0,导致平均值为 2

由于投票数较少,我希望场景 A 的值小于 2,但似乎该解决方案无法处理该问题(当您的集合中的所有值不相等时,dreeve 的方程成立) . 我是否遗漏了什么,或者是否有另一种算法可以用来计算更好的分数。

我可用的数据是:

  • n(票数)
  • sum(总票数)
  • {一组投票}(所有投票值)

谢谢!

4

2 回答 2

4

你可以在对结果进行排名时给它一个加权分数,而不是仅仅显示到目前为止的平均投票,通过乘以投票数的某个函数。

C# 中的一个示例(因为这是碰巧最了解的......)可以很容易地翻译成您选择的语言:

double avgScore = Math.Round(sum / n);
double rank = avgScore * Math.Log(n);

在这里,我使用了 的对数n作为加权函数——但它只有在投票数既不太小也不太大的情况下才有效。究竟有多大是“最佳”取决于您希望选票数量有多重要。

如果您喜欢对数方法,但 base10并不真正适用于您的投票计数,您可以轻松地使用另一个 base。例如,要在 base 中执行此操作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;
    }
}
于 2009-05-21T20:54:03.930 回答
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。

(为了绝对确保您永远不会遇到零标准错误的问题,请使用两个不同的幻影投票。或者也许使用尽可能多的幻影投票,因为有可能的投票值,每个值一票。)

于 2009-05-21T21:26:01.870 回答