объекты без рейтинга по сравнению с объектами с отрицательным рейтингом с оценкой Уилсона, как справиться?

Прочитав Как не сортировать по среднему рейтингу Я подумал, что должен попробовать.

CREATE FUNCTION `mydb`.`LowerBoundWilson95` (pos FLOAT, neg FLOAT)
RETURNS FLOAT DETERMINISTIC
RETURN
IF(
    pos + neg <= 0,
    0,
    (
        (pos + 1.9208) / (pos + neg)
        -
        1.96 * SQRT(
            (pos * neg) / (pos + neg) + 0.9604
        )
        / (pos + neg)
    )
    /
    (
        1 + 3.8416
        / (pos + neg)
    )
);

Проведя некоторые тесты, я обнаружил, что объекты с pos=0 и neg>0 имеют очень маленькие, но неотрицательные оценки, тогда как объект с pos=neg=0 имеет нулевую оценку, что означает более низкий рейтинг.

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

Я рассудил, что «все индивидуальные оценки на самом деле являются выражением отклонения от некоторой базовой линии, поэтому я сдвину базовую линию, я дам каждому объекту «нейтральную» начальную оценку», поэтому я пришел к следующему выводу:

CREATE FUNCTION `mydb`.`AdjustedRating` (pos FLOAT, neg FLOAT)
RETURNS FLOAT DETERMINISTIC
RETURN
(
    SELECT `mydb`.`LowerBoundWilson95` (pos+4, neg+4)
);

Вот несколько примеров выходных данных для AdjustedRating

  \  pos  0       1       2
neg
 0   | 0.215 | 0.188 | 0.168
 1   | 0.266 | 0.235 | 0.212
 2   | 0.312 | 0.280 | 0.235

Это ближе к тому типу оценок, которые я хочу, и как численный хак, я думаю, это работает, но я не могу математически обосновать это

Есть ли лучший способ, «правильный» способ?


person spraff    schedule 02.10.2012    source источник
comment
Может ли это быть частично проблемой с плавающей запятой/округлением? Я реализовал этот алгоритм на Python, и здесь pos=0 и neg>0 я получаю 0.0, т.е. элементы без рейтинга и с пониженным рейтингом равны. Все еще не то, что вы хотите, ваше смещение, кажется, работает хорошо   -  person Anentropic    schedule 22.01.2014


Ответы (1)


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

В качестве альтернативы мы используем байесовскую статистику, которая является формализацией именно второго описанного вами метода. На самом деле у Эвана Миллера был дополняющий пост, в котором он сказал:

Решение, которое я предложил ранее — использование нижней границы доверительного интервала вокруг среднего — это то, что программисты называют взломом. Это работает не потому, что это универсально оптимальное решение, а потому, что оно примерно соответствует нашему интуитивному пониманию того, что мы хотели бы видеть в верхней части списка лучших: элементы с наименьшей вероятностью быть плохими, учитывая данные. .

Байесовская статистика позволяет нам формализовать эту интуицию...

Используя подход байесовского ранжирования, любая точка, которая имеет нулевые данные, вернется к предыдущему среднему (то, что вы называете исходной оценкой), а затем отойдет от нее по мере сбора данных. Этот же подход используется в IMDB для составления списков лучших фильмов. https://math.stackexchange.com/questions/169032/understanding-the-imdb-weighted-rating-function-for-usage-on-my-own-website

Конкретный метод, который вы предлагаете для зачисления каждому объекту 4 голосов за и 4 против, эквивалентен присвоению среднего значения 0,5 с весом 8 голосов. Учитывая отсутствие каких-либо других данных, это разумное начало. Лаплас классно утверждал в проблеме восхода солнца, что событиям следует приписывать 1 успех и 1 неудачу. В задаче о ранжировании элементов у нас гораздо больше знаний, поэтому имеет смысл установить априорное среднее значение, равное среднему рейтингу. Вес этого априорного среднего (или то, как быстро вы отклоняетесь от него в зависимости от данных, также называемое априорной дисперсией) может быть сложно установить.

Для рейтинга 250 лучших фильмов IMDB они используют средний рейтинг фильма 7,1 с весом 25 000 голосов, что эквивалентно рассмотрению всех фильмов, как если бы они начали с 25 000 бесплатных голосов с рейтингом 7,1.

person bscan    schedule 07.05.2015
comment
Спасибо, это очень интересно, но если вам нужна нижняя граница для элементов с наивысшей оценкой и верхняя граница для элементов с наименьшей оценкой, как у вас есть единая формула для ранжирования всех элементов? Что, если все рейтинги интересующего подмножества отрицательные или отсутствуют? Я бы хотел, чтобы одна и та же формула работала во всех ситуациях. - person spraff; 16.05.2015
comment
Подход байесовского ранжирования заменяет как верхнюю, так и нижнюю доверительные границы, используя среднее значение, которое возвращается к общемировому среднему, когда данных мало. Например, IMDB использует ту же формулу для составления своих лучших фильмов, а также списка худших фильмов всех времен. Если ранжирование недоступно, элемент просто получает глобальное среднее значение и, таким образом, занимает среднее место среди всех элементов. - person bscan; 18.05.2015