При анализе данных большое значение имеют различные меры центральной тенденции, среди которых медиана и среднее арифметическое играют ключевые роли. Понимание различий между этими двумя показателями является критически важным для корректной интерпретации данных и определения наилучших стратегий для их анализа.
В этой статье мы разберем понятия медианы и среднего арифметического и поговорим об их различиях в форме целевого показателя анализа данных.
Медиана – это значение, которое делит упорядоченный ряд данных на две равные части, где половина наблюдений меньше, а другая половина больше этого значения.
Медиана практически не подвержена влиянию аномальных выбросов и экстремальных значений, что делает ее более надежным показателем для оценки центральной тенденции в данных с асимметричным распределением.
Чтобы вычислить медиану, необходимо упорядочить все данные:
Среднее арифметическое – это метрический показатель, который служит для выявления общей тенденции в наборе данных, обеспечивая наглядное представление о центре распределения этих данных. Применяется оно в различных областях знаний – от экономики и социологии до физики и биологии, выполняя роль основного инструмента для анализа и интерпретации данных.
Вычисления моды среднего арифметического достаточно простое: оно представляет собой сумму всех элементов множества, деленную на количество этих элементов.
Несмотря на свою простоту, среднее арифметическое предоставляет множество полезной информации. Оно помогает усреднить значения, нивелируя влияние случайных колебаний и выделяя более ясную тенденцию из набора чисел. Это особенно важно при работе с большими массивами данных, где индивидуальные погрешности могут затруднять понимание общей картины.
Среднее арифметическое также имеет важные статистические свойства:
Средняя арифметическая играет важную роль в выводах и рекомендациях на основе данных. Будь то анализ бизнес-результатов, медицинских исследований или научных экспериментов, оно помогает выделить основные закономерности и принять обоснованные решения
Рассмотрим несколько примеров расчета медианы и среднего арифметического:
Основное различие между медианой и средним арифметическим заключается в их устойчивости к выбросам. Например, в наборе данных с равномерным распределением небольшое число экстремальных значений, таких как очень высокие или низкие числа, значительно повлияет на среднее арифметическое. Медиана в таком случае останется относительно стабильной, не учитывая влияние этих выбросов.
Другим важным аспектом является форма распределения данных. В случае симметричного распределения, оба показателя имеют тенденцию к совпадению. Однако, при анализе данных с асимметричным распределением медиана предоставляет более точное представление о центре данных. Асимметрия может быть положительной со смещением среднего арифметического вправо или отрицательной, что смещает среднее влево, тогда как медиана остается менее чувствительной к этим изменениям.
Выбор между медианой и средним арифметическим в качестве целевого показателя анализа данных также зависит от конкретных задач и контекста исследования. В медицине, например, при определении нормальных показателей биомаркеров предпочтение часто отдается медиане, так как данные из этой области обычно подвержены сильной вариабельности и наличию выбросов. В экономике, где анализируется средний доход населения, среднее арифметическое может давать полезную информацию, но только при учете характеристики выборки асимметрии и обсуждении влияния крайних значений.
На примере исследования численности населения можно рассмотреть отличия между медианой и средним арифметическим.
Попробуем вычислить среднюю численность населения в регионе России, а также медиану, и затем сопоставить эти результаты.
Сперва необходимо найти и загрузить данные, для этого используем библиотеку pandas:
import pandas as pd
city = pd.read_csv('city.csv')
Теперь можно вычислить среднее и медианное значения выборки:
mean_pop = round(city.population_2020.mean(), 0)
median_pop = round(city.population_2020.median(), 0)
Поскольку распределение данных в выборке не является нормальным, значения среднего и медианы оказались разными. Чтобы понять степень их различия, построим график распределения и отметим на нем среднее и медианное значения:
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_palette('rainbow')
fig = plt.figure(figsize=(20, 15))
ax = fig.add_subplot(1, 1, 1)
g = sns.histplot(data=city, x='population_2020', alpha=0.6, bins=100, ax=ax)
g.axvline(mean_pop, linewidth=2, color='r', alpha=0.9, linestyle='--', label='Среднее = {:,.0f}'.format(mean_pop).replace(',', ' '))
g.axvline(median_pop, linewidth=2, color='darkgreen', alpha=0.9, linestyle='--', label='Медиана = {:,.0f}'.format(median_pop).replace(',', ' '))
plt.ticklabel_format(axis='x', style='plain')
plt.xlabel("Численность населения", fontsize=25)
plt.ylabel("Количество городов", fontsize=25)
plt.title("Распределение численности населения российских городов", fontsize=25)
plt.legend(fontsize="xx-large")
plt.show()
Целесообразно построить боксплот на этих данных для более точной визуализации основных квантилей распределения, медианы, среднего и выбросов:
fig = plt.figure(figsize=(10, 10))
sns.set_theme(style="whitegrid")
sns.set_palette(palette="pastel")
sns.boxplot(y=city['population_2020'], showfliers=False)
plt.scatter(0, 550100, marker='*', s=100, color='black', label='Выбросы')
plt.scatter(0, 560200, marker='*', s=100, color='black')
plt.scatter(0, 570300, marker='*', s=100, color='black')
plt.scatter(0, mean_pop, marker='o', s=100, color='red', edgecolors='black', label='Среднее')
plt.legend()
plt.ylabel("Численность населения", fontsize=15)
plt.ticklabel_format(axis='y', style='plain')
plt.title("Боксплот численности населения", fontsize=15)
plt.show()
Из графиков видно, что медиана значительно ниже среднего, что обусловлено наличием крупных выбросов – Москвы и Санкт-Петербурга. В связи с тем, что среднее арифметическое учитывает максимум и сильно подвержено влиянию выбросов, выводы на его основе могут быть неточными. Изменение численности населения Москвы может существенно сместить среднее значение по России, однако это не отразит истинную региональную динамику.
Если ориентироваться на среднее арифметическое, то получится, что типичный российский город насчитывает 268 тысяч жителей. Однако это значение вводит в заблуждение, так как сильно превышает медиану вследствие численности населения Москвы и Санкт-Петербурга. Более корректным будет утверждать, что средняя величина численности типичного российского города составляет 104 тысячи человек, что в два раза меньше значения арифметического.
В маркетинговых задачах, например, при анализе доходов клиентов или затрат на рекламу, встречаются ситуации, когда несколько экстремально высоких или низких значений могут исказить реальную картину. В таких случаях использование среднего арифметического в качестве целевого показателя может вводить в заблуждение.
Медиана, напротив, устойчива к выбросам и предоставляет более надежное представление о типичном значении в наборах данных с асимметричным распределением. В маркетинговых исследованиях определения медианы может быть особенно полезно при анализе таких метрик, как время на сайте или сумма покупок, где данные при статистическом анализе могут быть сильно искажены за счет партикулярных экстремальных произведений транзакций.
Рассмотрим конкретный случай, когда предприниматель в розничной торговле может столкнуться с проблемами из-за неверного выбора целевой метрики.
Для начала, как и в предыдущем примере, загрузим набор данных о покупках в супермаркете. Отберем нужные столбцы из датасета и переименуем их для упрощения кода.
Поскольку эти данные менее подготовлены, чем ранее использованные, нужно сгруппировать все купленные товары по чекам. Для этого требуется группировка по двум параметрам: по идентификатору покупателя и по дате покупки (дата и время определяются моментом закрытия чека, поэтому все покупки в одном чеке совпадают по дате).
Назовем полученный столбец «total_bill» (сумма чека) и вычислим среднее и медиану.
df = pd.read_excel('invoice_data.xlsx')
df_nes = df[['Номер КПП', 'Сумма', 'Дата продажи']]
df_nes.columns = ['user', 'total_price', 'date']
groupped_df = df_nes.groupby(['user', 'date']).total_price.sum().reset_index()
groupped_df.columns = ['user', 'date', 'total_bill']
mean_bill = groupped_df.total_bill.mean()
median_bill = groupped_df.total_bill.median()
Построим график распределения чеков и боксплот, на которых отметим медиану и среднее арифметическое.
sns.set_palette('rainbow')
fig = plt.figure(figsize=(20, 15))
ax = fig.add_subplot(1, 1, 1)
sns.histplot(groupped_df, x='total_bill', binwidth=200, alpha=0.6, ax=ax)
plt.xlabel("Покупки", fontsize=25)
plt.ylabel("Суммы чеков", fontsize=25)
plt.title("Распределение суммы чеков", fontsize=25)
plt.axvline(mean_bill, linewidth=2, color='r', alpha=1, linestyle='--', label=f'Среднее = {mean_bill:.0f}')
plt.axvline(median_bill, linewidth=2, color='darkgreen', alpha=1, linestyle='--', label=f'Медиана = {median_bill:.0f}')
plt.legend(fontsize="xx-large")
plt.show()
fig = plt.figure(figsize=(10, 10))
sns.set_theme(style="whitegrid")
sns.set_palette(palette="pastel")
sns.boxplot(y=groupped_df['total_bill'], showfliers=False)
plt.scatter(0, 1800, marker='*', s=100, color='black', label='Выбросы')
plt.scatter(0, 1850, marker='*', s=100, color='black')
plt.scatter(0, 1900, marker='*', s=100, color='black')
plt.scatter(0, mean_bill, marker='o', s=100, color='red', edgecolors='black', label='Среднее')
plt.legend()
plt.ticklabel_format(axis='y', style='plain')
plt.ylabel("Сумма чека", fontsize=15)
plt.title("Боксплот суммы чеков", fontsize=15)
plt.show()
Графики показывают, что распределение на центральных тенденциях смещено влево (отличается от нормального), поэтому медиана и среднее не совпадают. Медиана меньше среднего примерно на 220 рублей.
Маркетологам нужно повысить средний чек. Возможно, он решит, что, поскольку средний чек составляет 601 рубль, можно предложить акцию: «Всем покупателям, совершившим покупку на 600 рублей, скидка 20% на товар за 100 рублей». В реальности же средний чек ниже – 378 рублей. Это означает, что большинство покупателей не заинтересуется предложением, так как их траты обычно не достигают указанного порога. Следовательно, они не воспользуются предложением и не получат скидку, а компания не сможет добиться желаемого роста прибыли. Основная проблема заключается в неверных исходных данных.