алгоритм смещения для оценки ресторана - PullRequest
0 голосов
/ 12 июня 2019

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

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

Ответы [ 4 ]

3 голосов
/ 13 июня 2019

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

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

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 . Мой ответ был в основном предназначен для демонстрации тонкостей «честной» статистики, а не для предоставления какого-либо фактического алгоритма для вычисления рейтинга.

2 голосов
/ 12 июня 2019

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

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

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).

1 голос
/ 12 июня 2019

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

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

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

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

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

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

0 голосов
/ 12 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...