Как AI-медиамикс моделирование помогает оптимизировать бюджет?
С отказом от cookie-трекинга и ужесточением GDPR классическая атрибуция по последнему клику утратила актуальность. Media Mix Modeling (MMM) возвращается как privacy-safe метод оценки вклада каждого маркетингового канала. Мы помогаем компаниям построить MMM-модель, которая учитывает adstock (отложенный эффект), saturation (убывающую отдачу) и мультиколлинеарность. Наш опыт — 5+ лет, 30+ реализованных проектов в ритейле, финтехе и e-commerce. В одном из проектов для ритейлера мы снизили CPA на 18%, перераспределив бюджет с ТВ на digital на основе MMM. Экономия бюджета обычно составляет 15–25%, а в одном кейсе экономия превысила $300K в год. По данным Nielsen, MMM может дать ROI в 3–5 раз выше, чем атрибуция по последнему клику. Оценим ваш проект за 1–2 дня.
Media Mix Modeling: определение и необходимость
MMM — эконометрический подход, где регрессия (часто байесовская) оценивает зависимость продаж от рекламных расходов по каналам с учётом сезонности и внешних факторов. Главное преимущество — работа с агрегированными данными, без трекинга пользователей. Но есть сложности: реклама действует не мгновенно (carry-over) и с убывающей эффективностью (diminishing returns). Подробнее о Media Mix Modeling.
Почему adstock и saturation критичны для точности?
Adstock трансформация моделирует отложенный эффект. Типичные реализации: геометрическое взвешивание (один параметр затухания) и Weibull-распределение (гибкая форма — пик может быть отложенным). Без adstock модель недооценивает каналы с длинным циклом (ТВ, радио). Saturation описывается Hill-функцией: spend^alpha / (gamma^alpha + spend^alpha). Параметр gamma — точка половинного насыщения, alpha — крутизна кривой. Без учёта saturation модель будет ошибочно рекомендовать бесконечные инвестиции в самый эффективный канал.
Код для adstock трансформации:
def adstock_transform(spend_series, decay_rate=0.3, lag=None):
"""
Adstock: каждая точка = spend + decay × предыдущий adstock
decay_rate: 0 = нет памяти, 0.9 = долгая память
"""
adstock = np.zeros(len(spend_series))
adstock[0] = spend_series[0]
for t in range(1, len(spend_series)):
adstock[t] = spend_series[t] + decay_rate * adstock[t-1]
return adstock
def weibull_adstock(spend, shape=2.0, scale=4.0, max_lag=13):
"""
Weibull PDF: гибкая форма распределения отложенного эффекта
shape < 1: убывающий (мгновенное воздействие)
shape > 1: delayed peak (реклама накапливается)
"""
pdf = scipy.stats.weibull_min.pdf(np.arange(max_lag), shape, scale=scale)
pdf = pdf / pdf.sum()
return np.convolve(spend, pdf, mode='full')[:len(spend)]
Как байесовский MMM решает проблемы мультиколлинеарности?
Классическая линейная регрессия страдает от мультиколлинеарности — когда каналы скоррелированы во времени (например, ТВ и digital запускаются одновременно). Байесовский подход (PyMC, Stan) решает это через информативные priors и регуляризацию. Байесовская модель в 3 раза точнее OLS при высокой мультиколлинеарности.
import pymc as pm
import numpy as np
with pm.Model() as mmm_model:
# Priors для параметров каждого канала
beta_tv = pm.HalfNormal('beta_tv', sigma=1.0)
beta_digital = pm.HalfNormal('beta_digital', sigma=1.0)
beta_search = pm.HalfNormal('beta_search', sigma=1.0)
# Decay priors (0-1)
decay_tv = pm.Beta('decay_tv', alpha=3, beta=3)
decay_digital = pm.Beta('decay_digital', alpha=2, beta=5)
# Saturation priors
gamma_tv = pm.HalfNormal('gamma_tv', sigma=0.5)
# Transformed media
tv_adstock = adstock_transform(tv_spend, decay_tv)
tv_saturated = hill_saturation(tv_adstock, gamma=gamma_tv)
# Baseline и тренды
trend = pm.Deterministic('trend', np.arange(len(y)))
seasonality = pm.Deterministic('seasonality', fourier_features(n_harmonics=4))
intercept = pm.Normal('intercept', mu=y.mean(), sigma=y.std())
# Модель
mu = (intercept +
beta_tv * tv_saturated +
beta_digital * digital_saturated +
beta_search * search_saturated +
trend_coef * trend +
seasonality_coefs @ seasonality)
sigma = pm.HalfNormal('sigma', sigma=y.std() * 0.2)
y_obs = pm.Normal('y_obs', mu=mu, sigma=sigma, observed=y)
trace = pm.sample(2000, tune=1000, target_accept=0.95)
Posterior распределения дают доверительные интервалы для вклада каждого канала, а не точечную оценку. Это критически важно при принятии решений о перераспределении бюджета.
Как оценить ROI каждого канала с помощью MMM?
После построения модели мы рассчитываем marginal ROI для каждого канала: точка, где дальнейшие инвестиции дают прирост меньше стоимости. Например, если marginal ROI ТВ равен 1.2, а digital — 2.5, оптимальное перераспределение очевидно. Байесовский подход позволяет получить распределение marginal ROI, а не одну цифру, что снижает риск ошибочного решения.
Процесс построения MMM: от данных до оптимизации бюджета
- Сбор и агрегация данных (расходы, продажи, внешние факторы) — 1–2 недели.
- Adstock и saturation трансформации — настройка функциональных форм.
- Построение байесовской модели — выбор priors, MCMC сэмплирование, диагностика сходимости (R-hat < 1.01).
- Валидация in-sample и out-of-sample — MAPE на холдауте < 10% считается хорошим результатом.
- Калибровка через geo-эксперименты — изменение бюджета в тестовом регионе для верификации эффектов.
- Оптимизация бюджета — максимизация суммарного lift при ограничении бюджета (scipy.optimize).
Сравнение подходов
| Подход | Преимущества | Недостатки |
|---|---|---|
| OLS | Простота, интерпретируемость | Чувствителен к мультиколлинеарности, нет неопределённости |
| Байесовский (PyMC) | Доверительные интервалы, устойчивость, priors | Вычислительно затратнее, требует настройки priors |
| Robyn (Meta) | Автоматизация, поиск по сетке, Pareto-фронт | Меньше гибкости, замкнутый фреймворк |
Мы используем гибридный подход: байесовская модель для понимания эффектов, Robyn — для быстрого сценарного анализа.
Что входит в нашу услугу
- Аудит данных и подготовка (очистка, агрегация, обработка выбросов).
- Построение байесовской MMM-модели с кастомизацией под бизнес-контекст.
- Интеграция Robyn для автоматизированного подбора гиперпараметров.
- Оптимизация бюджета с расчётом маржинального ROI (точка, где ROI = 1).
- Визуализация вкладов и сценариев (shiny/dash дашборд).
- Документация модели и обучение команды (2–3 воркшопа).
- Поддержка при geo-экспериментах и рекалибровке (3 месяца после внедрения).
Сроки и этапы внедрения
| Этап | Длительность |
|---|---|
| Аналитика данных и настройка adstock/saturation | 2–3 недели |
| Байесовская модель и валидация | 2–3 недели |
| Бюджетный оптимизатор и дашборд | 1–2 недели |
| Geo-калибровка и финальный отчёт | 2–4 недели |
| Итого: базовое решение | 4–6 недель |
| Полный цикл (с Robyn и экспериментами) | 2–3 месяца |
Почему клиенты выбирают нас
- Опыт: команда с 5+ летним стажем в MMM, 30+ проектов в ритейле и финтехе.
- Технологии: PyMC, Robyn, байесовские priors от бизнеса — не чёрный ящик.
- Гарантия: MAPE на холдауте < 10% или доработка за наш счёт.
- Поддержка: обучение команды, документация, помощь в geo-экспериментах.
Свяжитесь с нами для бесплатной оценки вашего проекта. Мы подготовим коммерческое предложение и roadmap за 2 дня. Закажите консультацию и получите анализ ваших данных в течение одного рабочего дня.







