Ответ
В анализе данных я использую разные меры центральной тенденции в зависимости от распределения и типа данных:
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)
Получается что-то устойчивое к выбросам, но не такое радикальное, как медиана. Компромисс, блядь.
Какой мой подход, чувак?
- Всё ровно, распределение как колокольчик? — Среднее арифметическое, без затей.
- Завелись жирные выбросы, которые всё портят? — Сразу медиана. Зарплаты, цены — наш выбор.
- Работаешь с категориями (цвет, модель, регион)? — Мода, чтобы понять, что в тренде.
- Данные разной важности? — Средневзвешенное, нефиг уравнивать всё под одну гребёнку.
- Не уверен, но и медиану целиком не хочется? — Глянь усечённое среднее, иногда выстреливает.
Главное — никогда не тычь в отчёт голое среднее арифметическое, не посмотрев на данные. Доверия ебать ноль к таким методам. Всегда смотри гистограмму, ищи выбросы и объясняй, почему выбрал ту или иную меру. А то будет тебе хиросима в аналитике, а не отчёт.