Алгоритмическое смещение
Вопрос далеко не тривиален. На самом деле это вообще не разрешимо. По крайней мере, не так, как вы думаете. Я начну с попытки объяснить алгоритмический уклон несколькими примерами:
Amazon обучил ИИ принимать решения о найме. Через некоторое время они поняли, что ИИ предпочитает мужчин, а не женщин-заявителей, из-за того, что предвзятость также обнаруживается в наборе данных обучения. В этом случае довольно просто решить, имел ли ИИ несправедливый уклон.
Допустим, я установил еще один AI, который также решает, каких кандидатов пригласить на собеседование. Теперь я учился у Амазонки и избежал предвзятости к полу, просто удаляя такие детали, как пол, имя или этническая принадлежность. Нет, мой ИИ не может быть ни расистским, ни сексистским, поэтому он должен быть справедливым, верно? Ну, мой ИИ узнал, что лучше нанимать кандидатов, которым около 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. Таким образом, медиана имеет вдвое больший вес, чем в среднем, для достижения такого рейтинга.
EDIT:
Отличным практическим подходом, который более справедливо рассматривает выбросы, будет ответ @ user3386109 . Мой ответ был в основном предназначен для демонстрации тонкостей «честной» статистики, а не для предоставления какого-либо фактического алгоритма для вычисления рейтинга.