Моделирование комплекса маркетинга с использованием PyMC3

Автор: Дмитрий Иванов [Команда P9X]

~8 минут чтения

Фото Джереми Безенджера на Unsplash

В этой статье я применяю байесовский подход к маркетинговой задаче оценки влияния расходов на рекламу в разных медиаканалах на выручку. Я рассматриваю несколько аспектов байесовского моделирования, которые должны быть важны для практикующего специалиста по MMM:

  • Нормализация зависимых и независимых переменных и выбор априорных распределений;
  • Влияние нормализации переменной отклика на оцениваемые эффекты.

Кроме того, я сравниваю результаты с фреймворком Robyn, следуя его методологии, — это пакет с открытым исходным кодом для моделирования MMM, который использует регрессию Риджа и оптимизацию без градиента для гиперпараметров.

Предыдущие публикации по моделированию маркетингового микса и байесовскому выводу

Было опубликовано довольно много статей по моделированию маркетингового микса с использованием байесовского программирования, охватывающих различные аспекты моделирования, такие как:

Структура статьи

  • Моделирование маркетингового микса — я даю краткое введение в теорию, лежащую в основе MMM.
  • Эффект переноса (Adstock / Carryover Effect) — я рассматриваю различия в геометрических функциях переноса, предоставляю реализацию функции переноса в Theano, используемой во фреймворке Robyn.
  • Эффект убывающей отдачи / насыщения (Diminishing Returns / Saturation Effect) — я рассматриваю различные функции, которые можно использовать для моделирования убывающей отдачи.
  • Моделирование — основная часть этой статьи, в которой я исследую влияние нормализации данных на результаты. Я использую демонстрационные данные, предоставленные командой Robyn, и следую методологии Robyn для обработки данных. Наконец, я сравниваю результаты с моделированием в Robyn.

Моделирование маркетингового микса

Половина денег, которые я трачу на рекламу, тратится впустую; проблема в том, что я не знаю, какая половина (Джон Ванамейкер)

Цель MMM — понять движущие силы продаж, измерив влияние всех факторов, которые могут влиять на продажи. Эти факторы можно разделить на две основные группы:

  • Группа факторов, имеющих только косвенное влияние на продажи (также называемая базовой линией), такие как экономическая ситуация, праздники, погода, конкуренция;
  • Факторы, которые имеют прямое влияние на продажи (также называемые маркетинговым вкладом), такие как расходы на рекламу (ad spend) в разных медиаканалах (телевидение, радио, онлайн-платформы) или цена и акции.

Цель моделиста — определить релевантные компоненты, которые могут влиять на продажи, подготовить исторические данные временных рядов маркетинговой активности и других (контрольных) переменных и построить статистическую модель, которая оценивает влияние каждого из компонентов на продажи. Обычно это делается с помощью множественной линейной регрессии.

Весь процесс усложняется двумя маркетинговыми эффектами: эффектом переноса и эффектом убывающей отдачи. Эффект рекламы на продажи может иметь эффект переноса, означающий, что на продажи будет влиять реклама в течение нескольких дней или недель после размещения рекламы. Более того, эффект рекламы может быть не немедленным из-за задержки потребительского отклика, и в этом случае мы говорим об отложенном эффекте переноса.

Убывающая отдача предполагает, что начиная с определённых расходов на медиа, зависимость между расходами и продажами становится нелинейной и достигает точки насыщения, в которой дополнительный евро, вложенный в рекламу, не приведёт к увеличению продаж.

Задача в MMM — смоделировать эффекты переноса и насыщения для каждого медиаканала наряду с базовыми и медиакомпонентами, применяя некоторые ограничения к моделированию, которые имеют смысл с точки зрения маркетинга. Одно из ограничений состоит в том, что расходы на медиа имеют положительное влияние на продажи, требуя, чтобы линейная модель оценивала положительные коэффициенты для медиаканалов.

Решение этой задачи требует фреймворка моделирования, способного оптимизировать различные параметры с учётом различных ограничений и предварительных знаний. Этого можно достичь либо с помощью общих фреймворков оптимизации гиперпараметров, либо с помощью байесовского программирования. В этой статье я использую PyMC3, байесовский фреймворк, для моделирования маркетингового микса.

Эффект переноса / Adstock

Существует несколько функций преобразования adstock, которые мы можем использовать для моделирования эффекта переноса. Наиболее часто используемое преобразование — это так называемый adstock с геометрическим затуханием. Однако оно представлено в двух вариантах. Первый описан в этой статье и имеет три параметра для оценки:

  • Коэффициент затухания эффекта рекламы: 0 < α < 1, что означает, если мы инвестируем 100 евро сегодня, а α равен 0,5, то ожидаемый эффект завтра составит 50 евро;
  • Максимальная продолжительность эффекта (в днях, неделях) L, предполагаемая для медиаканала;
  • Задержка пикового эффекта θ (0 ≤ θ ≤ L-1), моделирующая возможную задержку эффекта от расходов на рекламу, которая не начнётся немедленно.

Реализация этой версии преобразования может быть найдена здесь. Другие реализации, основанные на этой версии, но имеющие несколько иной расчёт весов задержек, можно найти здесь и здесь.

Второй вариант намного проще в реализации. Он имеет только один параметр — коэффициент затухания α. Команда Robyn использует этот вариант в своём фреймворке.

Убывающая отдача / Saturation Effect

Существуют различные функции, которые можно использовать для моделирования нелинейной зависимости между расходами на рекламу и продажами, такие как степенная функция, отрицательная экспонента или логистическая. Команда Robyn использует функцию Хилла, описанную в этой статье.

Моделирование

Данные

Я использую демонстрационный набор данных, предоставленный Robyn, и следую тем же методологическим шагам в подготовке данных, чтобы иметь одинаковую исходную точку для сравнения. Для сравнения с решениями Robyn я запустил файл demo.R, который поставляется с пакетом Robyn, написанный на R, без каких-либо изменений в настройках.

Набор данных состоит из 208 недель выручки, имеющей:

  • 5 каналов расходов на медиа: tv_S, ooh_S, print_S, VK_S, search_S;
  • 2 медиаканала, которые также имеют информацию об экспозиции (Impression, Clicks): VK_I, search_clicks_P;
  • Органические медиа без расходов: newsletter;
  • Контрольные переменные: events, holidays, competitor sales (competitor_sales_B).

Подготовка данных

Мы должны применить два подготовительных шага, как описано в Robyn:

Robyn использует Prophet, открытую библиотеку машинного обучения от VK для прогнозирования временных рядов. Мы используем Prophet для автоматического разложения тренда, сезонности и праздничных эффектов непосредственно из отклика в качестве входных переменных для дальнейшего моделирования. Эта возможность часто увеличивает соответствие модели и уменьшает авторегрессионные паттерны в остатках.

Кроме того, мы можем преобразовать категориальные переменные, такие как events, в числовые с помощью разложения Prophet.

Второй подготовительный шаг:

Когда используются переменные экспозиции (impressions, clicks, GRPs и т. д.) вместо расходов, Robyn подгоняет нелинейную модель с функцией Михаэлиса-Ментен между экспозицией и расходами, чтобы установить связь между расходами и экспозицией.

Второй шаг позволит нам преобразовать экспозицию в расходы для окончательного сравнения доли расходов и доли эффекта.

Давайте сначала загрузим данные:

Prophet Decomposition

Теперь мы готовы подогнать Prophet к нашим данным, включая праздники, категориальную переменную и используя ежегодную сезонность. Важно отметить, что мы применяем разложение ко всем доступным данным, а не к окну моделирования.

Оценка расходов-экспозиции

На этом этапе мы оцениваем нелинейную зависимость между расходами и экспозицией с помощью функции Михаэлиса-Ментен.

Байесовское моделирование

Теперь мы готовы к моделированию. Мы моделируем нашу зависимую переменную (доход) как аддитивную линейную регрессию, которая может быть описана следующим уравнением:

где _b 0 соответствует базовому доходу, _b m коэффициенты соответствуют медиапеременным, которые были преобразованы с помощью функций переноса и насыщения, _b c коэффициенты соответствуют контрольным переменным и ϵ — некоторый шум. Все упомянутые коэффициенты, шум и параметры функции переноса и насыщения должны быть оценены моделью.

Нормализация

Первое решение, которое мы должны принять до моделирования, — как мы будем нормализовать наши зависимые и независимые переменные. Нормализуя независимые переменные, мы обобщаем наше моделирование для других источников данных, потому что мы можем использовать одни и те же априорные распределения для большинства наших независимых переменных. Более того, будет очень сложно установить априорные распределения для ненормализованных данных. Поэтому я применяю нормализацию 0–1 к независимым переменным и экспериментирую с двумя различными нормализациями зависимой переменной:

  • Масштабирование на 100K;
  • Нормализация 0–1.

Масштабирование на 100K

Оригинальный диапазон доходов составляет 672 250–3 827 520, поэтому, масштабируя доход на 100K, я получаю следующий диапазон: 6,72–38,27, что упрощает экспериментирование с априорными распределениями.

0–1 Нормализация

Давайте проведём тот же эксперимент, но на этот раз нормализуя зависимую переменную между 0 и 1.

Сравнение с Robyn

Robyn генерирует набор моделей и позволяет модельеру выбрать наиболее подходящую для бизнеса. Среди лучших моделей я субъективно выбрал одну, которая более или менее сопоставима с моделями, сгенерированными PyMC3.

Заключение

В этой статье я экспериментировал с нормализацией независимых и зависимых переменных, априорными распределениями и апостериорными распределениями. Я использовал методологию подготовки данных, предложенную Robyn, которая позволяет повторно использовать код в этой статье в реальных сценариях. Аналогично я сравнил результаты байесовского моделирования с Robyn. Поскольку окончательный выбор модели актуален для бизнеса, не существует простого способа определить, какие модели, сгенерированные Robyn или PyMC3, были лучше в этих экспериментах без дополнительного бизнес-контекста и калибровки. Если сравнивать NRMSE в одиночку, то выбранная топовая модель, сгенерированная Robyn, имела более низкий NRMSE и, таким образом, лучшее соответствие. Поскольку Robyn дополнительно оптимизирует бизнес-значимый показатель, у него меньше шансов сгенерировать модель, которая статистически точна, но нереалистична с точки зрения маркетинга. Я считаю, что предложенное байесовское решение MMM может быть улучшено. Некоторые вопросы, которые остаются открытыми для меня, — это как улучшить параметризацию априорных распределений для решения предупреждений о сходимости и какое распределение правдоподобия, кроме нормального, можно использовать для ненормально распределённой положительной переменной отклика.