День 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;
- Выявление спама или злоупотреблений. Сколько людей, увидевших сообщение, пометят его как спам?
- Создание списка «самого лучшего». Сколько людей, увидевших сообщение, пометят его как «самое лучшее»?
- Создание списка «самого расшариваемого». Сколько людей, увидевших сообщение, нажмут на кнопку «расшарить»?
P.S. Весь блог классный, советую полистать
Evan Miller — пишет классные инструменты для работы с математикой
https://www.evanmiller.org/how-not-to-sort-by-average-rating.html