Как не сортировать по среднему рейтингу

  • Эта публикация - перевод статьи. Ее автор - Evan Miller. Оригинал доступен по ссылке ниже:

ПРОБЛЕМА: Вы программист. У вас есть пользователи. Ваши пользователи оценивают материал на вашем сайте. Вы хотите поместить наивысший рейтинг в верхнем и нижнем рейтинге внизу. Вам нужен какой-то «счет» для сортировки.

НЕПРАВИЛЬНОЕ РЕШЕНИЕ # 1: Оценка = (Положительные оценки) - (отрицательные оценки)

Почему это неправильно: предположим, что у одного элемента 600 положительных оценок и 400 отрицательных оценок: 60% положительных. Допустим, пункт 2 имеет 5500 положительных оценок и 4500 отрицательных оценок: 55% положительных. Этот алгоритм помещает пункт два (оценка = 1000, но только 55% положительных) выше первого пункта (оценка = 200 и 60% положительная). НЕПРАВИЛЬНО.

Сайты, которые делают эту ошибку: Urban Dictionary

НЕПРАВИЛЬНОЕ РЕШЕНИЕ # 2: Оценка = Средняя оценка = (Положительные оценки) / (Всего оценок)

Почему это неправильно: средний рейтинг работает отлично, если у вас всегда есть тонна оценок, но предположим, что позиция 1 имеет 2 положительных рейтинга и 0 отрицательных оценок. Предположим, что позиция 2 имеет 100 положительных оценок и 1 отрицательный рейтинг. Этот алгоритм ставит пункт два (тонны положительных оценок) ниже пункта один (очень мало положительных оценок). НЕПРАВИЛЬНО.

Сайты, которые делают эту ошибку: Amazon.com

ПРАВИЛЬНОЕ РЕШЕНИЕ: Оценка = нижняя граница доверительного интервала счета Уилсона для параметра Бернулли

Скажите, что нам нужно сбалансировать долю положительных оценок с неопределенностью небольшого числа наблюдений. К счастью, математика для этого была разработана в 1927 году Эдвином Б. Уилсоном. Мы хотим спросить: учитывая рейтинги, которые у меня есть, есть вероятность 95%, что «реальная» доля положительных оценок, по крайней мере, такова? Уилсон дает ответ. Учитывая только положительные и отрицательные оценки (т. Е. Не 5-звездную шкалу), нижняя граница доли положительных оценок определяется:

(Используйте минус, где он говорит плюс / минус, чтобы вычислить нижнюю границу.) Здесь p - наблюдаемая доля положительных оценок, z α / 2 - (1-α / 2) квантиль стандартного нормального распределения, а n - общее количество оценок. Та же самая формула, реализованная в Ruby:


require 'statistics2'

def ci_lower_bound(pos, n, confidence)
    if n == 0
        return 0
    end
    z = Statistics2.pnormaldist(1-(1-confidence)/2)
    phat = 1.0*pos/n
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end

pos - это число положительных оценок, nобщее количество рейтингов и confidence относится к статистическому уровню достоверности: выберите 0,95, чтобы иметь 95% шанс, что ваша нижняя граница верна, 0,975, чтобы иметь шанс на 97,5% и т. д. Z- оценка в этой функции никогда не изменяется, поэтому, если у вас нет пакета статистики, или если производительность является проблемой, вы всегда можете жестко закодировать значение здесь z. (Используйте уровень 1,96 для уровня достоверности 0,95.)


Обновление, апрель 2012: Вот иллюстративный оператор SQL, который будет делать трюк, предполагая, что у вас есть widgets таблица с положительными и отрицательными рейтингами, и вы хотите отсортировать их на нижней границе доверительного интервала 95%:

SELECT widget_id, ((positive + 1.9208) / (positive + negative) - 
                   1.96 * SQRT((positive * negative) / (positive + negative) + 0.9604) / 
                          (positive + negative)) / (1 + 3.8416 / (positive + negative)) 
       AS ci_lower_bound FROM widgets WHERE positive + negative > 0 
       ORDER BY ci_lower_bound DESC;

Если ваш босс не считает, что такой сложный оператор SQL мог бы вернуть полезный результат, просто сравните результаты с другими двумя описанными выше методами:

SELECT widget_id, (positive - negative) 
       AS net_positive_ratings FROM widgets ORDER BY net_positive_ratings DESC;

SELECT widget_id, positive / (positive + negative) 
       AS average_rating FROM widgets ORDER BY average_rating DESC;

Вы быстро увидите, что дополнительный бит математики делает все хорошее вещество пузырьком вверх. (Но перед запуском этого SQL в массивной базе данных поговорите с вашим дружественным администратором базы данных о правильном использовании индексов.)

Обновление, март 2016 года. Вот такая же формула в Excel:

=IFERROR((([@[Up Votes]] + 1.9208) / ([@[Up Votes]] + [@[Down Votes]]) - 1.96 * 
    SQRT(([@[Up Votes]] *  [@[Down Votes]]) / ([@[Up Votes]] +  [@[Down Votes]]) + 0.9604) / 
    ([@[Up Votes]] +  [@[Down Votes]])) / (1 + 3.8416 / ([@[Up Votes]] +  [@[Down Votes]])),0)

Я изначально разработал этот метод для генератора фактов в стиле Чака Норриса в честь одного из моих профессоров, но с тех пор он попал в такие места, как RedditYelp и Digg.

ДРУГИЕ ПРИМЕНЕНИЯ

Разумеется, доверительный интервал Уилсона не только для сортировки. Это полезно, когда вы хотите знать с уверенностью, какой процент людей принял какое-то действие. Например, его можно использовать для:

  • Обнаружение спама / злоупотребления: Какой процент людей, которые видят этот товар, будет отмечать его как спам?
  • Создайте «лучший из» списка: какой процент людей, которые видят этот элемент, будет отмечать его как «лучший»?
  • Создайте список «Самый по электронной почте»: какой процент людей, которые видят эту страницу, нажмет «Электронная почта»?

В самом деле, может оказаться более полезным в списке «рейтинг», чтобы отображать те элементы с наибольшим количеством положительных оценок на странице просмотра, загрузки или покупки , а не положительные рейтинги за рейтинг. Многие люди, которые находят что-то посредственное, не потрудились оценить его вообще; акт просмотра или покупки чего-либо, а также отказ от его оценки, содержит полезную информацию о качестве этого предмета.

ИЗМЕНЕНИЯ

  • 20 апреля 2016: Добавлена ​​реализация Excel (благодаря Алессандро Аполлони)
  • 4 апреля 2012: Новая реализация SQL
  • 13 ноября 2011 года. Исправлен статистический уровень доверия и измененный пример кода соответственно.
  • 15 февраля: Уточнен пример статистической мощности
  • 13 февраля II: «Другие приложения»
  • 13 февраля: общее разъяснение, а также ссылка на соответствующую статью в Википедии.
  • 12 февраля 2009 г. Пример в «Неправильном решении №1» был ошибочным. Он исправлен.

РЕКОМЕНДАЦИИ

  1. Биномиальный доверительный интервал доли (Википедия)
  2. Агрести, Алан и Брент А. Кулл (1998), «Приближенное лучше, чем« точное »для интервальной оценки биномиальных пропорций», американский статистик 52, 119-126.
  3. Вильсон, Э.Б. (1927), «Вероятный вывод, закон преемственности и статистический вывод», журнал Американской статистической ассоциации , 22, 209-212.