Как стать автором
Обновить

Boxplot, он же ящик с усами

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров483

Введение

Представьте, что вам нужно быстро сравнить распределения зарплат сотрудников разных отделов или оценить разброс результатов эксперимента. В таких ситуациях отличным выбором будет 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

Теги:
Хабы:
+2
Комментарии2

Публикации

Истории

Работа

Data Scientist
64 вакансии

Ближайшие события

11 – 13 февраля
Epic Telegram Conference
Онлайн
27 марта
Deckhouse Conf 2025
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань