Какие меры центральной тенденции вы знаете?

Ответ

В анализе данных я использую разные меры центральной тенденции в зависимости от распределения и типа данных:

1. Среднее арифметическое (Mean) — для нормально распределенных данных без выбросов:

import numpy as np

salaries = [50000, 55000, 60000, 65000, 70000]
mean_salary = np.mean(salaries)  # 60000

# В pandas:
import pandas as pd
df = pd.DataFrame({'salary': salaries})
mean_pandas = df['salary'].mean()

2. Медиана (Median) — моя основная мера при наличии выбросов:

# Пример с выбросом (CEO зарплата)
salaries_with_outlier = [50000, 55000, 60000, 65000, 70000, 1000000]
median_salary = np.median(salaries_with_outlier)  # 62500.0
mean_salary = np.mean(salaries_with_outlier)      # 205833.33 (искажено!)

3. Мода (Mode) — для категориальных данных или поиска наиболее частых значений:

from statistics import mode

product_categories = ['A', 'B', 'A', 'C', 'A', 'B', 'A']
most_common = mode(product_categories)  # 'A'

# Для нескольких мод:
from scipy import stats
values = [1, 2, 2, 3, 3, 4]
modes_result = stats.mode(values)  # ModeResult(mode=2, count=2)

4. Средневзвешенное (Weighted Mean) — когда наблюдения имеют разную значимость:

grades = [85, 90, 78, 92]
weights = [0.2, 0.3, 0.3, 0.2]  # Веса экзаменов
weighted_mean = np.average(grades, weights=weights)  # 86.3

# Практический пример - средняя цена с учетом количества продаж:
prices = [100, 200, 300]
quantities = [10, 5, 2]
avg_price = np.average(prices, weights=quantities)  # 152.94

5. Усеченное среднее (Trimmed Mean) — компромисс между средним и медианой:

from scipy import stats
data_with_outliers = [10, 12, 13, 14, 15, 1000]  # 1000 - выброс
trimmed_mean = stats.trim_mean(data_with_outliers, 0.1)  # Игнорируем 10% с каждого края

Мой подход к выбору:

  • Нормальное распределение без выбросов → среднее арифметическое
  • Наличие выбросов → медиана (особенно для зарплат, цен недвижимости)
  • Категориальные данные → мода
  • Взвешенные данные → средневзвешенное (например, индексы, средние оценки)
  • Сомнительные данные → смотрю все меры и сравниваю

В отчетах я всегда указываю, какую меру использовал и почему, особенно если данные могут содержать выбросы.

Ответ 18+ 🔞

Давай разберем эту математическую хрень на пальцах, чтобы было понятно, как не наебаться с цифрами. Терпения ноль ебать, когда вижу, как люди берут среднее арифметическое от зарплат, где один чувак получает как все остальные вместе взятые.

1. Среднее арифметическое (Mean) — это когда всё ровно, как стол. Идеально, если у тебя данные — как солдаты в строю, без этих выскочек-выбросов. Берёшь, складываешь, делишь — красота.

import numpy as np
salaries = [50000, 55000, 60000, 65000, 70000]
mean_salary = np.mean(salaries)  # 60000

Вот тут всё честно, все получают плюс-минус одинаково. Но жизнь, ёпта, не такая.

2. Медиана (Median) — вот это, блядь, моя любимая штука, когда в данных завелся пидарас шерстяной с запредельной цифрой. Смотри, что происходит:

# Допустим, к нашим работягам подсел CEO
salaries_with_outlier = [50000, 55000, 60000, 65000, 70000, 1000000]
median_salary = np.median(salaries_with_outlier)  # 62500.0
mean_salary = np.mean(salaries_with_outlier)      # 205833.33

Видишь разницу? Среднее арифметическое — 205 тысяч, будто все такие богатые! А медиана показывает реальную картину — 62.5 тысячи, что по центру. Медиана не парится на выбросы, она их просто игнорирует, как назойливого соседа. Для зарплат, цен на квартиры — всегда смотри медиану, иначе будешь ходить с охуенно раздутыми цифрами.

3. Мода (Mode) — это что у нас чаще всего встречается. Нужна, когда работаешь не с числами, а с категориями. Типа, какой товар народ чаще всего берет.

from statistics import mode
product_categories = ['A', 'B', 'A', 'C', 'A', 'B', 'A']
most_common = mode(product_categories)  # 'A'

Всё просто — народ хавает продукт 'A', вот на него и делай ставку. Если мод несколько — уже интереснее, значит аудитория разделилась.

4. Средневзвешенное (Weighted Mean) — когда не все данные одинаково полезны. Одни экзамены важнее других, одни продажи весомее. Вот тут надо умножать на вес.

grades = [85, 90, 78, 92]
weights = [0.2, 0.3, 0.3, 0.2]  # Последний экзамен был легче, но нам похуй, вес есть вес
weighted_mean = np.average(grades, weights=weights)  # 86.3

Так и с ценами: если продал 10 штук по 100 и 2 штуки по 1000, средняя цена — не 550, а считай с учетом веса.

5. Усеченное среднее (Trimmed Mean) — хитрая жопа, помесь среднего и медианы. Берёшь данные, отрезаешь с краёв, например, по 10% самых маленьких и самых больших значений, а от оставшегося мясца считаешь среднее.

from scipy import stats
data_with_outliers = [10, 12, 13, 14, 15, 1000]  # 1000 — явный мудак-выброс
trimmed_mean = stats.trim_mean(data_with_outliers, 0.1)

Получается что-то устойчивое к выбросам, но не такое радикальное, как медиана. Компромисс, блядь.

Какой мой подход, чувак?

  • Всё ровно, распределение как колокольчик? — Среднее арифметическое, без затей.
  • Завелись жирные выбросы, которые всё портят? — Сразу медиана. Зарплаты, цены — наш выбор.
  • Работаешь с категориями (цвет, модель, регион)? — Мода, чтобы понять, что в тренде.
  • Данные разной важности? — Средневзвешенное, нефиг уравнивать всё под одну гребёнку.
  • Не уверен, но и медиану целиком не хочется? — Глянь усечённое среднее, иногда выстреливает.

Главное — никогда не тычь в отчёт голое среднее арифметическое, не посмотрев на данные. Доверия ебать ноль к таким методам. Всегда смотри гистограмму, ищи выбросы и объясняй, почему выбрал ту или иную меру. А то будет тебе хиросима в аналитике, а не отчёт.