如何根据票数/分数/样本/等计算平均值?

Posted

技术标签:

【中文标题】如何根据票数/分数/样本/等计算平均值?【英文标题】:How to calculate mean based on number of votes/scores/samples/etc? 【发布时间】:2010-10-28 01:22:34 【问题描述】:

为简单起见,假设我们有一组可能的分数 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 的方程成立彼此)。我是否遗漏了什么,或者是否有其他算法可以用来计算更好的分数。

我可以得到的数据是:

n(票数) sum(总票数) set of votes(所有投票值)

谢谢!

【问题讨论】:

所以您正在寻找加权平均数?即权重越大的平均值越多。 是的,我想它也可以这样工作。较低的权重获得较少的选票,或者较高的权重获得更多的选票。 【参考方案1】:

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

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 向上 我认为权重函数是迄今为止最容易实现的(并且在许多情况下运行速度最快),但它确实有其局限性。但是,通过对数方法,您还可以使用 Math.Log(n, b) 方法(其中 b 是基数)来获得更快或更慢的增长影响。我也编辑了我的帖子以反映这一点。【参考方案2】:

如果您想在我的其他参考答案(谢谢!)中使用平均悲观下限的想法,那么我认为需要注入一些额外的假设/参数。

为了确保我理解:如果有 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。

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

【讨论】:

谢谢丹尼尔。您的方法似乎与上面的 Tomas 相似,其中您有一个功能来说明较低的票数。我想这很简单,因为它对准确性并不是非常重要(我只是在创建一个近似值)这应该可以正常工作。

以上是关于如何根据票数/分数/样本/等计算平均值?的主要内容,如果未能解决你的问题,请参考以下文章

从平均值和标准差计算 Z 分数

如何计算 PyTorch 中注意力分数和编码器输出的加权平均值?

根据样本数据计算置信区间

如何用matlab计算样本均值和方差

方差如何计算,为啥要计算方差?

如何根据概率密度函数生成随机数