Как рассчитать среднее значение на основе количества голосов / баллов / образцов / и т. Д.? - PullRequest
1 голос
/ 22 мая 2009

Для простоты, скажем, у нас есть примерный набор возможных баллов {0, 1, 2}. Есть ли способ рассчитать среднее значение на основе количества баллов, не заходя в таблицы поиска волос и т. Д., Для расчета доверительного интервала 95%?

Древес опубликовал решение этой проблемы здесь: Как я могу рассчитать справедливый общий счет игры на основе переменного количества матчей?

Теперь скажите, что у нас есть 2 сценария ...

Сценарий A) 2 голоса значения 2 приводят к SE = 0, в результате чего среднее значение равно 2

Сценарий B) 10000 голосов значения 2 приводят к SE = 0, в результате чего среднее значение равно 2

Я хотел, чтобы Сценарий A имел значение меньше 2 из-за малого количества голосов, но, похоже, это решение не справляется с этим (уравнения Дрива выполняются, когда в вашем наборе не все значения равны друг с другом). Я что-то упустил или есть другой алгоритм, который я могу использовать для расчета лучшего результата.

Доступные мне данные:

  • n (количество голосов)
  • сумма (сумма голосов)
  • {набор голосов} (все значения голосов)

Спасибо!

Ответы [ 2 ]

4 голосов
/ 22 мая 2009

Вы можете просто дать ему взвешенную оценку при ранжировании результатов, в отличие от простого отображения среднего числа голосов, пока умноженного на некоторую функцию количества голосов.

Пример на C # (потому что это то, что I знает лучше всего ...), который можно легко перевести на ваш язык:

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;
    }
}
0 голосов
/ 22 мая 2009

Если вы хотите использовать в моем другом ссылочном ответе (спасибо!) Идею об использовании пессимистической нижней границы в среднем, тогда я думаю, что некоторые дополнительные предположения / параметры необходимо будет ввести.

Чтобы убедиться, что я понимаю: с 10000 голосами, каждый из которых равен "2", вы уверены, что истинное среднее значение равно 2. С 2 голосами, каждый из которых "2", вы очень не уверены - - может быть, некоторые 0 и 1 придут и снизят среднее. Но как определить это, я думаю, это ваш вопрос.

Вот идея: каждый начинает с некоторого «багажа»: одного фантомного голосования «1». Человек с 2 истинными «2» голосами будет в среднем иметь (1 + 2 + 2) / 3 = 1,67, тогда как человек с 10000 истинными «2» голосами будет в среднем 1,9997. Одно это может удовлетворить ваши критерии. Или, если добавить пессимистическую идею нижней границы, человек с двумя голосами будет иметь средний пессимистический балл 1,333, а человек с 10 тысячами голосов - 1,99948.

(Чтобы быть абсолютно уверенным, что у вас никогда не возникнет проблема нулевой стандартной ошибки, используйте два разных фантомных голоса. Или, возможно, используйте столько фантомных голосов, сколько есть возможных значений голосов, по одному голосу с каждым значением.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...