Во многих сервисах есть рейтинги объектов: товаров, фильмов, приложений, организаций на карте. Как их правильно считать? Вопрос не такой простой, как кажется на первый взгляд.
Я даже не буду касаться таких важных нюансов, как нечестное накручивание рейтинга, или что сведение "качества" объекта к одному числу — это сильное упрощение. (К счастью. во многих сервисах сейчас показывают разные аспекты качества, вспомните Booking.) И я вообще не фанат числовых шкал оценок. Но в этом посте — о более простых и чисто математических проблемах среднего рейтинга.
Самая стандартная проблема — при простом усреднении всех оценок в топе рейтинга будут объекты с очень малым числом максимальных оценок. Если ваша задача — составить рейтинг лучших объектов, то проще всего рассмотреть только те объекты, которые получили не меньше какого-то числа оценок (100, 1000). Просто и действенно, хотя и на практике в топе всё равно могут оказаться объекты с лишь немного бо́льшим числом оценок, чем этот порог.
Если же вы хотите аккуратно вычислять рейтинг для всех объектов, то самый популярный способ — сглаживание рейтинга. Вместо суммы, разделенной на количество: (sum_of_ratings + smoother * prior_rating) / (num_of_ratings + smoother) Smoother — параметр сглаживания, количество априорных, "виртуальных" оценок. Prior rating — глобально средняя оценка. Если у объекта ещё нет оценок, он начинает с этой усредненной (априорной) оценки, С течением времени он набирает всё больше оценок, и такой сглаженный рейтинг становится всё ближе к простому усреднению. Иногда сглаживание добавляют только в знаменатель, забывая про числитель. Это не совсем правильно, хотя и тоже работает (просто сильнее смещается в сторону популярных объектов).
У этого способа есть теоретическое обоснование. Те, кто знакомы с байесовской статистикой, его наверняка знают. Если для бинарной шкалы оценок предположить, что априорное распределение среднего рейтинга имеет вид бета-распределения (например, просто равномерного от 0 до 1, это частный случай), то апостериорное распределение тоже будет иметь вид бета-распределения. Матожидание этого распределения как раз и будет сглаженным средним всех оценок.
Ещё одна серьёзная проблема средних рейтингов — selection bias, или ошибка выжившего. Оценки ставят не произвольные пользователи, а несколько специфичные. Усредненная оценка имеет интерпретацию матожидания оценки произвольного пользователя при условии, что он поставит хоть какую-то оценку. Во-первых, сам факт оценки может быть скоррелирован с тем, что пользователя что-то задело, в позитивную или негативную сторону. Многие пользователи не будут ставить оценку, если их опыт был ожидаемо средним. Поэтому нам было бы интереснее более слабое условие: матожидание оценки при условии, что пользователь купил товар, посмотрел фильм, посетил заведение и т.д.
Но во-вторых, даже эта интерпретация имеет большую проблему. В топе глобального рейтинга будет много узких категорий: например, документальные фильмы и артхаус. Уж если пользователь посмотрел такой фильм, то вероятность высокой оценки заметно выше, чем в среднем. Просто мало кто смотрит. Поэтому на самом деле нам интересно матожидание оценки произвольного пользователя без какого-либо условия: как произвольный пользователь оценил бы этот объект?
Как же такое посчитать? Для этого существует техника, хотя и не столь популярная на практике: Inverse Propensity Scoring, или Inverse Probability Weighting. Смысл её в том, чтобы оценить вероятность каждого пользователя поставить оценку и после этого усреднять оценки с весами, обратно пропорциональными этой вероятности. Если пользователь имел очень маленький шанс поставить оценку, но всё же её поставил, то эта оценка учтётся с большим весом. К сожалению, для этого придётся поддерживать модель оценки этой вероятности, а кроме того, дисперсия посчитанного рейтинга достаточно высокая.
А вот отдельный вопрос, на который я так и не знаю правильный ответ: какой должен быть физический смысл у персонального рейтинга ("Этот объект вам подходит на XX%")? Как вы считаете?
Во многих сервисах есть рейтинги объектов: товаров, фильмов, приложений, организаций на карте. Как их правильно считать? Вопрос не такой простой, как кажется на первый взгляд.
Я даже не буду касаться таких важных нюансов, как нечестное накручивание рейтинга, или что сведение "качества" объекта к одному числу — это сильное упрощение. (К счастью. во многих сервисах сейчас показывают разные аспекты качества, вспомните Booking.) И я вообще не фанат числовых шкал оценок. Но в этом посте — о более простых и чисто математических проблемах среднего рейтинга.
Самая стандартная проблема — при простом усреднении всех оценок в топе рейтинга будут объекты с очень малым числом максимальных оценок. Если ваша задача — составить рейтинг лучших объектов, то проще всего рассмотреть только те объекты, которые получили не меньше какого-то числа оценок (100, 1000). Просто и действенно, хотя и на практике в топе всё равно могут оказаться объекты с лишь немного бо́льшим числом оценок, чем этот порог.
Если же вы хотите аккуратно вычислять рейтинг для всех объектов, то самый популярный способ — сглаживание рейтинга. Вместо суммы, разделенной на количество: (sum_of_ratings + smoother * prior_rating) / (num_of_ratings + smoother) Smoother — параметр сглаживания, количество априорных, "виртуальных" оценок. Prior rating — глобально средняя оценка. Если у объекта ещё нет оценок, он начинает с этой усредненной (априорной) оценки, С течением времени он набирает всё больше оценок, и такой сглаженный рейтинг становится всё ближе к простому усреднению. Иногда сглаживание добавляют только в знаменатель, забывая про числитель. Это не совсем правильно, хотя и тоже работает (просто сильнее смещается в сторону популярных объектов).
У этого способа есть теоретическое обоснование. Те, кто знакомы с байесовской статистикой, его наверняка знают. Если для бинарной шкалы оценок предположить, что априорное распределение среднего рейтинга имеет вид бета-распределения (например, просто равномерного от 0 до 1, это частный случай), то апостериорное распределение тоже будет иметь вид бета-распределения. Матожидание этого распределения как раз и будет сглаженным средним всех оценок.
Ещё одна серьёзная проблема средних рейтингов — selection bias, или ошибка выжившего. Оценки ставят не произвольные пользователи, а несколько специфичные. Усредненная оценка имеет интерпретацию матожидания оценки произвольного пользователя при условии, что он поставит хоть какую-то оценку. Во-первых, сам факт оценки может быть скоррелирован с тем, что пользователя что-то задело, в позитивную или негативную сторону. Многие пользователи не будут ставить оценку, если их опыт был ожидаемо средним. Поэтому нам было бы интереснее более слабое условие: матожидание оценки при условии, что пользователь купил товар, посмотрел фильм, посетил заведение и т.д.
Но во-вторых, даже эта интерпретация имеет большую проблему. В топе глобального рейтинга будет много узких категорий: например, документальные фильмы и артхаус. Уж если пользователь посмотрел такой фильм, то вероятность высокой оценки заметно выше, чем в среднем. Просто мало кто смотрит. Поэтому на самом деле нам интересно матожидание оценки произвольного пользователя без какого-либо условия: как произвольный пользователь оценил бы этот объект?
Как же такое посчитать? Для этого существует техника, хотя и не столь популярная на практике: Inverse Propensity Scoring, или Inverse Probability Weighting. Смысл её в том, чтобы оценить вероятность каждого пользователя поставить оценку и после этого усреднять оценки с весами, обратно пропорциональными этой вероятности. Если пользователь имел очень маленький шанс поставить оценку, но всё же её поставил, то эта оценка учтётся с большим весом. К сожалению, для этого придётся поддерживать модель оценки этой вероятности, а кроме того, дисперсия посчитанного рейтинга достаточно высокая.
А вот отдельный вопрос, на который я так и не знаю правильный ответ: какой должен быть физический смысл у персонального рейтинга ("Этот объект вам подходит на XX%")? Как вы считаете?
On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. Select “New Channel” Write your hashtags in the language of your target audience. A vandalised bank during the 2019 protest. File photo: May James/HKFP. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from us