Логнормальное распределение простыми словами
chi-square теста независимости?Содержание:
Зачем это знать
Revenue, средний чек, LTV, длительность сессии, время отклика — всё это не нормальное, а log-normal распределение. Аналитик, который считает t-test на revenue как будто это нормальное — получает искажённые результаты. Понимание log-normal — необходимость.
На собесах часто спрашивают: «какое распределение у среднего чека?» — правильный ответ log-normal или похожее скошенное.
Короткое объяснение
Log-normal — это когда логарифм переменной распределён нормально.
Y ~ Log-normal(μ, σ²) ⟺ log(Y) ~ Normal(μ, σ²)Форма: положительная, скошенная вправо, с длинным хвостом.
Почему возникает
Нормальное — сумма многих независимых эффектов. Log-normal — произведение многих положительных эффектов.
Примеры:
- Доход = базовый × опыт × удача × образование × ... (произведение).
- Длительность сессии — время × скорость загрузки × вовлечённость.
Характеристики
Параметры μ и σ (относятся к log-скейлу).
- Mean: e^(μ + σ²/2)
- Variance: (e^(σ²) - 1) × e^(2μ + σ²)
- Median: e^μ
- Mode: e^(μ - σ²)
Median < Mean всегда для log-normal — классика skewed right.
Визуально
На оригинальной шкале — тяжёлый правый хвост, мода около 0.
На шкале log(X) — симметричный колокол.
Тест на log-normal
Гистограмма
На оригинальной шкале — скошенность вправо. На log-шкале — похоже на нормальное.
QQ plot
QQ plot log(X) против нормального распределения должен быть линейным.
Shapiro-Wilk
Тест log(X) на нормальность. Если p > 0.05 — log-normal подходит.
Примеры в аналитике
Revenue per user
Большинство платят мало, редкие — много. Log-normal.
LTV
Та же логика — длинный хвост power users.
Время отклика
Большинство быстрые, редкие — очень медленные. Log-normal или Weibull.
Длительность сессии
Коротких много, длинных мало — log-normal.
Проблемы с t-test
T-test предполагает нормальное распределение или большое N (через ЦПТ).
На log-normal:
- Малое N: t-test врёт из-за скошенности.
- Большое N: работает, но сходимость к нормальному медленная.
Решение: log-трансформация перед тестом.
from scipy.stats import ttest_ind
# Плохо
ttest_ind(revenue_a, revenue_b)
# Лучше
ttest_ind(np.log(revenue_a + 1), np.log(revenue_b + 1))+ 1 — чтобы log(0) не стал -inf.
В Python
import numpy as np
from scipy.stats import lognorm
# Сэмпл
samples = lognorm.rvs(s=0.5, scale=np.exp(2), size=1000)
# Fit параметров
shape, loc, scale = lognorm.fit(data, floc=0)
mu, sigma = np.log(scale), shapeLog-transform в A/B
Вместо среднего по revenue сравниваем среднее по log(revenue).
Обратная трансформация: geometric mean = exp(mean(log)).
Осторожно: результат на log-шкале интерпретируется как относительное изменение, а не абсолютное.
На собесе
«Какое распределение у revenue?» Log-normal (или похожее скошенное).
«Почему не нормальное?» Revenue = произведение нескольких положительных эффектов, а произведение даёт log-normal (в отличие от суммы — она даёт нормальное).
«Как тестировать?» Log-трансформация + t-test, или Mann-Whitney, или bootstrap.
«Когда не работает log-transform?» Когда есть нули (revenue = 0 у неплатящих).
Частые ошибки
T-test без трансформации
На малом N — смещённый результат.
log(0)
Нужно +1 или фильтрация.
Интерпретация mean(log)
Это логарифм геометрического среднего, а не среднее от revenue.
Медиана vs среднее
На log-normal медиана часто более репрезентативна, чем среднее.
Связанные темы
FAQ
Все positive данные — log-normal?
Нет. Weibull, gamma, exponential тоже на positive support.
Как отличить от gamma?
Shape различается. QQ plot показывает.
Bootstrap лучше?
Для ненормальных данных — часто да. Не требует предположений о распределении.