База

Описательная статистика

Центр и разброс

Мера Формула / смысл Чувствительна к выбросам?
Среднее $\bar{x}$ $\frac{1}{n}\sum x_i$ да
Медиана середина отсортированного списка нет
Мода самое частое значение нет
Дисперсия $s^2$ $\frac{1}{n-1}\sum (x_i - \bar{x})^2$ очень
Стандартное отклонение $s$ $\sqrt{s^2}$, в единицах данных очень
Перцентиль $p_q$ значение, ниже которого $q\%$ данных нет
Межквартильный размах IQR $p_{75} - p_{25}$ нет

descriptive stats

  • У скошенных распределений (время ответа, доходы, длины текстов) среднее больше медианы — хвост тянет его вправо.
  • Почему делят на $n - 1$: среднее посчитано по тем же данным, и отклонения от него в среднем меньше, чем от истинного $\mu$; поправка Бесселя компенсирует это.
  • z-оценка $z = (x - \bar{x})/s$ — сколько стандартных отклонений от среднего. $\lvert z\rvert > 3$ — кандидат в выбросы.

Связь двух переменных

Корреляция Пирсона:

$$ r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2}\sqrt{\sum (y_i - \bar{y})^2}} \in [-1, 1] $$

  • $r$ ловит только линейную связь; корреляция Спирмена — любую монотонную (считается по рангам).
  • Корреляция ≠ причинность: продажи мороженого и число утоплений коррелируют из-за третьего фактора — жары.

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

Схема порядка изучения есть на странице оригинала.

🏋️ Практика Б10

Б10.1. Данные: 2, 4, 4, 4, 5, 5, 7, 9. Найдите среднее, медиану, моду и стандартное отклонение (по $n$).

▶️ Ответ Среднее 5, медиана 4.5, мода 4, σ = 2 (дисперсия по $n$ равна 4).

Б10.2. Время ответа сервиса: p50 = 120 мс, p99 = 2400 мс. Что это говорит о сервисе?

▶️ Ответ Типичный запрос быстрый, но 1% запросов в 20 раз медленнее — тяжёлый хвост. Среднее тут почти бесполезно; оптимизировать нужно хвост (таймауты, батчинг, кэш).

Б10.3. Посчитайте корреляцию между $x = (1, 2, 3, 4, 5)$ и $y = x^2$ и между $x = (-2, -1, 0, 1, 2)$ и $y = x^2$.

▶️ Ответ
import numpy as np
x = np.arange(1, 6); print(np.corrcoef(x, x**2)[0, 1])     # 0.98 — почти линейная связь
x = np.arange(-2, 3); print(np.corrcoef(x, x**2)[0, 1])    # 0.0 — связь есть, но нелинейная