Введение
Представьте, что вам нужно быстро сравнить распределения зарплат сотрудников разных отделов или оценить разброс результатов эксперимента. В таких ситуациях отличным выбором будет boxplot, он же “ящик с усами” – эффективный инструмент для выявления ключевых характеристик распределения, позволяющий быстро оценить медиану, разброс данных и обнаружить выбросы.
В этой статье мы подробно разберем, что такое boxplot, и почему его называют “ящиком с усами”. Вы узнаете:
Из каких элементов состоит boxplot
Как интерпретировать boxplot
Как использовать boxplot на практике с помощью Python, с примерами кода.
Плюсы и минусы работы с boxplot .
Будьте готовы погрузиться в мир визуализации данных и освоить один из самых полезных графиков для анализа данных – boxplot!
Основные Элементы Boxplot
Чтобы эффективно использовать boxplot для анализа данных, важно понимать значение каждого его элемента. От положения медианы до длины “усов” – все эти детали дают нам подсказки о характере распределения. Перейдем к детальному разбору составляющих boxplot.
На графиках ниже сверху представлен boxplot с подписанными элементами, снизу - график распределения с линиями, соответствующими элементам boxplot.
Медиана (Median) - 1
Медиана - это значение, которое разделяет упорядоченный набор данных на две равные части, ее еще можно назвать Q2. Половина данных лежит ниже медианы, а другая половина — выше. На графике распределения имеет зеленый цвет. На графике boxplot это линия внутри прямоугольника.
Пример:
import numpy as np
# Набор данных
data = np.array([10, 12, 15, 18, 20, 22, 25, 30, 40, 70])
# Вычисляем медиану
median = np.median(data)
print("Список : ", data)
print("Медиана списка : ", median)
Первый Квартиль (Q1) - 2
Первый квартиль — это значение, которое отделяет 25% наименьших значений в наборе данных. На графике распределения имеет красный цвет и лежит левее медианы (зеленый цвет). На графике boxplot это нижняя граница прямоугольника.
Пример:
import numpy as np
# Набор данных
data = np.array([10, 12, 15, 18, 20, 22, 25, 30, 40, 70])
# Вычисляем Q1
Q1 = np.quantile(data, 0.25)
print("Список : ", data)
print(f"Q1 (25-й процентиль): {Q1}")
Третий Квартиль (Q3) - 3
Третий квартиль— это значение, которое отделяет 25% наибольших значений в наборе данных. На графике распределения имеет красный цвет и лежит правее медианы (зеленый цвет). На графике boxplot это верхняя граница прямоугольника.
Пример:
import numpy as np
# Набор данных
data = np.array([10, 12, 15, 18, 20, 22, 25, 30, 40, 70])
# Вычисляем Q3
Q3 = np.quantile(data, 0.75)
print("Список : ", data)
print(f"Q3 (75-й процентиль): {Q3}")
Межквартильный Диапазон (IQR) - 4
Межквартильный диапазон — это разница между третьим и первым квартилями, то есть это прямоугольник, в котором лежит медиана, а по краям находятся Q1 и Q2. Он показывает разброс центральной половины данных. Внутри него лежит 50% данных.
Пример:
import numpy as np
# Набор данных
data = np.array([10, 12, 15, 18, 20, 22, 25, 30, 40, 70])
# Вычисляем IQR
Q1 = np.quantile(data, 0.25)
Q3 = np.quantile(data, 0.75)
IQR = Q3 - Q1
print("Список : ", data)
print(f"IQR (Межквартильный Диапазон): {IQR}")
Выбросы (Outliers) - 5
Выбросы — это точки данных, которые выходят за пределы усов. Они являются необычно большими или маленькими по сравнению с остальными данными. На графике boxplot выбросы отображаются в виде отдельных точек за пределами усов.
Пример:
import numpy as np
# Набор данных
data = np.array([10, 12, 15, 18, 20, 22, 25, 30, 40, 70])
# Вычисляем Q1, Q3 и IQR
Q1 = np.quantile(data, 0.25)
Q3 = np.quantile(data, 0.75)
IQR = Q3 - Q1
# Определяем границы для выбросов
upper_outlier_threshold = Q3 + 1.5 * IQR
lower_outlier_threshold = Q1 - 1.5 * IQR
# Находим выбросы
outliers = data[(data < lower_outlier_threshold) | (data > upper_outlier_threshold)]
print("Список : ", data)
print(f"Верхняя граница выбросов: {upper_outlier_threshold}")
print(f"Нижняя граница выбросов: {lower_outlier_threshold}")
print(f"Выбросы: {outliers}")
Усы (Whiskers) - 6
Усы начинаются от краев прямоугольника (Q1 и Q3) и заканчиваются на самых дальних точках данных, которые не считаются выбросами. На графике распределения имеют синие цвета. На графике boxplot находятся по краям наборов данных, до выбросов.
Пример:
import numpy as np
# Набор данных
data = np.array([10, 12, 15, 18, 20, 22, 25, 30, 40, 70])
# Вычисляем Q1, Q3 и IQR
Q1 = np.quantile(data, 0.25)
Q3 = np.quantile(data, 0.75)
IQR = Q3 - Q1
# Определяем границы для выбросов
upper_outlier_threshold = Q3 + 1.5 * IQR
lower_outlier_threshold = Q1 - 1.5 * IQR
# Находим верхний ус (максимальное значение, не превышающее верхнюю границу)
upper_whisker = data[data <= upper_outlier_threshold].max()
# Находим нижний ус (минимальное значение, не меньшее нижней границы)
lower_whisker = data[data >= lower_outlier_threshold].min()
print("Список : ", data)
print(f"Верхний ус: {upper_whisker}")
print(f"Нижний ус: {lower_whisker}")
Вы могли заметить, что границы выбросов и границы усов не совпадают, почему же так может произойти?
Усы в boxplot показывают разброс фактических данных, а границы, вычисляемые с помощью 1.5 * IQR, - это критерий для определения выбросов. Усы “стремятся” до этих границ, но останавливаются на последнем значении данных, которое находится внутри этих границ. Теперь вы визуально и математически представляете себе из чего состоит boxplot. Это поможет вам в интерпретации результатов ваших анализов.
Кстати, boxplot часто называют “ящик с усами” из-за визуального сходства графика с ящиком (прямоугольник от Q1 до Q2), от которого отходят линии, напоминающие усы, отображающие разброс данных.
Как интерпретировать boxplot
Boxplot не просто показывает данные, он помогает понять их распределение. В этом разделе мы научимся использовать информацию, полученную из элементов boxplot, которые мы разобрали ранее.
Разберем, как это происходит, на конкретном примере.
Допустим мы работаем в сети дилерский центров, которые продают автомобили различных марок. Нам нужно оценить эффективность продаж каждой марки, а также выявить факторы, влияющие на объем продаж. У нас есть данные о количестве проданных автомобилей каждой марки за последние 2 года по месяцам в тысячах долларов.
Код ниже создает искусственные данные по нашей дилерской сети
import numpy as np
import pandas as pd
np.random.seed(42)
# Создаем искусственные данные о продажах автомобилей
data = {'Toyota': np.random.normal(loc=150, scale=25, size=24),
'Honda': np.random.normal(loc=130, scale=20, size=24),
'Ford': np.random.normal(loc=100, scale=30, size=24),
'BMW': np.random.normal(loc=80, scale=15, size=24),
'Tesla': np.random.normal(loc=90, scale=20, size=24)}
# Добавляем выбросы
data['Ford'][0] = 20.1
data['Ford'][1] = 30.312
data['Tesla'][1] = 150.112
# Создаем DataFrame
data = pd.DataFrame(data)
data.head()
Теперь отобразим эту информацию через boxplot, кстати, вы можете использовать для этого как библиотеку matplotlib, так и seaborn. Для того, чтобы использовать seaborn, закомментируйте 5 строку и раскомментируйте 6.
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 7)) # Увеличим размер графика для лучшей читаемости
plt.boxplot(data, labels=data.columns) # matplotlib
# sns.boxplot(data=data) # seaborn
plt.title("Сравнение продаж автомобилей разных марок (за 24 месяца)")
plt.ylabel("Количество проданных автомобилей")
plt.grid(True)
plt.show()
Анализируя полученные boxplot, мы можем сделать следующие выводы:
Нахождение центра распределения:
Toyota
демонстрирует самые высокие медианные продажи, что указывает на её лидерство по объёму реализации. .BMW
иTesla
имеют наименьшие медианные продажи в нашей дилерской сети.Honda
иFord
показывают промежуточные значения.
Итог: с помощью медианы мы выяснили, какие марки наиболее и наименее прибыльны. Высокие медианные продажи
Toyota
указывают на её стабильную популярность. Низкие показателиBMW
иTesla
могут быть связаны с более высокой ценой или ориентацией на узкий сегмент рынка. Для увеличения продаж этих марок целесообразно провести анализ целевой аудитории и разработать индивидуальные маркетинговые стратегии, например, сфокусироваться на преимуществах конкретных моделей или предложить специальные условия для привлечения новых клиентов.Оценка разброса данных:
Ford
имеет самый широкий IQR, что говорит о наибольшей волатильности продаж среди представленных марокBMW
демонстрирует наименьший IQR.
Итог: с помощью IQR мы заметили различия в волатильности. Высокий IQR дляFord
указывает на нестабильность продаж, что может быть связано с сезонными акциями, изменениями в модельном ряду или другими факторами. Необходим анализ внутренних и внешних факторов, влияющих на продажиFord
. Низкий IQR дляBMW
в сочетании с относительно низкими медианными продажами подтверждает стабильность продаж, но также может свидетельствовать об ограниченной аудитории, лояльной бренду. Чтобы расширить клиентскую базу, можно рассмотреть варианты проведения тест-драйвов, участие в автомобильных выставках и организацию специальных мероприятий для потенциальных покупателей.Асимметрия распределения:
Ford
демонстрирует значительную левостороннюю асимметрию. Медиана немного смещена в правую (верхнюю) часть прямоугольника, а левый ус намного длиннее правого.Tesla
демонстрирует правостороннюю асимметрию. Это вызвано выбросом в виде одного месяца с очень высокими продажами.
Итог: с помощью усов, медианы, Q1 и Q2 мы нашли асимметрию в данных. Для
Ford
это объясняется наличием выбросов в виде двух месяцев с очень низкими продажами (20 и 30 автомобилей). Необходимо установить причины столь значительного падения продаж в эти месяцы. Правосторонняя асимметрия продажTesla
указывает на периодические всплески спроса. Для выяснения причин этих всплесков необходимо проанализировать маркетинговые кампании, сезонность, выход новых моделей или новости об инновационных технологияхTesla
, и использовать эту информацию для планирования будущих маркетинговых активностейВыявление выбросов:
Honda
иTesla
имеет выбросы в верхней частиBMW
иTesla
имеет выбросы в нижней части
Итог: с помощью анализа выбросов мы нашли потенциальные точки роста, для следующий марок:Honda, BMW, Tesla
. Наличие выбросов в верхней части дляHonda
иTesla
говорит о месяцах с аномально высокими продажами, возможно, связанных с успешными маркетинговыми кампаниями или запуском новых моделей. Выбросы в нижней части дляFord
указывают на месяцы, когда продажи были значительно ниже среднего, что может быть вызвано проблемами с поставками, отзывами продукции или другими негативными факторами. Анализ этих конкретных месяцев поможет понять причины колебаний и принять меры для минимизации негативного влияния в будущем.Сравнение форм распределений:
Распределение продаж
Ford
существенно отличается от других марок из-за асимметрии и выбросов.Toyota
иHonda
демонстрируют более симметричные распределения.BMW
иTesla
также имеют довольно симметричное распределение, но в них присутствует значительное количество выбросов
Итог: Форма распределения продаж автомобилей значительно различается между марками.Ford
характеризуется нестабильностью (асимметрия и выбросы),Toyota
иHonda
демонстрируют стабильность (симметрия), аBMW
иTesla
показывают умеренную стабильность, осложненную выбросами, требующими дальнейшего анализа.Оценка перекрытия данных:
Распределения продаж
Toyota
иHonda
перекрываются в значительной степени.BMW
иTesla
меньше перекрываются с другими марками.
Итог: Значительное перекрытие распределений продаж
Toyota
иHonda
может указывать на конкуренцию за схожую аудиторию, в то время как меньшее перекрытиеBMW
иTesla
с другими марками предполагает ориентацию на более специфические сегменты рынка.
Опираясь на этот анализ, мы можем предпринять следующие шаги:
Для всех марок: Изучить рыночные тенденции и конкурентную среду, улучшить обслуживание клиентов и оптимизировать управление запасами. Сегментировать клиентов и персонализировать предложения.
Для Toyota: Укрепить лидерство, используя новые модели и программы лояльности.
Для Honda: Дифференцироваться от
Toyota
, привлекая более специфическую аудиторию.Для Ford: Исследовать причины нестабильности продаж и разработать план стабилизации.
Для BMW: Расширить клиентскую базу, сохраняя престижность бренда.
Для Tesla: Повторить успех пиковых продаж путем анализа и планирования маркетинговых мероприятий
Этот пример показывает, как boxplot может быть полезен в бизнес-анализе для оценки эффективности продаж, выявления проблемных зон и разработки стратегий по улучшению результатов.
Таким образом, корректно интерпретируя boxplot, мы можем получить множество полезной информации о наших данных.
Однако, помимо очевидных плюсов boxplot имеет и ряд минусов.
Плюсы и минусы Boxplot
Как и любой инструмент boxplot имеет свои ограничения. В этом разделе мы поймем в каких ситуациях boxplot будет отличным выбором, а когда лучше использовать другие методы.
Плюсы:
Наглядное представление основных статистик: Boxplot быстро демонстрирует медиану, разброс (IQR) и потенциальные выбросы. В нашем примере с продажами автомобилей мы сразу получили общее представление о каждой марке.
Сравнение наборов данных: Boxplot отлично подходит для сравнения нескольких распределений на одном графике, что позволило нам удобно сопоставить данные о продажах 5 разных марок.
Выявление выбросов: Boxplot наглядно выделяет выбросы, которые могут указывать как на ошибки в данных, так и на интересные аномалии (например, неожиданные всплески продаж). В нашем анализе это помогло быстро найти аномальные значения для
Honda
,BMW
иTesla
.Простота интерпретации: Boxplot относительно прост для понимания даже для человека без глубоких знаний статистики. Он позволяет быстро выявить ключевые особенности распределения и сформулировать начальные гипотезы.
Компактность: Boxplot позволяет удобно сравнивать несколько категорий данных на одном графике, не перегружая визуализацию.
Устойчивость к выбросам: Boxplot, основанный на медиане и IQR, менее чувствителен к выбросам, чем методы, использующие среднее арифметическое и стандартное отклонение. Это может быть полезно, когда необходимо получить общее представление о данных, не слишком акцентируя внимание на аномальных значениях.
Минусы:
Ограниченная информация о форме распределения: В отличие от гистограмм или графиков плотности, boxplot не отображает детали формы распределения (например, количество пиков). Поэтому его следует использовать в сочетании с другими визуализациями, если требуется более глубокий анализ формы распределения.
Не подходит для номинальных данных: Boxplot предназначен для числовых данных. Хотя номинальные данные иногда можно преобразовать в числовые, но это не всегда целесообразно и может привести к потере информации.
Чувствительность к масштабу: При значительном разбросе значений у разных групп, boxplot может выглядеть сжатым и затруднять сравнение, особенно если есть выбросы. В таких случаях может потребоваться логарифмическое преобразование данных или использование других методов масштабирования.
Субъективная интерпретация выбросов: Boxplot лишь выделяет потенциальные выбросы, но не определяет их природу. Необходимо дополнительное исследование, чтобы установить, являются ли они ошибками, аномальными, но реальными значениями, или требуют особого внимания.
Зависимость от алгоритма построения: Точные значения границ “усов” и определения выбросов могут незначительно отличаться в зависимости от используемого программного обеспечения или библиотеки из-за различий в алгоритмах вычисления квартилей (Q1 и Q3). Поэтому важно использовать один и тот же инструмент для сравнения boxplot и осознавать возможные погрешности.
По итогу, при работе с boxplot, важно учитывать его ограничения и при необходимости использовать в сочетании с другими методами визуализации и анализа данных для получения более полной и точной картины. В сложных ситуациях, где важны детали формы распределения или точная интерпретация выбросов, следует отдавать предпочтение другим подходам.
Заключение
Boxplot – это простой, но полезный инструмент визуализации, позволяющий быстро выявлять закономерности, сравнивать показатели и формулировать гипотезы. Однако, как и при использовании любого метода визуализации, важно учитывать его ограничения и подтверждать выводы дополнительным анализом.
Весь используемый код в статье вы можете найти по ссылке: articles/boxplot at main · PavelShunkevich/articles