антипредвзятый алгоритм рейтинга ресторана

Я работаю над ресторанным приложением, в котором пользователь может оценивать ресторан по логике, например, уравнение рейтинга для 10 человек выглядит следующим образом: пользователь может оценивать от 1 до 5 9 оценили 5 1 оценили 1 уравнение ((9*5 )+(1*1))/10(сумма людей)=46/10=4,6 ответ равен 4,6, что несправедливо, потому что низкая ставка на 1 человека снижает результат до 4,6, на мой взгляд, результат должен быть 4,9 i искал и нашел что-то под названием «Алгоритмическая предвзятость», я не очень хорошо это понял, компания приложений zomato нашла решение для этих случаев, например, чтобы быть справедливым в низком рейтинге и поддельных рейтингах.

так может ли кто-нибудь помочь мне с справедливым уравнением или алгоритмом


person Ahmad Baddah    schedule 12.06.2019    source источник
comment
Это сложная проблема: technologyreview.com/s/612876/   -  person duffymo    schedule 12.06.2019
comment
Для меня не очевидно, почему оценка 4,6 несправедлива — она довольно близка к максимально возможной оценке 5.   -  person 500 - Internal Server Error    schedule 12.06.2019
comment
На мой взгляд - это не предвзятость?   -  person duffymo    schedule 12.06.2019
comment
если у ресторана 9 довольных клиентов и один поддельный рейтинг, пусть его рейтинг упадет до 4,6, это несправедливо, в Ливане есть приложение под названием zomato her, у которого есть рейтинг ресторана, и в его блоге говорится, что у нее есть решение для этого с помощью алгоритма, но его секрет для этого я спрашиваю, может ли кто-нибудь помочь   -  person Ahmad Baddah    schedule 12.06.2019
comment
Голосуя против моего вопроса, мне будет трудно спросить еще раз, я здесь новичок, просто я попросил о помощи, большое спасибо, ребята, извините за вопрос.   -  person Ahmad Baddah    schedule 12.06.2019


Ответы (5)


Одним из возможных решений является возведение в квадрат числа людей, проголосовавших за тот или иной рейтинг. Вычислите средневзвешенное значение, умножив каждый рейтинг на квадрат. Затем разделить на сумму квадратов и округлить в меньшую сторону. Это, как правило, удерживает рейтинг рядом со значением, выбранным большинством людей.

Например, когда рейтинги

5 stars from 9 people
1 star  from 1 person

тогда расчет

(5*(9*9) + 1*(1*1)) / ((9*9) + (1*1)) = 4.9

Если у вас есть дистрибутив типа

5 stars from  4 people
4 stars from  8 people
3 start from 11 people
2 stars from  6 people
1 star  from  3 people

тогда расчет

(5*16 + 4*64 + 3*121 + 2*36 + 1*9) / (16+64+121+36+9) = 3.1

Вы также можете попробовать разные формулы взвешивания. Например, вместо n * n можно использовать n * sqrt(n).

person user3386109    schedule 12.06.2019
comment
вы удивительны, я не знаю, что сказать, но что я могу сказать, да благословит вас бог !! большое спасибо @user3386109 - person Ahmad Baddah; 13.06.2019
comment
@AhmadBaddah Рад помочь, удачи вам! - person user3386109; 13.06.2019

Алгоритмический уклон

Вопрос далеко не тривиальный. На самом деле это вообще не решаемо. По крайней мере, не в том математическом смысле, как вы, кажется, думаете. Я начну с попытки объяснить алгоритмическую предвзятость на нескольких примерах:

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
comment
+1 за признание проблемы медианы и среднего. По моему опыту, мало кто будет спорить, когда медиана и среднее совпадают. Когда они разные, кажется, что медиане придается больший вес, как следует из вашего ответа. Однако есть проблема с методом объединения медианы и среднего. Когда распределение сильно бимодальное, предлагаемый метод может дать результат, который мало кто согласится признать справедливым. Например, учитывая 10 пятизвездочных рейтингов и 9 однозвездочных рейтингов, weighted_rating с w = 0.75 будет 4,5 (5*0.75 + 3.1*0.25). - person user3386109; 13.06.2019
comment
В целом, при бимодальном распределении справедливая оценка сильнее стремится к среднему арифметическому, чем к медиане. - person user3386109; 13.06.2019
comment
@ user3386109 Я просто хотел привести несколько простых примеров того, как можно добиться такого результата. Мое намерение в этом ответе состояло в том, чтобы скорее показать тонкости реализации справедливой меры, чем предоставить какую-либо реальную меру, которую ваш ответ решил хорошим способом (также +1). В любом случае, я отредактировал свой ответ, чтобы прояснить это. - person Paul; 13.06.2019
comment
ребята, вы потрясающие, я не знаю, что сказать, но что я могу сказать, да благословит вас бог! большое спасибо @Paul - person Ahmad Baddah; 13.06.2019

Задача оценки неизвестного параметра (среднего значения, дисперсии и т. д.) случайного процесса по (очень) небольшому количеству наблюдений — очень сложная задача, которая интенсивно изучается.

В настоящее время здесь используется термин «смещение», но его не следует путать с вероятностным смещением (разницей между средним математическим значением случайного процесса и средним математическим значением оценки). Здесь нужно свести к минимуму саму ошибку, а точнее, избежать больших ошибок. В таких ситуациях при небольшом количестве избирателей один простой голос может эффективно сместить оценку.

Дополнительная трудность заключается в том, что я не уверен, что среднее значение обозначений является хорошим критерием. Гистограмма ставок (90% -> 5, 10% -> 1) более интересна и дает больше информации. Однако такие гистограммы не позволяют провести простую сортировку...

Я не специалист в этой конкретной проблеме и знаю только один простой часто используемый метод: подавлять младшие и высшие значения. Однако в предлагаемом сценарии мы получаем рейтинг 5, что далеко от совершенства.

Еще один метод, который я могу придумать, состоит в том, чтобы сначала выполнить грубую оценку, а затем выполнить новое усреднение с меньшим весом для значений, слишком далеких от первого среднего.

Тем не менее, любой предлагаемый метод должен быть получен и проверен на/с достаточным количеством данных: собрать большое количество голосов, получить точную оценку для одного ресторана, а затем попытаться получить примерно такой же результат с любым небольшим количеством голосов, извлеченным из этих данных. основание. Алгоритм наилучший зависит от вероятностного закона процесса, которого я не знаю.

person Damien    schedule 12.06.2019

Основная причина проблемы заключается в том, что рейтинговая шкала субъективна и, следовательно, зависит от когнитивных предубеждений пользователей. Поэтому лучшим решением был бы другой подход к рейтингу, такой как система Эло: пользователей просили бы сравнить их последний посещенный ресторан с тем, который они посещали раньше, таким образом создавая настоящий рейтинг ресторанов (который мог бы позволить звездам быть переопределены как квинтили). В этой статье проблема и возможные решения обсуждаются более подробно: https://www.linkedin.com/pulse/how-build-truly-5-star-user-rating-tobias-baer/

person Tobi    schedule 02.06.2020

4.6 справедливо, а 4.9 предвзято.

person Yves Daoust    schedule 12.06.2019
comment
На мой взгляд, bias не следует понимать здесь в его математическом смысле. При обработке сигналов, как правило, оценки минимальной средней ошибки (например, оценка Винера/MMSE) оказываются смещенными! (примечание: я не минусовал) - person Damien; 12.06.2019
comment
справедливость — это оценочное суждение, и вы не привели аргументов, почему мы должны принять ваше суждение. - person pjs; 13.06.2019
comment
@pjs: я согласен, что моего ответа недостаточно. Но справедливым является термин, используемый ФП; беспристрастный ближе к истине. - person Yves Daoust; 13.06.2019