2012-05-16 5 views
0

Мой вопрос более математичен. есть почта на сайте. Пользователь может понравиться и не нравится. А ниже сообщения написано, например, -5 не нравится и нравится +23. На основе этих значений я хочу сделать рейтинг с диапазоном 0-10 или (-10-0 и 0-10). Как это сделать правильно?Как рассчитать рейтинг?

+0

Что именно вы хотите? Укажите код. – sarwar026

+0

Определите «правильно». – zmccord

ответ

4

Это может не ответить на ваш вопрос, так как вам нужен рейтинг между [-10,10], но this blog post описывает лучший способ дать оценки пунктам, где есть положительные и отрицательные оценки (в вашем случае, нравится и не нравится).

простой метод, как

  • (положительных оценок) - (отрицательные отзывы) или
  • (положительные отзывы)/(Всего оценок)

не даст оптимальных результатов.

Вместо этого он использует метод под названием Доверительный интервал доли биномина.

Соответствующая часть записи блога копируется ниже:

ПРАВИЛЬНОЕ РЕШЕНИЕ: Score = Нижняя граница Уилсона оценка доверительного интервала для Бернулли параметра

сказать, что: Нам нужно чтобы сбалансировать долю положительных оценок с неопределенностью небольшого числа наблюдений. К счастью, математика для этого была разработана в 1927 году Эдвином Б. Уилсоном. Что мы хотим задать: Учитывая рейтинги, которые есть у меня, есть вероятность 95%, что «реальная» доля положительных оценок - это хотя бы то, что? Уилсон дает ответ. Учитывая только положительные и отрицательные рейтинги (т.е. не 5-звездочный шкале), нижняя граница доли положительных оценок определяется по формуле:

formula http://www.evanmiller.org/rating-equation.png

(Используйте минус, где он говорит плюс/минус для вычисления нижней границы.) Здесь p - наблюдаемая доля положительных оценок, zα/2 - (1-α/2) квантиль стандартного нормального распределения, а n - общее количество оценок.

Здесь он, реализованный в Ruby, снова из сообщения в блоге.

require 'statistics2' 

def ci_lower_bound(pos, n, confidence) 
    if n == 0 
     return 0 
    end 
    z = Statistics2.pnormaldist(1-(1-confidence)/2) 
    phat = 1.0*pos/n 
    (phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n) 
end 
+0

Thanx, полезная ссылка, но мне немного сложно вычислить))) – jumancy

+0

Включена реализация Ruby и SQL, поэтому, возможно, вы можете работать оттуда. – vinaykola

+1

Это здорово, я сделал это)) – jumancy

2

Похоже, что вы хотите, в основном, процент нравится/не нравится. Я бы сделал от 0 до 10, а не от -10 до 10, потому что это могло бы ввести в заблуждение. Таким образом, на 0 до 10 масштабе, 0 будет «все антипатии» и 10 будет «все понравилось»

total_votes = num_likes + num_dislikes; 
rating = round(10*num_likes/total_votes); 

И это в основном это.

2

Это расширение для ответа Шепарда.

total_votes = num_likes + num_dislikes; 
rating = round(10*num_likes/total_votes); 

Это зависит от количества посетителей вашего приложения. Допустим, если вы ожидаете, что около 100 пользователей оценит ваше приложение.Когда первый пользователь не нравится, мы будем оценивать его как 0 на основе вышеуказанного подхода. Но это не логично правильно, так как наш образец очень мал, чтобы сделать его равным нулю. То же самое с одним положительным - наше приложение получает 10 баллов.

Лучше всего добавить постоянное значение в числитель и знаменатель. Допустим, если в нашем приложении будет 100 посетителей, то можно с уверенностью предположить, что пока мы не получим 10 взлетов/падений, мы не должны идти в крайности (ни 0, ни 10 баллов). Так просто добавьте 5 к каждому нравится и не нравится.

num_likes = num_likes + 5; 
num_dislikes = num_dislikes + 5; 
total_votes = num_likes + num_dislikes; 
rating = round(10*(num_likes)/(total_votes)); 
+0

, о чем не нравится больше, чем нравится. Например, с этой формулой, если у нас есть 8 неприязни и 2 нравится, получаем 3.5. это правильно? – jumancy

Смежные вопросы