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.
- На малых выборках показывайте сами точки.