Алгоритмический уклон
Вопрос далеко не тривиальный. На самом деле это вообще не решаемо. По крайней мере, не в том математическом смысле, как вы, кажется, думаете. Я начну с попытки объяснить алгоритмическую предвзятость на нескольких примерах:
Amazon обучила ИИ принимать решения о найме. Через некоторое время они поняли, что ИИ отдавал предпочтение кандидатам-мужчинам, а не женщинам, из-за того, что эта предвзятость также проявлялась в наборе обучающих данных. В этом случае довольно просто решить, имел ли ИИ несправедливую предвзятость.
Допустим, я настроил еще один ИИ, который также решает, каких соискателей пригласить на собеседование. Теперь я научился у Amazon и избегал гендерной предвзятости, просто удаляя такие детали, как пол, имя или этническая принадлежность. Нет, мой ИИ не может быть ни расистским, ни сексистским, так что это должно быть справедливо, верно? Что ж, мой ИИ понял, что лучше нанимать кандидатов в возрасте около 30 лет просто потому, что они имеют опыт работы с самыми современными технологиями и не новички в отрасли. Это было бы идеально для компании (вероятно, по крайней мере — я проигнорирую эту деталь и просто предположу ее для простоты). Но теперь мы игнорируем новичков и людей старше определенного возраста. Это справедливо? Это становится немного более размытым.
Ранее описанный ИИ был отвергнут как несправедливый, и теперь я также убедился, что новый ИИ игнорирует возраст. Теперь он будет относиться к новичкам так же, как к 30-летним и старше. Так что теперь это справедливо, не так ли? Но теперь он не так заботится об опыте соискателей и даст тому, кто ничего не знает, такой же шанс, как и тому, кто вложил время и деньги, чтобы получить опыт. Так это справедливо? Ну, я вряд ли мог ответить на этот вопрос
Или последнее, но не менее важное: комментарии к этому вопросу уже показывают, как сложно определить, что является (не)справедливым. Что касается остальной части вопроса, я просто предполагаю, что предложенная вами схема рейтинга справедлива.
Возможные способы модификации оценки рейтингов
Существует довольно много альтернативных способов составления рейтингов. Я покажу только два простых варианта достижения того, чего вы хотите, хотя, безусловно, существует довольно много способов поиграть с числами, проявив немного творчества.
медиана
Медиана — отличный статистический инструмент для устранения перекоса, вызванного несколькими выбросами в оценках. Обычно медиана рассчитывается как значение в середине отсортированного списка — или, если количество оценок равно среднему из двух средних значений.
def median(arr):
if len(arr) % 2 == 1:
return sorted(arr)[len(arr) // 2]
else:
i = len(arr) // 2
return sum(sorted(arr)[i - 1 : i + 1]) / 2
В вашем примере с 9 оценками на 5 звезд и одной оценкой на 1 звезду результат будет 5. Справедливо ли это? Вероятно, нет, так как это будет относиться к любому рейтингу, который не равен медиане, таким же образом. т.е. для приведенного выше пользовательского рейтинга не будет иметь значения, дал ли последний пользователь одну звезду или четыре. С другой стороны, эта статистика довольно устойчива к искаженным данным с экстремальными выбросами. Так что это все равно не тот инструмент.
Объединение медианы и среднего арифметического
Этот создает результат, который ближе к тому, что вы ожидали - 4,8. Мы больше не полностью игнорируем выбросы, но придаем им гораздо меньше веса. Таким образом, в целом этот рейтинг имеет сильный уклон в сторону наиболее распространенного мнения, но не придает ему такой ценности, как раньше.
Можно даже добавить веса для медианы и среднего значения, чтобы настроить, какой вес придается выбросам:
def weighted_rating(arr, w):
arithm = sum(arr) / len(arr)
m = median(arr)
return m * w + arithm * (1 - w)
В приведенном выше коде w
должно быть между 0 (только среднее арифметическое) и 1 (только медиана). Для w = 0.75
рейтинг будет 4,9. Таким образом, медиана имеет в два раза больший вес, чем средний, чтобы достичь такого рейтинга.
РЕДАКТИРОВАТЬ:
Отличным практическим подходом, который более справедливо обрабатывает выбросы, был бы ответ @user3386109. Мой ответ был в основном предназначен для демонстрации тонкостей «справедливой» статистики, а не для предоставления какого-либо реального алгоритма для расчета рейтинга.
person
Paul
schedule
12.06.2019