Boxplot и violin: что они скрывают и показывают

Boxplot — это пять чисел распределения; violin добавляет к ним форму.

Boxplot (ящик с усами) кодирует распределение пятью числами: медиана, нижний и верхний квартили (границы ящика), усы и выбросы. Violin добавляет к этому зеркальную KDE — форму плотности.

Анатомия ящика

Ящик с усами — компактная сводка: линия внутри ящика — медиана ($Q_2$), нижняя и верхняя грани ящика — первый и третий квартили ($Q_1$, $Q_3$). Высота ящика — межквартильный размах $\text{IQR} = Q_3 - Q_1$, в нём лежит средняя половина данных. Усы тянутся до самых дальних точек в пределах $1{,}5 \cdot \text{IQR}$ от ящика; всё за ними — выбросы, рисуются отдельными точками.

            выброс
              o
          |---+---|
  усы  ----| Q1 med Q3 |----   усы
          |---+---|
     Q1   медиана   Q3
  <-- IQR (средние 50% данных) -->

Считаем пятичисловую сводку

Посчитаем все элементы boxplot и определим выбросы по правилу $1{,}5\cdot\text{IQR}$.

import statistics as st

data = [12,14,15,15,16,17,18,18,19,20,21,22,40]
q = st.quantiles(data, n=4)      # [Q1, Q2, Q3]
q1, med, q3 = q
iqr = q3 - q1
lo_fence = q1 - 1.5*iqr
hi_fence = q3 + 1.5*iqr
outliers = [v for v in data if v < lo_fence or v > hi_fence]

print("Q1 =", q1, " медиана =", med, " Q3 =", q3)
print("IQR =", iqr)
print("границы усов:", round(lo_fence,1), "...", round(hi_fence,1))
print("выбросы:", outliers)

Вывод:

Q1 = 15.0  медиана = 18.0  Q3 = 20.5
IQR = 5.5
границы усов: 6.8 ... 28.8
выбросы: [40]

Точка 40 лежит за верхней границей $Q_3 + 1{,}5\cdot\text{IQR} = 28$ и помечается как выброс.

Что boxplot скрывает

Главная ловушка boxplot: он показывает только квантили и слеп к форме. Бимодальное распределение (две группы) и равномерное могут дать одинаковый ящик. Поэтому при небольшом числе групп многие предпочитают violin или просто показывают точки (strip/swarm plot) поверх ящика — тогда видно и сводку, и реальную форму.

Violin: ящик плюс форма

Скрипичная диаграмма рисует по обе стороны от центральной оси зеркальную KDE: ширина «скрипки» в каждой точке пропорциональна плотности. Внутрь часто вкладывают мини-boxplot. Так читатель получает и пять чисел, и форму — видит бимодальность, асимметрию, тяжёлые хвосты. Минус: violin требует достаточно данных (на 5 точках KDE бессмысленна) и сложнее для неподготовленного читателя.

Как работает под капотом

Boxplot устойчив к выбросам, потому что построен на квантилях, а не на среднем и дисперсии: медиана и квартили почти не сдвигаются от одной экстремальной точки. Правило $1{,}5\cdot\text{IQR}$ — эвристика Тьюки: для нормального распределения за усами оказывается лишь около 0,7 % точек, поэтому всё, что дальше, разумно считать кандидатами в выбросы. Violin же опирается на KDE и наследует её параметр bandwidth.

История и варианты ящика

Ящик с усами придумал Джон Тьюки в 1970-х как часть «разведочного анализа данных» — подхода, призывавшего сначала смотреть на данные, а не сразу проверять гипотезы. Гениальность boxplot в том, что он строится на порядковых статистиках (квантилях), а не на среднем и дисперсии, поэтому устойчив к выбросам и не предполагает нормальности. Это делает его честным инструментом для любых, в том числе скошенных и тяжелохвостых, распределений.

У boxplot есть полезные варианты. Notched boxplot добавляет «вырезы» вокруг медианы шириной примерно $\pm 1{,}58\,\text{IQR}/\sqrt{n}$: если вырезы двух групп не перекрываются, их медианы, вероятно, различаются значимо — грубый визуальный тест. Letter-value plot расширяет идею на большие выборки, показывая не только квартили, но и более глубокие квантили, что важно для хвостов. Все они наследуют главное достоинство — устойчивость, и главный недостаток — слепоту к мультимодальности, который лечится наложением точек или переходом к violin.

Частые ошибки

  • Boxplot на 3–5 точках — квартили бессмысленны на крошечной выборке; покажите сами точки.
  • Забыть про бимодальность — ящик её не видит; добавьте точки или violin.
  • Считать всё за усами «ошибками» — выброс по $1{,}5\cdot\text{IQR}$ это статистический признак, а не брак данных.
  • Violin на малой выборке — KDE придумает форму, которой нет.

Итог

  • Boxplot — пять чисел: медиана, квартили, усы, выбросы.
  • Он устойчив к выбросам, но слеп к форме распределения.
  • Violin добавляет форму через зеркальную KDE.
  • На малых выборках показывайте сами точки.
Проверьте себя
1. Что показывает высота ящика в boxplot?
AСреднее значение
BМежквартильный размах IQR — средние 50% данных
CМаксимум минус минимум
DСтандартное отклонение
2. Какой главный недостаток boxplot?
AОн не показывает медиану
BОн слеп к форме: бимодальное и равномерное распределения могут дать одинаковый ящик
CОн не работает с выбросами
DОн требует цветной печати
3. Чем violin отличается от boxplot?
AНичем
BViolin добавляет форму распределения через зеркальную KDE по бокам
CViolin не показывает медиану
DViolin работает только для двух групп