October 31, 2021

День 130. How Not To Sort By Average Rating

1. У вас есть пользователи. Пользователи оценивают, например, видео. И вам нужно поднять в топ лучшие видео, отсортировать от худших к лучшим. Нужна оценка для каждого видео.

2. Неправильное решение #1. Рейтинг = (количество лайков) - (количество дизлайков). Почему это неверно: Допустим, одно видео набрало 600 лайков и 400 дизлайков, 60% положительных отзывов. А другое видео собрало 5.5к лайков и 4.5к дизлайков, 55% положительных оценок. Алгоритм поставит второе видео (оценка 1000, но 55% лайков) выше чем первое (у которого оценка 200, и 60% лайков).

3. Неправильное решение #2. Рейтинг = Средняя оценка = (Количество лайков) / (Всего оценок). Почему это неверно: Средняя оценка работает, если у вас много оценок. Представим, что у первого видео 2 лайка и 0 дизлайков, а у второго видео 100 лайков и 2 дизлайка. В этом случае алгоритм поставит второе видео (где много лайков) ниже первого видео (у которого очень мало лайков).

4. Правильное решение. Нужно сбалансировать процент лайков и неопределенность небольшого числа оценок. В общем виде задача звучит так: При текущем распределении оценок, какой в итоге будет минимально возможный процент лайков с уверенностью 95%? Формула работает только с лайками, оценки в 1-5 звезд не подходят. Эту задачу решил Эдвин Вильсон в 1927 году. Решение гуглится по запросу "Нижняя граница доверительного интервала оценки Вильсона для параметра Бернулли".

5. Расчет рейтинга в SQL, по ссылке в статье больше примеров:

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;

5. Варианты применения:

- Выявление спама или злоупотреблений. Сколько людей, увидевших сообщение, пометят его как спам?

- Создание списка «самого лучшего». Сколько людей, увидевших сообщение, пометят его как «самое лучшее»?

- Создание списка «самого расшариваемого». Сколько людей, увидевших сообщение, нажмут на кнопку «расшарить»?

P.S. Весь блог классный, советую полистать

Evan Miller — пишет классные инструменты для работы с математикой

https://www.evanmiller.org/how-not-to-sort-by-average-rating.html