Если ваша работа ограничивается построением дашбордов в Excel и ответами на вопрос «сколько заработали вчера» – матан вам и правда не нужен, но если вы хотите понимать, почему метрики ведут себя именно так, а не иначе, и тем более – прогнозировать их поведение, то без производных, логарифмов и пределов вы не обойдетесь.
В интернете тонны статей «Математика для аналитиков», но они либо уходят в дебри интегрирования по частям, либо ограничиваются уровнем «логарифм – это штука, которая делает большие числа маленькими». Давайте попробуем найти золотую середину.
1. Логарифмы
Логарифм – это не просто функция в pandas, а ответ на вопрос: сколько раз нужно перемножить число само на себя, чтобы получить другое число? Но для аналитика важнее другое: логарифм превращает умножение в сложение, а экспоненциальный рост – в линейный.
Например, вы анализируете time-to-conversion – время от первого касания с пользователем до покупки. Распределение классическое: большинство покупают в первый день, дальше – длинный «хвост» до 30 дней.
Если вы посчитаете среднее арифметическое, получите цифру в примерно 4,5 дня, но среднее здесь бессмысленно: 90% пользователей купили в день 0-1, а остальные 10% растянули выборку почти до бесконечности, тут надо считать медиану на логарифмической шкале.
Расчет на Python:
import numpy as np import pandas as pd # Генерируем данные с длинным хвостом np.random.seed(42) days = np.random.pareto(2, 10000) * 2 days = np.clip(days, 0, 60) df = pd.DataFrame({'days_to_conv': days}) # Считаем метрики print(f"Среднее: {df['days_to_conv'].mean():.2f}") print(f"Медиана: {df['days_to_conv'].median():.2f}") print(f"Среднее геометрическое: {np.exp(np.log1p(df['days_to_conv']).mean()):.2f}")
Получаем:
Среднее арифметическое: 4,5 - сдвинуто хвостом, использовать не очень правильно
Медиана: 1,2 - честная «типичная» цифра, результат уже более отражает действительность
Среднее геометрическое: 1,8 - это компромиссный вариант
Вывод: среднее геометрическое (экспонента от среднего логарифмов) часто дает более адекватную оценку центра распределения для величин с мультипликативной природой.
Логарифмирование в регрессии
Когда вы строите регрессию вида log(y) = a * log(x) + b, коэффициент a — это эластичность: то есть на сколько процентов изменится y при изменении x на 1%.
2. Производные: детектор скорости и фаза луны
Производная – это не страшный предел из матана, а просто скорость изменения функции. В дискретном мире (а данные у нас почти всегда дискретны) производная — это diff() / shift().
Простой пример:
Вы запустили рекламу и выручка выросла на 10%, это круто или нет?
Правильный ответ: Смотря какая была производная в прошлом периоде.
Если месяц назад рост был 30%, а теперь 10% – то это сигнал бедствия, хотя абсолютная цифра все еще зеленая.
Производная второго порядка
В аналитике мы редко останавливаемся на первой производной, вторая производная (ускорение) показывает, замедляется рост или ускоряется. Рассмотрим кейс с подписками.
У вас есть помесячные данные по новым платящим пользователям:
Месяц | Новые платящие | Прирост (1-я произв.) | Ускорение (2-я произв.) |
|---|---|---|---|
Янв | 1000 | - | - |
Фев | 1100 | +100 | - |
Мар | 1150 | +50 | -50 (замедление) |
Апр | 1180 | +30 | -20 (еще замедление) |
Визуально рост есть, но ускорение отрицательное – значит, мы выходим на плато, в этом случае, если не видеть вторую производную, можно упустить момент и начать дергать рычаги, когда поезд уже тормозит.
Расчет на Python:
def calculate_derivatives(series): first_deriv = series.diff() # первая производная - скорость second_deriv = first_deriv.diff() # вторая производная - ускорение return pd.DataFrame({ 'original': series, 'velocity': first_deriv, 'acceleration': second_deriv })
Производная как оптимизация
Каждый, кто тренировал нейросети или бустинги, пользовался градиентным спуском. Градиент – это вектор частных производных, он показывает направление наискорейшего роста функции, а мы идем в противоположную сторону и получаем минимизацию функции потерь.
В аналитике мы редко пишем градиентный спуск руками, но понимать, что loss падает быстрее всего в направлении антиградиента ��� must have, ведь иначе вы не поймете, почему скорость обучения (learning rate) вообще существует.
3. Пределы и асимптоты
Предел в аналитике – это точка насыщения, то, к чему стремится процесс, но никогда не достигает (или достигает асимптотически).
Например, вы считаете когортный retention: классическая картина: после 6-7 месяцев падение останавливается, и retention выходит на плато 15-20%.
Это и есть предел – математический, а не философский.
Модель вида Retention(t) = R_inf + (R_0 - R_inf) * exp(-t / tau) отлично описывает такие процессы.
Здесь R_inf – это асимптота, предел, ниже которого retention уже не упадет (при текущем качестве продукта).
Другой пример, вы запустили реферальную программу и количество новых регистраций растет, но рыночная воронка имеет верхний предел – Total Addressable Market (TAM).
Если вы этого предела не знаете, будете удивляться, почему при удвоении бюджета на рефералки рост замедляется.
Ответ простой: вы приближаетесь к асимптоте, модель с пределом:
NewUsers(t) = TAM (1 - exp(-k spend(t)))
Здесь TAM — тот самый предел и его можно оценить эконометрически, подобрав параметры модели.
Еще пример, вспомним теорему Байеса: когда мы обновляем априорную вероятность на основе данных, апостериорная вероятность сходится к какому-то значению при бесконечном количестве наблюдений, это тоже предел и он определяет, насколько мы можем быть уверены в гипотезе.
4. Интегралы
Интеграл – это сумма бесконечно малых приращений, в дискретном мире cumsum(), rolling sum, они же итоги за период.
Пример: LTV клиента за 12 месяцев - это интеграл от функции платежей по времени, если клиент платит каждый месяц, но сумма меняется, LTV = сумма всех платежей за период.
Но есть нюанс: в реальности мы считаем LTV с дисконтированием, деньги сегодня дороже денег через год. Поэтому формула превращается в:
LTV = ∫ p(t) exp(-rt) dt
Где r — ставка дисконтирования,
p(t) — функция платежей.
Расчет на Python:
def discounted_ltv(payments, rate, periods): discount_factors = [(1 + rate) ** (-i) for i in range(periods)] return sum(p * d for p, d in zip(payments[:periods], discount_factors))
Интеграл в когортном анализе
Когда вы считаете накопленный retention (сколько пользователей из когорты осталось к месяцу N), вы фактически интегрируете функцию удержания или ARPU за период – это интеграл от интенсивности платежей.
Пример по-сложнее, в задачах uplift-моделирования (оценка прироста вероятности от воздействия) мы часто считаем площадь под кривой uplift (AUUC). Это аналог AUC-ROC, но для uplift-моделей, но по сути – это интеграл от кумулятивной функции прироста. Без понимания, что мы интегрируем, невозможно интерпретировать метрику.
Интеграл как сглаживание
Интеграл (или скользящая сумма) – это мощный инструмент сглаживания, если ваши данные шумят (например, посещаемость сайта поминутно), вы берете скользящее среднее за час — это интеграл с окном, деленный на длину окна.
Расчет на Python:
# Скользящее среднее как дискретный интеграл с окном df['smoothed'] = df['raw'].rolling(window=60, center=True).mean()
Краткая таблица итогов
Математическое понятие | Что это в коде | Где применяется в аналитике |
|---|---|---|
Логарифм | np.log1p(), np.log() | Логарифмирование распределений, расчет эластичностей, среднее геометрическое |
Производная (1-я) | .diff() | Скорость роста, темпы прироста, градиентный спуск |
Производная (2-я) | .diff().diff() | Ускорение/замедление тренда, переломные моменты |
Предел / Асимптота | Параметр в нелинейных моделях (curve_fit) | Насыщение рынка, предельный retention, емкость аудитории |
Интеграл | .cumsum(), .rolling().sum() | LTV, накопленные итоги, площадь под кривой (AUC, AUUC) |
Интеграл с весом | np.average(weights=...) | Дисконтированный LTV, взвешенные метрики |
Итог: Никто не ждет, что аналитик будет брать интегралы в уме или находить пределы функций без калькулятора, но понимать, что скрывается за вызовом библиотечной функции – это must have:
Когда вы берете log1p — вы приручаете степенной закон.
Когда смотрите на вторую производную — ловите момент перед падением.
Когда оцениваете LTV — интегрируете денежный поток.
Когда говорите «дальше рост невозможен» — опираетесь на понятие предела.
Математика в аналитике – это не про циферки и формулы, это про ментальные модели, которые позволяют не тупить в критический момент и говорить бизнесу не только что именно произошло, но и почему это произошло, как это исправить и что вообще будет дальше.
📚Более сжатая и простая версия статьи https://t.me/tanyaVSdannye/52
✔️Больше про будни и задачи аналитика в Авито в моем тг канале 🌸Таня и Данные📊
