Какие знаешь меры центральных тенденций?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Меры центральных тенденций (Central Tendency)
Меры центральной тенденции — это статистические показатели, которые описывают центр распределения данных. Это фундаментальные инструменты для понимания любого датасета. Разберу все основные меры, их применение и различия.
1. Среднее арифметическое (Mean)
Определение: Сумма всех значений, разделённая на их количество.
Формула:
μ = (x₁ + x₂ + ... + xₙ) / n
Код:
import numpy as np
import pandas as pd
data = [10, 20, 30, 40, 50]
mean = np.mean(data) # 30
# Или через pandas
df = pd.DataFrame({'values': data})
mean = df['values'].mean() # 30
Свойства:
- ✅ Использует все данные
- ✅ Просто считать и интерпретировать
- ❌ Очень чувствительно к выбросам (outliers)
- ❌ Может не быть типичным значением (например, при асимметричных распределениях)
Когда использовать:
- Нормальное распределение
- Нет сильных выбросов
- Примеры: средняя температура, средний доход в нормальной популяции
2. Медиана (Median)
Определение: Значение, которое делит упорядоченный набор данных пополам. 50% значений выше, 50% ниже.
Код:
data = [10, 20, 30, 40, 50]
median = np.median(data) # 30 (средний элемент)
# Нечётное количество элементов
data2 = [10, 20, 30, 40, 50, 60]
median2 = np.median(data2) # 35 (среднее 30 и 40)
df['values'].median()
Свойства:
- ✅ Устойчива к выбросам (robust)
- ✅ Легко интерпретировать
- ✅ Используется для асимметричных распределений
- ❌ Использует только порядок данных, не сами значения
Когда использовать:
- Распределение несимметричное (skewed)
- Есть выбросы
- Примеры: средний доход в городе (из-за топ-менеджеров), средняя цена жилья
Пример:
# Доходы в тысячах рублей
incomes = [30, 35, 40, 45, 50, 500] # 500 — выброс
print(f"Среднее: {np.mean(incomes)}") # 116.67 (переоценено из-за выброса)
print(f"Медиана: {np.median(incomes)}") # 42.5 (более репрезентативна)
3. Мода (Mode)
Определение: Значение, которое встречается чаще всего в наборе данных.
Код:
from scipy.stats import mode
data = [10, 20, 20, 30, 30, 30, 40]
most_common = mode(data, keepdims=True)
print(most_common.mode) # 30 (встречается 3 раза)
# Через pandas
df['values'].mode() # [30]
# Если несколько мод (бимодальное распределение)
data2 = [1, 1, 2, 2, 3]
# И 1, и 2 встречаются дважды
Свойства:
- ✅ Работает с номинальными данными (категории)
- ✅ Легко найти вручную
- ❌ Не для всех распределений (может не быть моды)
- ❌ Менее стабильна при малых выборках
Когда использовать:
- Категориальные данные (цвет, город, статус)
- Дискретные распределения
- Примеры: самый популярный товар, самый распространённый размер обуви
4. Взвешенное среднее (Weighted Mean)
Определение: Среднее, где некоторые значения имеют больший вес.
Формула:
μ_weighted = (w₁x₁ + w₂x₂ + ... + wₙxₙ) / (w₁ + w₂ + ... + wₙ)
Код:
values = [10, 20, 30] # Оценки
weights = [0.2, 0.3, 0.5] # Веса (важность)
weighted_mean = np.average(values, weights=weights)
print(weighted_mean) # 23.0
# Интерпретация: средняя оценка с учётом важности
Практический пример:
# GPA (средний балл с учётом кредитов)
grades = [4.0, 3.5, 3.8] # Оценки
credits = [3, 4, 3] # Количество часов/кредитов
gpa = np.average(grades, weights=credits)
print(f"GPA: {gpa:.2f}") # 3.78
5. Геометрическое среднее (Geometric Mean)
Определение: N-ный корень из произведения N чисел. Используется для процентов, темпов роста.
Формула:
G = ⁿ√(x₁ × x₂ × ... × xₙ)
Код:
from scipy.stats import gmean
rates = [1.05, 1.10, 1.02] # Темпы роста (5%, 10%, 2%)
geo_mean = gmean(rates)
print(f"Средний темп роста: {(geo_mean - 1) * 100:.1f}%") # 5.7%
# Арифметическое среднее было бы неправильным
arith_mean = np.mean(rates)
print(f"Неправильно: {(arith_mean - 1) * 100:.1f}%") # 5.7% (в этом случае совпадает)
Когда использовать:
- Темпы роста и изменения
- Процентные изменения
- Примеры: средняя доходность инвестиций за несколько лет
6. Гармоническое среднее (Harmonic Mean)
Определение: Обратная величина от среднего арифметического обратных значений. Используется для средних скоростей и коэффициентов.
Формула:
H = n / (1/x₁ + 1/x₂ + ... + 1/xₙ)
Код:
from scipy.stats import hmean
speeds = [60, 90] # км/ч в разные стороны
harmonic_mean = hmean(speeds)
print(f"Средняя скорость: {harmonic_mean:.1f}") # 72 км/ч
# Неправильно использовать среднее арифметическое
print(f"Неправильно: {np.mean(speeds)}") # 75 км/ч
Сравнение мер
import numpy as np
from scipy.stats import gmean, hmean
data = [10, 20, 30, 40, 50]
print(f"Среднее арифметическое: {np.mean(data)}") # 30
print(f"Медиана: {np.median(data)}") # 30
print(f"Геометрическое среднее: {gmean(data):.2f}") # 27.34
print(f"Гармоническое среднее: {hmean(data):.2f}") # 24.49
# С выбросом
data_with_outlier = [10, 20, 30, 40, 1000]
print(f"\nС выбросом:")
print(f"Среднее: {np.mean(data_with_outlier)}") # 220 (искажено!)
print(f"Медиана: {np.median(data_with_outlier)}") # 30 (устойчива)
Связь с распределением
Нормальное распределение:
Модальное значение = Медиана = Среднее
Положительное асимметричное (right-skewed):
Мода < Медиана < Среднее
Пример: доходы, цены на жилье
Отрицательное асимметричное (left-skewed):
Среднее < Медиана < Мода
Пример: оценки на экзамене (много высоких, мало низких)
Практический выбор
| Ситуация | Метрика | Причина |
|---|---|---|
| Нормальное распределение | Среднее | Использует все данные, оптимально |
| Есть выбросы | Медиана | Устойчива к аномалиям |
| Категориальные данные | Мода | Единственная применимая |
| Темпы роста | Геометрическое | Правильно для экспоненциальных процессов |
| Средняя скорость/цена | Гармоническое | Правильно для средних обратных значений |
| Взвешенные данные | Взвешенное среднее | Учитывает важность каждого значения |
Ключевые выводы
✅ Не всегда нужно использовать среднее арифметическое
✅ Выбор меры зависит от типа данных и распределения
✅ Медиана часто лучше для реальных данных (они никогда не нормальны)
✅ Всегда смотри на распределение, прежде чем выбрать метрику
✅ Используй несколько мер вместе для полного понимания