Нормальное (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.