Как работает рейтинг игр на ИграйТут: разбор алгоритма
В каталоге тысячи оценок, но одна из них 4.5, а другая 4.6. Рассказываем, как мы считаем рейтинг и почему он отличается от простого среднего.
Рейтинг в любом каталоге, будь то Amazon, Кинопоиск или наш ИграйТут это всегда компромисс. Одна игра получила 5 оценок подряд «5 звёзд», у неё рейтинг 5.0. Другая получила 1000 оценок, в среднем 4.8. Какая лучше?
Правильный ответ: вторая, с большим отрывом. Но простое «среднее арифметическое» этого не покажет. Рассказываем, как мы считаем рейтинг и почему алгоритм хитрее, чем кажется.
Проблема простого среднего
Допустим, у игры 3 оценки: две по 5 звёзд и одна 1 звезда. Среднее: (5 + 5 + 1) / 3 = 3.67. Но достаточно ли трёх оценок, чтобы сделать вывод? Нет.
Ты можешь зайти в игру, увидеть рейтинг 3.67 и подумать «так себе». А на самом деле игра могла бы заслуживать 4.5 или 2.5, просто данных недостаточно.
Это и называется статистической неопределённостью. И её надо учитывать в алгоритме.
Wilson score: как мы делаем
На ИграйТут мы используем алгоритм под названием Wilson score (или нижняя граница доверительного интервала Уилсона). Это стандартный подход для сайтов с оценками, которое используют Reddit, Steam, Yelp и другие.
Упрощённо: Wilson score считает не «среднее оценок», а «какой вероятный минимальный настоящий рейтинг игры учитывая количество оценок». Чем больше оценок, тем ближе результат к настоящему среднему. Чем меньше, тем сильнее рейтинг «штрафуется» за неопределённость.
Пример:
Игра A: 5 оценок по 5 звёзд. Простое среднее,5.0. Wilson score, 4.0. Потому что 5 оценок это мало для уверенности.
Игра B: 1000 оценок, среднее 4.6. Wilson score, 4.58. Потому что 1000 оценок это статистически значимо.
На главной каталога выше окажется B, потому что в её оценке мы уверены больше.
Формула (для любознательных)
Не буду мучить тебя математикой, но общая идея такая:
$$\text{Wilson} = \frac{\hat{p} + \frac{z^2}{2n} - z\sqrt{\frac{\hat{p}(1-\hat{p})}{n} + \frac{z^2}{4n^2}}}{1 + \frac{z^2}{n}}$$
Где: - p̂, доля положительных оценок - n, общее число оценок - z, коэффициент доверия (обычно 1.96 для 95% уверенности)
На практике мы не заставляем игроков это считать. Всё делается на сервере при каждой новой оценке, рейтинг пересчитывается автоматически.
Защита от накруток
Рейтинг это ценный ресурс, а значит его будут накручивать. Три защиты, которые мы применяем:
1. Минимум 5 минут игры
Оставить отзыв можно только если ты действительно сыграл в игру не менее 5 минут. Это отсеивает большинство ботов и троллей, которые заходят, ставят 1 звезду, выходят. Мы трекаем время через SDK (или через полноэкранное окно игры).
2. Один аккаунт, одна оценка
Нельзя поставить несколько оценок с одного аккаунта. Если изменил мнение, можешь отредактировать существующую, но не добавить новую. Это важно для случаев, когда игра обновилась, и оценка устарела.
3. IP и fingerprint дедупликация
Если с одного IP или device-fingerprint приходит много оценок одной игре, они попадают в очередь модерации. Не блокируются сразу (чтобы не обвинять ошибочно), но помечаются как подозрительные. Если паттерн подтверждается, оценки удаляются, аккаунты банятся.
Что показываем пользователю
В карточке игры мы показываем:
Звёздный рейтинг (округление Wilson score до одного знака). Количество оценок в скобках. Распределение оценок (сколько 5-звёздочных, сколько 1-звёздочных) при наведении на рейтинг.
Последнее это важно: игра с рейтингом 4.0 может быть поляризующей (половина ставит 5 звёзд, половина 1 звезду, нет промежуточных). Или нормальной (большинство 4 звезды, немного 3 и 5). В первом случае стоит читать отзывы внимательнее.
Отличие «топа» от «новинок»
В каталоге есть три сортировки:
Популярные, по количеству игроков в неделю. Не учитывает рейтинг напрямую. Новинки, по дате публикации. Топ, по Wilson score.
У каждой свой смысл. «Популярные» это что сейчас на хайпе, может быть хорошим или плохим. «Новинки», что только что появилось. «Топ», что реально хорошо по оценкам игроков.
Проблемы: которые мы знаем
Wilson score это хорошо, но не идеально. Есть случаи, где он проигрывает:
Первое. Старые игры с кучей старых оценок. Игра вышла в 2022 году, собрала 10000 оценок в среднем 4.5, потом обновилась, и обновление плохое. Текущее качество 3.5, но алгоритм ещё долго будет показывать 4.5, пока новые оценки не «разбавят» старые.
Второе. Манипуляция через рассылку. Если разработчик рассылает в свой Telegram-канал «поставьте нам 5 звёзд» это сложно обнаружить. Все оценки настоящие, от настоящих пользователей. Но массовость подозрительна.
Третье. Троллинг через review-бомбинг. Если игра поссорилась с комьюнити, за день могут прилететь тысячи 1-звёздочных оценок. Rate-limit на 10 оценок в минуту с IP смягчает, но не решает полностью.
Над этими случаями мы работаем. В v1.1 планируем: - Weighted rating с учётом времени (недавние оценки важнее старых) - Fraud detection на базе AI для обнаружения массовых паттернов - Reputation score для пользователей, чтобы оценки опытных игроков весили больше
Как ты можешь помочь
Хорошие рейтинги формируются сообществом. Если играешь в игру и у тебя есть мнение:
Первое. Оставь оценку и отзыв. Особенно если мнение необычное (все пишут что игра хороша, а тебе не зашло, или наоборот). Ты помогаешь следующим игрокам принять правильное решение.
Второе. Голосуй за полезные отзывы. У каждого отзыва есть кнопки «👍 полезный» и «👎 не полезный». Полезные показываются первыми, и это улучшает опыт для всех.
Третье. Жалуйся на спам. Если видишь явно накрученный отзыв или спам, нажми «Пожаловаться». Модераторы разберутся.
Итого
Рейтинг на ИграйТут это не «среднее арифметическое», а Wilson score с защитой от накруток. Мы показываем не только звёзды, но и количество оценок, распределение, сортировки с разной логикой. Цель: помочь тебе найти реально хорошую игру, а не просто «популярную сегодня».
И небольшая просьба: если понравилась игра или статья, оставь оценку. Каждый голос важен, и из этих голосов рождается наш каталог.