Python Class, созданный для решения проблем, касающихся атрибуции цифрового маркетинга.
Во время просмотра онлайн у пользователя есть несколько точек соприкосновения, прежде чем преобразовать, что может привести к еще дольше и более сложным путешествиям.
Как должным образом конверсии кредитования и определить инвестиции в средства массовой информации?
Чтобы обдать это, мы применяем модели атрибуции .
Эвристические модели :
Последнее взаимодействие :
Атрибуция по умолчанию в Gogle Analytics и других медиа -платформах, таких как Google Ads и Facebook Business Manager;
Только последняя точка контакта зачисляется на конверсию.
Последний щелчок без прямы :
Весь прямой трафик игнорируется, и поэтому на 100% результата переходит к последнему каналу, через который клиент добрался до веб -сайта перед конвертацией.
Первое взаимодействие :
Результат полностью приписывается первой точке связи.
Линейный :
Каждая точка соприкосновения в равной степени зачислена.
Время распада :
Чем более недавняя точка концерта, тем больше она получает кредит.
На основе позиции :
В этой модели 40% результата связаны с последней точкой для контакта, еще 40% до первой, а оставшиеся 20% распределяются по каналам Midway.
Алготитмические модели
Значение Шапли
Используется в теории игры, это значение является оценкой вклада каждого отдельного игрока в кооперативную игру.
Конверсии приписываются каналам процессом пересечения путешествий. В каждой перестановке выдается канал, чтобы оценить, насколько он в целом.
В качестве примера , давайте посмотрим на следующее гипоритическое путешествие:
Органический поиск> Facebook> Direct> $ 19 (как выручка)
Чтобы получить значение Shapley каждого канала, нам сначала необходимо рассмотреть все значения конверсии для перестановки компонентов этого данного путешествия.
Органический поиск> 7 долларов
Facebook> $ 6
Direct> $ 4
Органический поиск> Facebook> $ 15
Органический поиск> прямой> $ 7
Facebook> Direct> $ 9
Органический поиск> Facebook> Direct> $ 19
Количество компонентов Joneys увеличивается в геометрической прогрессии, более отдельные каналы, которые у вас есть: скорость составляет 2^n (2 к мощности N) для N каналов .
Другими словами, с 3 различными точками точек есть 8 перестановки. Например, с более чем 15, этот процесс невозможным .
По умолчанию порядок топов не учитывается при расчете значения Шапли, только их присутствия или отсутствия. Для этого увеличивается количество перестановки.
Имея это в виду, обратите внимание, что при рассмотрении порядка взаимодействий довольно сложно использовать эту модель. Для n каналов не только есть 2^n перестановки данного канала I , но и каждая перестановка, содержащая I в другой позиции .
Некоторые проблемы и ограничения стоимости Шапли
Цепочки Маркова Цепочка Маркова - это конкретный стохастический процесс, в котором распределение вероятностей любого следующего состояния зависит только от того, что такое текущее состояние, игнорируя какие -либо предыдущие состояния и их последовательность.
В многоканальном атрионе мы можем использовать цепочки Маркова для расчета вероятности взаимодействия между парами медиа -каналов с матрицей перехода .
Что касается вклада каждого канала в конверсии, эффект удаления возникает: для каждого Джорни удаляется заданный канал и рассчитывается вероятность преобразования.
Таким образом, значение, приписываемое каналу, получается по отношению разницы между вероятностью конверсии в целом и вероятностью, когда указанный канал снова удаляется по общей вероятности.
Другими словами, чем больше эффект удаления канала, тем больше их вклад.
** При работе с марковскими процессами нет никаких ограничений из -за количества или порядка каналов. Их последовательность сама по себе является фундаментальной частью алгоритма.
>> pip install marketing_attribution_models
from marketing_attribution_models import MAM
При создании объекта MAM два шаблона кадра данных могут использоваться в качестве входного в зависимости от того, что является значением параметра Group_channels .
Для этой демострукции мы будем использовать кадр данных, в которой путешествия еще не сгруппированы , с каждой строкой в качестве другого сеанса и без уникального идентификатора путешествия.
ПРИМЕЧАНИЕ. Класс MAM имеет встроенный параметр для создания идентификатора путешествия, create_journey_id_based_on_conversion , который, если true , идентификатор создается на основе идентификатора пользователя, ввод в параметр Group_channels_id_list и столбец, указывающий, есть ли есть преобразование или нет, чья Имя определяется параметром Driphy_with_Conv_colname .
В этом сценарии будут заказаны все сеансы каждого отдельного пользователя, и для каждого преобразования создается новый идентификатор путешествия. Тем не менее, мы настоятельно рекомендуем , чтобы это создание идентификатора путешествия настроено на основе знаний, специфичных для бизнеса в руках и исследовательских выводов. Например, если в данном бизнесе отмечено, что средняя продолжительность путешествия составляет около недели, может быть определен новый Critereon, чтобы, как только у любого пользователя не было никакого взаимодействия в течение семи дней, путешествие ломается при предположении, что произошла потеря интересно.
Что касается параметров сейчас, вот как они настроены для нашего Group_ Channels = True Scenario:
attributions = MAM ( df ,
group_channels = True ,
channels_colname = 'channels' ,
journey_with_conv_colname = 'has_transaction' ,
group_channels_by_id_list = [ 'user_id' ],
group_timestamp_colname = 'visitStartTime' ,
create_journey_id_based_on_conversion = True )
Чтобы изучить и понять возможности MAM, был реализован «случайный генератор данных» с использованием параметра random_df при установке на TRUE .
attributions = MAM ( random_df = True )
После создания MAM объекта, мы можем проверить нашу базу данных сейчас с добавлением нашего Draining_ID и с сеансами, сгруппированными в путешествиях с использованием атриации ".DataFrame" .
attributions . DataFrame
journe_id | channels_agg | time_till_conv_agg | конвертированная_аг | Conversion_value | |
---|---|---|---|---|---|
0 | ID: 0_J: 0 | 0,0 | Истинный | 1 | |
1 | ID: 0_J: 1 | Google Search | 0,0 | Истинный | 1 |
2 | ID: 0_J: 10 | Google Search> Organic> Электронный маркетинг | 72,0> 24,0> 0,0 | Истинный | 1 |
3 | ID: 0_J: 11 | Органический | 0,0 | Истинный | 1 |
4 | ID: 0_J: 12 | Электронный маркетинг> Facebook | 432,0> 0,0 | Истинный | 1 |
... | ... | ... | ... | ... | ... |
20341 | ID: 9_J: 5 | Direct> Facebook | 120,0> 0,0 | Истинный | 1 |
20342 | ID: 9_J: 6 | Поиск Google> Google Search> Google Search | 48,0> 24,0> 0,0 | Истинный | 1 |
20343 | ID: 9_J: 7 | Organic> Organic> Google Search> Google Search | 480,0> 480,0> 288,0> 0,0 | Истинный | 1 |
20344 | ID: 9_J: 8 | Direct> Organic | 168,0> 0,0 | Истинный | 1 |
20345 | ID: 9_J: 9 | Поиск Google> Organic> Google Search> Emai ... | 528,0> 528,0> 408,0> 240,0> 0,0 | Истинный | 1 |
Этот атрибут обновляется для каждой сгенерированной модели атрибуции . Только в случае эвристических моделей добавляется новый столбец, содержащий значение атрибуции, указанное указанной моделью.
Примечание. Атрибут .dataFrame не мешает каким -либо модельным расчетам. Если это будет изменено путем использования, следующие результаты не затронуты.
attributions . attribution_last_click ()
attributions . DataFrame
journe_id | channels_agg | time_till_conv_agg | конвертированная_аг | Conversion_value | |
---|---|---|---|---|---|
0 | ID: 0_J: 0 | 0,0 | Истинный | 1 | |
1 | ID: 0_J: 1 | Google Search | 0,0 | Истинный | 1 |
2 | ID: 0_J: 10 | Google Search> Organic> Электронный маркетинг | 72,0> 24,0> 0,0 | Истинный | 1 |
3 | ID: 0_J: 11 | Органический | 0,0 | Истинный | 1 |
4 | ID: 0_J: 12 | Электронный маркетинг> Facebook | 432,0> 0,0 | Истинный | 1 |
... | ... | ... | ... | ... | ... |
20341 | ID: 9_J: 5 | Direct> Facebook | 120,0> 0,0 | Истинный | 1 |
20342 | ID: 9_J: 6 | Поиск Google> Google Search> Google Search | 48,0> 24,0> 0,0 | Истинный | 1 |
20343 | ID: 9_J: 7 | Organic> Organic> Google Search> Google Search | 480,0> 480,0> 288,0> 0,0 | Истинный | 1 |
20344 | ID: 9_J: 8 | Direct> Organic | 168,0> 0,0 | Истинный | 1 |
20345 | ID: 9_J: 9 | Поиск Google> Organic> Google Search> Emai ... | 528,0> 528,0> 408,0> 240,0> 0,0 | Истинный | 1 |
Обычно объем обработанных данных обширный, поэтому невозможно проанализировать результаты, приписываемые каждому путешествию с помощью транзакции. Однако с атрибутом Group_by_channels_models все результаты можно увидеть сгруппированы по каналу.
Примечание . Сгруппированные результаты не перезаписывают друг друга в случае, если одна и та же модель используется в двух отдельных случаях. Оба (или даже больше) из них показаны в " Group_by_channels_models ".
attributions . group_by_channels_models
каналы | attribution_last_click_heuristic |
---|---|
Прямой | 2133 |
Электронный маркетинг | 1033 |
3168 | |
Google Display | 1073 |
Google Search | 4255 |
1028 | |
Органический | 6322 |
YouTube | 1093 |
Как и в случае с атрибутом .dataframe , Group_by_channels_models также обновляется для каждой модели, используемой без ограничения не отображения алгоритмических результатов.
attributions . attribution_shapley ()
attributions . group_by_channels_models
каналы | attribution_last_click_heuristic | attribution_shapley_size4_conv_rate_algorithmic | |
---|---|---|---|
0 | Прямой | 109 | 74,926849 |
1 | Электронный маркетинг | 54 | 70.558428 |
2 | 160 | 160.628945 | |
3 | Google Display | 65 | 110.649352 |
4 | Google Search | 193 | 202.179519 |
5 | 64 | 72.982433 | |
6 | Органический | 315 | 265.768549 |
7 | YouTube | 58 | 60.305925 |
Все эвристические модели ведут себя одинаково при использовании атрибутов .dataframe и .group_by_channels_models , как объяснялось ранее, и вывод всех методов эвристической модели возвращает кортеж, содержащий две серии Pandas .
attribution_first_click = attributions . attribution_first_click ()
Первая серия кортежей - результаты в гранулярности путешествия , аналогично наблюдаемому в атрибуте .dataframe
attribution_first_click [ 0 ]
0 [1, 0, 0, 0, 0]
1 [1]
2 [1, 0, 0, 0, 0, 0, 0, 0, 0]
3 [1, 0]
4 [1]
...
20512 [1, 0]
20513 [1, 0, 0]
20514 [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
20515 [1, 0, 0]
20516 [1, 0, 0, 0]
Length: 20517, dtype: object
Второй содержит результаты с гранулярностью канала , как видно в атрибуте .group_by_channels_models .
attribution_first_click [ 1 ]
каналы | attribution_first_click_heuristic | |
---|---|---|
0 | Прямой | 2078 |
1 | Электронный маркетинг | 1095 |
2 | 3177 | |
3 | Google Display | 1066 |
4 | Google Search | 4259 |
5 | 1007 | |
6 | Органический | 6361 |
7 | YouTube | 1062 |
Из всех моделей, присутствующих в MAM Object, только последний щелчок, первый щелчок и линейный, не имеют настраиваемых параметров, кроме Group_by_Channels_models , который имеет логическое значение , которое при установке на False модель не возвращает атрибуцию, представленную каналами.
Создан для воспроизведения атривации по умолчанию Google Analytics ( последний щелчок без прямых ), в котором прямой трафик перезаписывается в случае, если предыдущие взаимодействия имеют конкретный источник трафика, отличный от самого непосредственного в заданном временном пространстве (6 месяцев по умолчанию).
В случае неопределенности, параметр but_not_this_channel установлен на «Direct» , но он может быть установлен на любой другой интерес для бизнеса.
attributions . attribution_last_click_non ( but_not_this_channel = 'Direct' )[ 1 ]
каналы | attribution_last_click_non_direct_heuristic | |
---|---|---|
0 | Прямой | 11 |
1 | Электронный маркетинг | 60 |
2 | 172 | |
3 | Google Display | 69 |
4 | Google Search | 224 |
5 | 67 | |
6 | Органический | 350 |
7 | YouTube | 65 |
Эта модель имеет параметр list_positions_first_middle_last , в котором веса, соответствующие позициям каналов в каждом путешествии, могут мне указать в соответствии с решениями, связанными с бизнесом . Распределение параметра по умолчанию составляет 40% для введенного канала, 40% для преобразования / последнего канала и 20% для промежуточных .
attributions . attribution_position_based ( list_positions_first_middle_last = [ 0.3 , 0.3 , 0.4 ])[ 1 ]
каналы | attribution_position_based_0.3_0.3_0.4_heurist | |
---|---|---|
0 | Прямой | 95.685085 |
1 | Электронный маркетинг | 57.617191 |
2 | 145,817501 | |
3 | Google Display | 56.340693 |
4 | Google Search | 193.282305 |
5 | 54,678557 | |
6 | Органический | 288.148896 |
7 | YouTube | 55,629772 |
Существует две настраиваемые настройки: скорость распада , преодолевая параметр decay_over_time * и время (в часы) между каждым децимром через частотный параметр.
Стоит отметить, однако, что в случае, если между этими каналами существует более одной точки соприкосновения, значение преобразования будет одинаково распределено между этими каналами.
В качестве примера:
attributions . attribution_time_decay (
decay_over_time = 0.6 ,
frequency = 7 )[ 1 ]
каналы | attribution_time_decay0.6_freq7_heuristic | |
---|---|---|
0 | Прямой | 108.679538 |
1 | Электронный маркетинг | 54,425914 |
2 | 159,592216 | |
3 | Google Display | 64,350107 |
4 | Google Search | 192.838884 |
5 | 64.611414 | |
6 | Органический | 314.920082 |
7 | YouTube | 58.581845 |
Uppon называется, эта модель возвращает кортеж с четырьмя компонентами. Первые два (индексированные 0 и 1) похожи на эвристические модели, с представлением .dataframe и .group_by_channels_models соответственно. Что касается третьего и четвертого компонентов (индексированные 2 и 3), результатами являются матрица перехода и таблица эффектов удаления .
Для начала можно указать, рассматриваются ли одинаковые переходы или нет ( например, прямой к прямому).
attribution_markov = attributions . attribution_markov ( transition_to_same_state = False )
каналы | attribution_markov_algorithmic | |
---|---|---|
0 | Прямой | 2305.324362 |
1 | Электронный маркетинг | 1237.400774 |
2 | 3273.918832 | |
3 | YouTube | 1231.183938 |
4 | Google Search | 4035.260685 |
5 | 1205.949095 | |
6 | Органический | 5358.270644 |
7 | Google Display | 1213.691671 |
Эта конфигурация не влияет на общие приписываемые результаты для каждого канала, а значения, наблюдаемые в матрице перехода . Поскольку мы устанавливаем Transition_TO_SAME_STATE FALSE , диагональ, указывающие, что состояния, переходящие к себе, является нулевым.
ax , fig = plt . subplots ( figsize = ( 15 , 10 ))
sns . heatmap ( attribution_markov [ 2 ]. round ( 3 ), cmap = "YlGnBu" , annot = True , linewidths = .5 )
Эффект удаления , четвертый выход attribution_markov , получается по отношению разницы между вероятностью преобразования в целом и вероятностью, когда указанный канал снова удаляется по общей вероятности.
ax , fig = plt . subplots ( figsize = ( 2 , 5 ))
sns . heatmap ( attribution_markov [ 3 ]. round ( 3 ), cmap = "YlGnBu" , annot = True , linewidths = .5 )
Наконец, вторая алгоритная модель мамы , чья концепция исходит из теории игр . Цель здесь состоит в том, чтобы распространить вклад каждого игрока (в нашем случае канал) в игру в сотрудничестве, рассчитанную с использованием комбинаций поездок с данным каналом и без него.
Размер параметра определяет предел того, как долго цепочка каналов находится в каждом путешествии. По умолчанию его значение установлено в 4 , то есть рассматривается только четыре последних канала, предшествующие конверсии .
Метод расчета предельных вкладов каждого канала может варьироваться в зависимости от параметра порядка . По умолчанию он установлен на false , что означает, что вклад рассчитывается, игнорируя порядок каждого канала в путешествиях.
attributions . attribution_shapley ( size = 4 , order = True , values_col = 'conv_rate' )[ 0 ]
Комбинации | конверсии | total_sesecences | Conversion_value | conv_rate | attribution_shapley_size4_conv_rate_order_algorithmic | |
---|---|---|---|---|---|---|
0 | Прямой | 909 | 926 | 909 | 0,981641 | [909.0] |
1 | Direct> по электронной почте маркетинг | 27 | 28 | 27 | 0,964286 | [13.948270234099155, 13.051729765900845] |
2 | Direct> Email Marketing> Facebook | 5 | 5 | 5 | 1.000000 | [1.6636366232390172, 1,5835883671498818, 1,752 ... |
3 | Direct> Электронный маркетинг> Facebook> Google D ... | 1 | 1 | 1 | 1.000000 | [0,2563402919193473, 0,2345560799963515, 0,259 ... |
4 | Direct> по электронной почте маркетинг> Facebook> Google S ... | 1 | 1 | 1 | 1.000000 | [0,2522517802130265, 0,2401286956930936, 0,255 ... |
... | ... | ... | ... | ... | ... | ... |
1278 | YouTube> Organic> Google Search> Google dis ... | 1 | 2 | 1 | 0,500000 | [0,2514214624662836, 0,24872101523605275, 0,24 ... |
1279 | YouTube> Organic> Google Search> Instagram | 1 | 1 | 1 | 1.000000 | [0,2544401477637237, 0,2541071889956603, 0,253 ... |
1280 | YouTube> Organic> Instagram | 4 | 4 | 4 | 1.000000 | [1.2757196742326997, 1,4712839059493295, 1.252 ... |
1281 | YouTube> Organic> Instagram> Facebook | 1 | 1 | 1 | 1.000000 | [0,2357631944623868, 0,2610913781266248, 0,247 ... |
1282 | YouTube> Organic> Instagram> Google Search | 3 | 3 | 3 | 1.000000 | [0,7223482210689489, 0,7769049003203142, 0,726 ... |
Наконец, параметр, указывающий, какой показатель используется для вычисления значения Шапли, является value_col , который по умолчанию устанавливается на коэффициент конверсии . При этом путешествия без преобразований принимаются в аккунт.
Однако возможно рассмотреть только буквальные преобразования при использовании модели, как показано ниже.
attributions . attribution_shapley ( size = 3 , order = False , values_col = 'conversions' )[ 0 ]
Комбинации | конверсии | total_sesecences | Conversion_value | conv_rate | attribution_shapley_size3_conversions_algorithmic | |
---|---|---|---|---|---|---|
0 | Прямой | 11 | 18 | 18 | 0,611111 | [11.0] |
1 | Direct> по электронной почте маркетинг | 4 | 5 | 5 | 0,800000 | [2.0, 2.0] |
2 | Direct> Электронный маркетинг> Поиск Google | 1 | 2 | 2 | 0,500000 | [-3.1666666666666665, -7.666666666666666, 11,8 ... |
3 | Прямой> почтовый маркетинг> Органический | 4 | 6 | 6 | 0,666667 | [-7.833333333333333, -10,833333333333332, 22,6 ... |
4 | Direct> Facebook | 3 | 4 | 4 | 0,750000 | [-8,5, 11,5] |
... | ... | ... | ... | ... | ... | ... |
75 | Instagram> Organic> YouTube | 46 | 123 | 123 | 0,373984 | [5.833333333333332, 34.33333333333333, 5.83333 ... |
76 | Instagram> YouTube | 2 | 4 | 4 | 0,500000 | [2,0, 0,0] |
77 | Органический | 64 | 92 | 92 | 0,695652 | [64.0] |
78 | Органический> YouTube | 8 | 11 | 11 | 0,727273 | [30,5, -22,5] |
79 | YouTube | 11 | 15 | 15 | 0,733333 | [11.0] |
После получения каждой атрибуции из разных моделей, хранящихся в нашем объекте .group_by_channels_models. Можно построить и сравнить результаты для понимания
attributions . plot ()
Если вы заинтересованы только в алгоритмических моделях, это может указать в параметре Model_type .
attributions . plot ( model_type = 'algorithmic' )