Форма распределения и асимметрия
Два набора с одинаковым центром и разбросом могут иметь совершенно разную форму. Форма — третий важный аспект данных.
Асимметрия (скошенность, skewness) — мера того, насколько распределение «перекошено» в одну сторону, с длинным хвостом слева или справа.
Три аспекта данных
До сих пор мы описывали данные двумя характеристиками: центр (где) и разброс (насколько кучно). Третья — форма: симметрично ли распределение, есть ли длинный хвост, одна вершина или несколько. Форму обычно видят на гистограмме, но кое-что можно понять и по числам.
Симметрия против скоса
- Симметричное распределение — левая и правая половины зеркальны (рост, ошибки измерений). Среднее ≈ медиане.
- Скос вправо (положительный) — длинный хвост тянется вправо, к большим значениям. Среднее > медианы. Типично для доходов, цен, времени ответа.
- Скос влево (отрицательный) — длинный хвост слева. Среднее < медианы. Например, возраст смерти, баллы лёгкого экзамена.
Среднее и медиана выдают скос
Простейший индикатор формы — сравнить среднее с медианой. Хвост тянет среднее в свою сторону, а медиану почти не двигает.
from statistics import mean, median
# Симметрично
sym = [4, 5, 6, 7, 8, 9, 10]
# Скос вправо: длинный хвост больших значений
right = [1, 2, 2, 3, 3, 3, 4, 10, 25]
# Скос влево: длинный хвост маленьких значений
left = [1, 16, 22, 23, 23, 24, 24, 25, 25]
for name, d in [("симметрично", sym), ("скос вправо", right), ("скос влево", left)]:
m, med = mean(d), median(d)
print(name, "-> среднее:", round(m, 2), "медиана:", med,
"| среднее", ">" if m > med else "<" if m < med else "=", "медианы")
Вывод:
симметрично -> среднее: 7 медиана: 7 | среднее = медианы скос вправо -> среднее: 5.89 медиана: 3 | среднее > медианы скос влево -> среднее: 20.33 медиана: 23 | среднее < медианы
Правило-памятка: среднее тянется в сторону хвоста. Если среднее заметно больше медианы — скос вправо; меньше — скос влево; почти равны — симметрия.
Числовая мера скоса
Существует и формальный коэффициент асимметрии. Удобная прикидка — коэффициент Пирсона: 3·(среднее − медиана) / стандартное отклонение. Знак показывает направление скоса, величина — его силу.
from statistics import mean, median, stdev
def skew(d):
return 3 * (mean(d) - median(d)) / stdev(d)
right = [1, 2, 2, 3, 3, 3, 4, 10, 25]
left = [1, 16, 22, 23, 23, 24, 24, 25, 25]
sym = [4, 5, 6, 7, 8, 9, 10]
print("Скос вправо:", round(skew(right), 2))
print("Скос влево:", round(skew(left), 2))
print("Симметрично:", round(skew(sym), 2))
Вывод:
Скос вправо: 1.14 Скос влево: -1.03 Симметрично: 0.0
Положительное значение — скос вправо, отрицательное — влево, около нуля — симметрия. Удобно для быстрой автоматической проверки формы без построения графика.
Бимодальность — сигнал о смеси
Иногда у данных две вершины (две моды). Это почти всегда значит, что в одну выборку попали две разные группы. Например, рост в смешанной группе мужчин и женщин даёт два «горба». Бимодальность — повод разделить данные и анализировать группы по отдельности, а не усреднять их в одно бессмысленное число.
from collections import Counter
# Две группы слиплись в один набор
heights = [158, 160, 162, 159, 161, 178, 180, 182, 179, 181]
c = Counter(h // 10 * 10 for h in heights) # группируем по десяткам см
for bucket in sorted(c):
print(f"{bucket}-{bucket+9} см:", "#" * c[bucket], f"({c[bucket]})")
Вывод:
150-159 см: ## (2) 160-169 см: ### (3) 170-179 см: ## (2) 180-189 см: ### (3)
В этой грубой «текстовой гистограмме» видно два сгущения — около 160 и около 180 см. Среднее (~170 см) не описывает никого: реальных людей такого роста в выборке почти нет. Вот почему смотреть на форму так же важно, как на центр.
Итог
- Кроме центра и разброса у данных есть форма: симметрия, скос, число вершин.
- Среднее тянется в сторону хвоста: среднее > медианы — скос вправо, меньше — влево.
- Коэффициент асимметрии числом подтверждает направление и силу скоса.
- Две вершины (бимодальность) обычно означают смесь двух групп — их стоит разделить.