Игры в модели атрибуции рекламных каналов (Last click, Markov chain, Shapley value)

Обычно, я не играю в игры с моделями атрибуций рекламных каналов.

В работе с сессиями я почти всегда пользуюсь данными из Google Analytics (GA). Это система хороша тем, что мне не нужно заботиться о том, где хранить данные о заходах на сайт, как определять продолжительность сессии и т.д. Все эти вопросы закрывает Google Analytics.

При заходе пользователя на сайт GA соотносит (атрибутирует) этого пользователя к одному из известных источников трафика.
  • Если GA может определить источник трафика, то она атрибутирует пользователя к этому источнику трафика.  
  • Если GA не может определить источник трафика (зашел на сайт direct, в URL нет utm-меток и еще в ряде случаев), то она возьмет последний недавний источник трафика (не direct) из которого пришел пользователь.
Эта модель атрибуции называется Last Non-Direct Click (LNDC). Она используется во всех отчетах GA кроме отчетов из секций Multi-Channel Funnel и Attribution.

Двумя побочными эффектами LNDC модели атрибуции являются:
  1. повышение долгосрочного эффекта запущенных когда-то маркетинговых компаний (окно поиска последнего недавнего источника по умолчанию = 6 месяцев);
  2. уменьшение эффекта direct заходов на сайт (последние direct заходы сознательно не засчитываются).
В зависимости от специфики вашего проекта это может играть вам на руку или наоборот - играть против вас. 

Сегодня я хочу посмотреть на две альтернативные модели атрибуции:
  • Цепи Маркова (Markov chain)
  • Вектор Шепли (Shapley value)
О цепях Маркова для атрибуции рекламных каналов писал мой друг Сергей Брыль. 

О векторе Шепли я узнал из справки Google Analytics 360. Раньше, по-моему, Google не раскрывал детали своей Data Driven модели атрибуции. Теперь мы знаем, что она построена на основе вектора Шепли.

Интересно отметить, что для того, чтобы GA 360 начал рассчитывать Data Driven модель необходимо, чтобы в течение 28-дневного цикла:
  • набралось не менее 400 конверсий с цепочками 2+ путей,
  • набралось не менее 10,000 путей (~10,000 пользователей).
Чтобы понять как работать с моделями атрибуции, лучше всего конечно сделать расчеты атрибуции на данных и затем посмотреть, что получилось.

Недавно я нашел статью описывающую обе реализации. Я решил рассчитать 3 модели атрибуции last_click (базовая атрибуция), markov_chain, shapley_value и по-возможности сравнить их между собой.

(1) Мне понадобятся данные из GA или очень похожие на данные из GA.

Я написал генератор синтетических данных, который выдает данные посещений из источников с такими характеристиками:
  1. chan_probs - вероятность появления посетителя из источника; 
  2. conv_probs - вероятность совершения конверсии в источнике.
Traffic sources assumptions.

Учитывая, что GA 360 имеет требования на минимальные количество данных, я решил учесть это и сгенерировал 20,000 посетителей пришедших из разных источников трафика, которые сжались до ~13k пользователей с разнообразными цепочками.

(2) Нужно построить markov_chain модель атрибуции.

Я не люблю быть первопроходцем, а потому всегда вначале ищу готовое решение. И такое решение есть. Это R-пакет ChannelAttribution.

Хочу отметить, что используя пакет ChannelAttribution_v1.13 я столкнулся с тем, что он рассчитывает атрибуцию по количеству конверсий, но не рассчитывает атрибуцию по деньгам (она получалась нулевой). Перебрав более старые версии пакета, я нашел ту, которая делает оба расчета. Однако, сравнив атрибуции по количеству конверсий старой и новой версий пакета, я увидел, что они разные. Я решил остановиться на последней версии пакета, рассчитал 1-ю модель атрибуции по количеству транзакций и двинулся дальше.

Важно отметить, что пакет ChannelAttribution также содержит некоторые эвристические модели:
  • first click
  • last_click,
  • linear 
last_click модель мне как раз и нужна как база для сравнения с другими вариантами атрибуции. Поэтому я рассчитал 2-ю модель атрибуции и двинулся дальше.

(3) Теперь нужно было построить shapley_value модель атрибуции.

Перечитав внимательно статью (которая кстати использует R-пакет GameTheoryAllocation) и трансформировав данные под нужный формат я рассчитал 3-ю модель атрибуции.

Интересно отметить, что автор кода, при расчете вектора Шепли, использует не количество конверсий, а % конверсии. Рассчитав вариант на базе количества конверсий я не смог его проинтерпретировать (весь вес на себя забрал самый емкий источник google_cpc). Поэтому, по примеру автора, я взял % конверсии и все расчеты атрибутирования выстроил на нем, а затем уже перемножил этот вектор % конверсий на общее количество посещений и т.о. перераспределил веса источников трафика.

Когда все три модели были под рукой, я объединил их в одну таблицу и начал анализировать.

3 attribution models: Last click, Markov chain, Shapley value.

Первое, что хотелось бы сказать, так это то, что источники трафика отсортированы по уменьшению количества конверсий по базовой модели атрибуции last_click.

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

Что можно сказать о модели атрибуции на основе цепи Маркова?

Absolute difference to base (last_click) model.

Мы видим, что источники трафика direct, affiliate, referral сильно добавили в количестве конверсий. Т.к. самый емкий источник по last_click конверсиям является google_cpc (215/569 = 38%), то давайте отфильтруем все цепочки, где участвует этот источник и посмотрим какие это были цепочки. 

Из таблицы ниже видно, что модель атрибуции Маркова взяла часть совместных конверсий google_cpc и заатрибутировала их на другие каналы (чего мы от нее, собственно, и ожидали). 

Intersection google_cpc and affiliate, referral.

Так, google_cpc + affiliate: 35 совместных конверсий. Часть из них модель атрибуции Маркова отдала affiliate и потому affiliate (last_click) с 26 конверсий вырос до 48 конверсий affiliate (markov_chain).
Атрибуция 26 + 35 > 48 и это значит, что модель атрибуции Маркова атрибутировала часть этих конверсий в другие цепочки.

Или google_cpc + referral: 20 совместных конверсий. Часть из них модель атрибуции Маркова отдала referral и потому referral (last_click) с 11 конверсий вырос до 39 конверсий referral (markov_chain) 
Атрибуция 11 + 20 < 39 и это значит, что модель атрибуции Маркова атрибутировала также часть конверсий из других цепочек.

Обратите внимание, что хотя источник direct также прирос, но у нас нет пересечений источников direct и google_cpc. Это значит, что рост веса источника direct был сформирован другими цепочками. 

Также интересно посмотреть на так называемый Removal Effect, который рассчитывает модель атрибуции Маркова. Если коротко, то это сколько можно потерять конверсий, если просто отключить соответствующий источник трафика.

Markov Chain: Removal Effect.

Мы видим, что google_cpc в этом кейсе является образующим источником трафика. Что вобщем-то для нас уже не новость, т.к. только по last_click он дает нам самый большой процент конверсий (38%).

Однако, важный момент здесь в том, что google_cpc, участвуя в большом количестве цепочек с разными источниками, формирует уже не 38%, а 56%(!) всех конверсий. Поэтому, если мы вдруг решим его отключить, то объем транзакций дополнительно просядет на 18%.

Платные источники трафика с сильным эффектом взаимодействия здесь google_cpc, affiliate.

Раз эти источники трафика с сильным эффектом взаимодействия, то интересно было бы посмотреть какие они формирует так называемые Transition Probabilities. Если коротко, то это вероятность совершения конверсии при прохождении цепочки от источника channel_from в источник channel_to.

Начнем с источника google_cpc. Ниже таблица с его вероятностями перехода:

google_cpc: Transition Probabilities.

Что мы видим?

(1) google_cpc достаточно конверсионный канал, вероятность перехода в конверсию у него 67%.

(2) Немногим ранее я писал, что модель атрибуции Маркова взяла часть совместных конверсий google_cpc + affiliate и отдала их affiliate.

Однако, как мы видим из таблицы вероятностных переходов, прямых переходов из google_cpc (channel_from) в affiliate (channel_to) - нет. Это означает, что у нас формировались реверсные цепочки. Мы проверим это через минуту.

Теперь давайте рассмотрим источник affiliate. Вот его таблица таблица с вероятностями перехода:

affiliate: Transition Probabilities.

Что мы видим здесь?

(1) affiliate намного менее эффективный конверсионный канал, в сравнении с google_cpc (0.21 vs 0.67).

(2) Минутой раньше мы не нашли прямых цепочек: google_cpc --> affiliate.

Поэтому мы предположили, что цепочки должны быть реверсные. Таблица affiliate это подтверждает: реверсная цепочка affiliate --> google_cpc есть и ее вероятностный переход = 0.43.


Итак, подведем короткий итог использования цепей Маркова для атрибуции:
  1. Цепи Маркова учитывают реальные цепочки перемещений пользователя по каналам.
  2. Цепи Маркова учитывают направление движения.
  3. Цепи Маркова не полностью объясняют разницу в конверсии цепочек, т.к. некоторые каналы по своей природе имеют изначально более высокие конверсии.

Теперь пришло время обратиться к модели атрибуции на основе вектора Шепли.

Delta difference to base (last_click) model.

Мы видим, что модель атрибуции Шепли также перевзвесила наши источника трафика, но сделала это несколько иначе.

(1) Как и в модели атрибуции Маркова, модель атрибуции Шепли существенно увеличила вес каналов affiliate, referral

По модели last_click источники affiliate, referral имели по 26 и 11 конверсий соответственно. Модель атрибуции Шепли увеличила вес прямых конверсий (32 и 13 конверсий соответственно), а также сделала им атрибуцию в ряде совместных цепочек с другими источниками.

Shapley conversions re-weighting.

(2) Модель атрибуции Шепли, может усиливать вес мощного канал, как в случае с google_cpc, добавив 20% к его весу по модели last_click, чего я пока не наблюдал в модели атрибуции Маркова. 

Теперь давайте подведем короткий итог использования вектора Шепли для атрибуции:
  1. Модель Шепли не учитывает порядок цепочки как таковой. Она просто перераспределяет вес источников исходя из того, какой маржинальный эффект каждый из источников привнес в каждой коалиции.
  2. Модель Шепли делает пересчет всех возможных комбинаций так называемых коалиций, что выливается в сложность расчетов = 2^N, где N это количество источников трафика. Поэтому для бизнесов, где количество источников трафика больше 20+, объем вычислений моментально возрастает до отметки 1М+ пересчетов.

И напоследок позволю себе прорезюмировать 2 вопроса про модели атрибуции:
  • Модель атрибуции дает 100% статистику в какой источник трафика инвестировать больше?
    • не обязательно, т.к. вы можете проинвестировать больше денег в недооцененный источник Х, но если он окажется насыщен, то маржинального эффекта вы не получите.
  • Рассчитанная модель атрибуции позволяет делать долгосрочное планирование?
    • нет, потому как эффективность источника (стоимость контакта и конверсия) зависят от факторов изменение которых модель не прогнозирует, а значит, чтобы модель отражала действительность ее нужно регулярно пересчитывать (кстати GA 360 делает это 1 раз в неделю).
P.S.
  • Я написал новый пост, где проверил как вышеописанные модели атрибуции чувствительны к изменению порядка каналов в цепочке.
  • Также я написал еще один пост, где проверил какая вариативность модели атрибуции вектор Шепли.

Comments

Popular posts from this blog

IV/WOE - хороший способ понять какой информацией вы обладаете

A/B-тестирование: смотреть на конверсию vs смотреть на продажи

Продуктовая аналитика: влияние продуктовых фич на ретеншн