Нормальное (Gaussian)

Колоколообразное, симметричное. Описывает: рост, IQ, шум.

Параметры: mean (μ), std (σ).

Правило 68-95-99.7:

  • 68% значений в [μ ± σ]
  • 95% в [μ ± 2σ]
  • 99.7% в [μ ± 3σ]
from scipy import stats
data = stats.norm.rvs(loc=100, scale=15, size=1000)

Log-normal

Симметричное в log-шкале. Описывает:

  • Доходы людей
  • Длительность сессий
  • Цены на квартиры
log_data = np.log(data)

Используй log-преобразование чтобы:

  • Применить t-test на log-данных
  • Линеаризовать связь в регрессии

Экспоненциальное

Время между событиями: время до следующего заказа, до отказа железа.

Параметр: λ (rate). Mean = 1/λ.

times_between_orders = stats.expon.rvs(scale=1/lambda_, size=1000)

Какое использовать на собесе

  • Возраст / рост → нормальное
  • Время на сайте / доходы → log-normal
  • Время до следующего события → экспоненциальное
  • Количество событий за период → Пуассон

Q-Q plot

stats.probplot(data, dist='norm', plot=plt)

CLT (Central Limit Theorem)

Среднее выборки из любого распределения → нормальное (при n>30). Поэтому t-test работает даже если исходные данные не нормальные.

НО: если данные сильно скошенные (income), нужно n>500 для адекватной аппроксимации.

Кейс из Kaspi

Аналитик применил t-test к доходам пользователей (log-normal распределение). Получил странный результат. Решение: trim outliers OR log-transform OR Mann-Whitney.