Есть такая древняя шутка: «В инфекционном отделении температура у пациентов – 42 градуса, в морге температура у пациентов – 20 градусов, а средняя температура по больнице – 36.6 градусов». Эта шутка описывает проблематику среднего значения в статистике: оно позволяет увидеть общую картину, но в большинстве случаев эта общая картина не имеет практического смысла. Ниже посмотрим, почему так выходит, как и когда вычислять это среднее значение и какие меры центральной тенденции можно использовать вместо среднего значения.
Среднее значение – это арифметическая середина набора числовых данных. Высчитывается крайне просто: складываете все числа, находящиеся в наборе данных, и делите эту сумму на количество чисел. Например, если у нас есть числа [3, 5, 11, 2, 8], то мы сначала складываем их (сумма = 29), после чего делим на количество чисел (5), получаем 5.8 – это и есть наше среднее значение.
Среднее значение можно вычислить только тогда, когда мы работаем с числами – если наши данные имеют другой формат, то нужно либо сначала перевести их в числа, либо искать другой метод нахождения центральной тенденции. В основном среднее значение используется тогда, когда нужно получить общую поверхностную картину по какому-нибудь вопросу.
Основная проблема среднего значения – оно крайне неустойчиво к выбросам и отсутствию нормального распределения. Если 9 сотрудников фирмы получают 30 000 рублей в месяц, а десятый получает 3 000 000 рублей в месяц – средняя зарплата по фирме после вычисления среднего значения будет равна 302 700 рублей, с чем 90% сотрудников фирмы не согласятся. Поэтому среднее значение крайне редко используется само по себе – его применяют либо для поверхностного первичного анализа, либо как вспомогательный инструмент.
Среднее арифметическое значение – один из способов нахождения центральной тенденции, то есть доминирующего числа похожих вхождений в наборе данных. Есть еще 2 инструмента нахождения центральной тенденции: медиана и мода.
Математическая формула медианы выглядит так:
На практике суть сводится к тому, чтобы:
Если мы возьмем набор [3, 5, 11, 2, 8] из примера выше, то сначала его нужно будет упорядочить – получаем [2, 3, 5, 8, 11]. Поскольку количество чисел – нечетное, мы просто берем среднее значение – 5. Если бы количество чисел было бы четным, например – [2, 3, 5, 6, 8, 11], то нам нужно было бы взять 2 числа, наиболее близкие к центру (5, 6), и найти их среднее арифметическое – 5.5.
Медиана, как и среднее арифметическое, позволяет работать только с числами. Основное преимущество – медианы устойчивы к выбросам и распределению, отличающемуся от нормального. Возьмем, к примеру фирму выше – зарплаты в ней после упорядочивания выглядят как [30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 3000000]. Среднее значение показало нам зарплату в 302 700 рублей, что далеко от истины. Если же мы хотим вычислить медиану, то нам нужно взять значения, близкие к центру (30000 и 30000), после чего вычислить их среднее арифметическое – 30000 рублей медианной зарплаты. Единственная проблема медиан – данные нужно упорядочить, и для массивов в десятки миллионов значений это может быть проблематично.
Наконец, осталась мода. Мода – это значение (или диапазон), которое встречается в выборке чаще всего. Математическая формула:
На практике мы подсчитываем, сколько раз значение/диапазон встречаются, после чего находим самое большое количество повторений – это и будет мода. Для массива [2, 3, 3, 5, 8, 11] мода – 3, потому что это число встречается дважды.
Моду можно использовать не только для чисел – можно найти моду на товары или цвета, например. Собственно, ее чаще всего используют как раз тогда, когда работают не с числами. Из проблем этого метода – моды может не быть вообще, мод может быть несколько (мультимода). Если вы работаете с диапазонами – неправильно выбранные границы диапазона тоже могут существенно усложнить жизнь.
SQL хорошо приспособлен для поиска центральной тенденции – среднее арифметическое, медиану и моду можно найти в несколько строк.
Поиск среднего арифметического:
SELECT AVG(column_name) AS average_value
FROM table_name;
Поиск медианы:
SELECT
column_name,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY column_name) OVER () AS median_value
FROM
table_name;
Поиск моды:
SELECT column_name, COUNT(*) AS frequency
FROM table_name
GROUP BY column_name
ORDER BY frequency DESC
LIMIT 1;