Распределите рейтинговые данные, чтобы увеличить стандартное отклонение

Учитывая таблицу предметов, каждый из которых имеет рейтинг от 0 до 100. Какой термин или подход мне нужно исследовать, чтобы распределить значения более «равномерно» относительно друг друга? Я понимаю, что хочу увеличить значение стандартного отклонения.

Я считаю, что это должно быть довольно распространенная проблема с рейтинговыми системами. Где ~ 90% элементов в базе данных сходятся вокруг одинаковых «оценок», что делает значение менее значимым. В идеале я хотел бы получить решение, в котором рейтинг данного предмета каким-то образом относительно всех остальных в таблице.

В конечном итоге я стремлюсь достичь этого либо непосредственно в SQL (MySQL), либо при необходимости в PHP.

Пример ниже …

id  |  rating

01  |  98
02  |  92
03  |  85
04  |  80
05  |  75
06  |  71
07  |  69
08  |  66
09  |  64
10  |  62     //Data starts to 'cluster' around here
11  |  61
12  |  61
13  |  61
14  |  60
15  |  59
16  |  58
17  |  56
18  |  53
19  |  50
20  |  45
21  |  38
22  |  30
23  |  20
24  |  5

1

Решение

Это можно сделать в MySQL, но это требует нескольких вычислений. Во-первых, вам нужно среднее значение и стандартное отклонение. Оба являются функциями MySQL. Тогда, сколько стандартных отклонений от среднего значения считают допустимым значением? Я буду считать, что это 2, потому что это распространено. Теперь Mean- (2 * StdDev) является минимальным значением, а Mean + (2 * StdDev) является максимальным значением. Предположим, вы написали запрос (обратите внимание, что в эти дни я использую Oracle 100% времени, поэтому я могу получить синтаксис немного похожий на Oracle):

select avg(value)-2*stddev(value) minval,
avg(value)+2*stddev(value) maxval
from mytable

Вы можете сделать это подзапросом и присоединиться к нему. Затем вы можете рассчитать процент от минимального до максимального значения:

select (value-mival)/(maxval-minval) pctval
from mytable
join (
select avg(value)-2*stddev(value) minval,
avg(value)+2*stddev(value) maxval
from mytable
)

Результатом будет процент от минимального до максимального значения. Вы можете умножить это на 100, чтобы получить значения от 0 до 100 (будут значения <0 и> 100 для выбросов).

0

Другие решения

здесь используется только PHP

<?php
$cart = array();
$cart[] = 98;
$cart[] = 92;
$cart[] = 85;
$cart[] = 80;
$cart[] = 75;
$cart[] = 71;
$cart[] = 69;
$cart[] = 66;
$cart[] = 64;
$cart[] = 62;
$cart[] = 61;
$cart[] = 61;
$cart[] = 61;
$cart[] = 60;
$cart[] = 59;
$cart[] = 58;
$cart[] = 56;
$cart[] = 53;
$cart[] = 50;
$cart[] = 45;
$cart[] = 38;
$cart[] = 30;
$cart[] = 20;
$cart[] = 5;
echo stats_standard_deviation($cart);
function stats_standard_deviation(array $a, $sample = false) {
$n = count($a);
if ($n === 0) {
trigger_error("The array has zero elements", E_USER_WARNING);
return false;
}
if ($sample && $n === 1) {
trigger_error("The array has only 1 element", E_USER_WARNING);
return false;
}
$mean = array_sum($a) / $n;
$carry = 0.0;
foreach ($a as $val) {
$d = ((double) $val) - $mean;
$carry += $d * $d;
};
if ($sample) {
--$n;
}
return sqrt($carry / $n);
}
?>

стандартное отклонение составляет 20,7812265037,

это означает, что любой рейтинг в пределах + или — 20 из 62 является нормальным (68% рейтинговых номеров являются нормальными)

0

По вопросам рекламы [email protected]