Атрибуция в маркетинге — модели для аналитика
Коротко
Атрибуция — распределение ценности конверсии между маркетинговыми каналами, которые участвовали в привлечении пользователя. Пользователь увидел рекламу в Instagram, кликнул контекст в Яндексе, потом пришёл напрямую и купил. Какому каналу приписать покупку? Модели атрибуции отвечают на этот вопрос по-разному. Аналитику атрибуция нужна для оценки ROI каналов, оптимизации бюджета и декомпозиции метрик. На собеседованиях — частая тема в продуктовой и маркетинговой аналитике.
Проблема
Путь пользователя до покупки:
Instagram-реклама → Яндекс.Директ → Прямой заход → Покупка (5000₽)
Кому приписать 5000₽?Каждая модель атрибуции даёт свой ответ. Нет «правильной» модели — выбор зависит от бизнес-задачи.
Модели атрибуции
Last Click (последнее касание)
Вся ценность — последнему каналу перед конверсией.
Instagram → Яндекс.Директ → Прямой заход → Покупка
↑
5000₽ (100%)Плюсы: простая, понятная. Минусы: игнорирует все каналы, кроме последнего. Переоценивает прямой трафик и брендовые запросы, недооценивает верхнюю воронку.
Это дефолтная модель в Google Analytics (Universal). Самая распространённая, но самая спорная.
First Click (первое касание)
Вся ценность — каналу первого контакта.
Instagram → Яндекс.Директ → Прямой заход → Покупка
↑
5000₽ (100%)Плюсы: оценивает каналы привлечения (awareness). Минусы: игнорирует каналы, которые «дожали» до покупки.
Линейная (Linear)
Ценность делится поровну между всеми касаниями.
Instagram → Яндекс.Директ → Прямой заход → Покупка
1667₽ 1667₽ 1666₽
(33.3%) (33.3%) (33.3%)Плюсы: учитывает все каналы. Минусы: не различает вклад — первое касание и последнее «стоят» одинаково.
U-shape (Position-based)
40% первому, 40% последнему, 20% остальным поровну.
Instagram → Яндекс.Директ → Прямой заход → Покупка
2000₽ 1000₽ 2000₽
(40%) (20%) (40%)Плюсы: выделяет начало и конец пути — привлечение и конверсию. Минусы: правило 40/20/40 — произвольное.
Time Decay (угасание во времени)
Чем ближе касание к конверсии, тем больше ценности.
Instagram (7 дней назад) → Яндекс (3 дня) → Прямой (сегодня) → Покупка
500₽ 1500₽ 3000₽
(10%) (30%) (60%)Плюсы: учитывает свежесть взаимодействия. Минусы: недооценивает каналы верхней воронки.
Data-Driven (на основе данных)
ML-модель (Shapley values, Markov chains) определяет реальный вклад каждого канала на основе данных.
Плюсы: самая точная, учитывает реальные паттерны. Минусы: требует большого объёма данных и технической экспертизы. Доступна в Google Analytics 4 для аккаунтов с достаточным объёмом конверсий.
Сравнение моделей
| Модель | Яндекс.Директ | Прямой | |
|---|---|---|---|
| Last Click | 0% | 0% | 100% |
| First Click | 100% | 0% | 0% |
| Линейная | 33% | 33% | 33% |
| U-shape | 40% | 20% | 40% |
| Time Decay | 10% | 30% | 60% |
Одни и те же данные — кардинально разные выводы о «лучшем» канале.
Расчёт в Python
import pandas as pd
# Данные о касаниях пользователей
touches = pd.DataFrame({
'user_id': [1, 1, 1, 2, 2, 3],
'channel': ['instagram', 'yandex', 'direct', 'google', 'direct', 'instagram'],
'touch_order': [1, 2, 3, 1, 2, 1],
'is_last': [False, False, True, False, True, True],
'is_first': [True, False, False, True, False, True],
'conversion_value': [5000, 5000, 5000, 3000, 3000, 2000]
})
# Last Click
last_click = (
touches[touches['is_last']]
.groupby('channel')['conversion_value']
.sum()
)
print('Last Click:\n', last_click)
# First Click
first_click = (
touches[touches['is_first']]
.groupby('channel')['conversion_value']
.sum()
)
print('First Click:\n', first_click)
# Линейная
touches['linear_value'] = (
touches['conversion_value']
/ touches.groupby('user_id')['user_id'].transform('count')
)
linear = touches.groupby('channel')['linear_value'].sum()
print('Linear:\n', linear)Расчёт в SQL
-- Last Click атрибуция
WITH last_touch AS (
SELECT
user_id,
channel,
conversion_value,
ROW_NUMBER() OVER (
PARTITION BY user_id ORDER BY touch_time DESC
) AS rn
FROM user_touches
WHERE user_id IN (SELECT user_id FROM conversions)
)
SELECT
channel,
SUM(conversion_value) AS attributed_revenue,
COUNT(*) AS conversions
FROM last_touch
WHERE rn = 1
GROUP BY channel
ORDER BY attributed_revenue DESC;
-- Линейная атрибуция
WITH touch_counts AS (
SELECT
user_id,
channel,
conversion_value,
COUNT(*) OVER (PARTITION BY user_id) AS total_touches
FROM user_touches
WHERE user_id IN (SELECT user_id FROM conversions)
)
SELECT
channel,
SUM(conversion_value::NUMERIC / total_touches) AS attributed_revenue
FROM touch_counts
GROUP BY channel
ORDER BY attributed_revenue DESC;Как выбрать модель
| Цель | Модель |
|---|---|
| Оценить каналы привлечения | First Click |
| Оценить каналы конверсии | Last Click |
| Справедливо распределить бюджет | Линейная или U-shape |
| Максимальная точность | Data-Driven |
| Быстрый анализ | Last Click или First Click |
Рекомендация: сравнивайте несколько моделей. Если канал лидирует во всех — он точно эффективен. Если только в одной — зависит от выбора модели.
Типичные ошибки
Только Last Click. 60-70% конверсий атрибуция Last Click приписывает прямому трафику и брендовым запросам. Это скрывает вклад рекламы, контента, email.
Не учитывают окно атрибуции. Касание 90 дней назад — это ещё релевантно? Обычно окно 7–30 дней. Для B2B — до 90 дней.
Кросс-девайс. Пользователь кликнул рекламу на телефоне, купил на компьютере — два разных «пользователя» в аналитике. Нужна сшивка по user_id.
Вопросы с собеседований
-- Какие модели атрибуции вы знаете? -- Last Click, First Click, Linear, U-shape (position-based), Time Decay, Data-Driven. Различаются распределением ценности конверсии между каналами.
-- Почему Last Click — плохая модель? -- Переоценивает прямой трафик и бренд. Недооценивает каналы верхней воронки (дисплей, видео, PR). Не учитывает путь пользователя до покупки.
-- Как бы вы выбрали модель атрибуции? -- Зависит от цели. Для оценки awareness — First Click. Для бюджета — линейная или U-shape. Для точности — data-driven. Рекомендую сравнить несколько моделей и смотреть, где результаты сходятся.
Потренируйтесь решать задачи — откройте тренажёр с 1500+ вопросами для подготовки к собеседованиям аналитиков.
FAQ
Атрибуция в Google Analytics 4?
GA4 по умолчанию использует Data-Driven модель (на основе Shapley values). Также доступны Last Click, First Click, Linear, Position-based, Time Decay в настройках.
Как атрибуция связана с CAC?
CAC (стоимость привлечения) зависит от модели атрибуции. Last Click покажет CAC = 0 для Instagram (если покупка была через direct). Линейная распределит затраты честнее.
Как тренироваться
Атрибуция — ключевая тема маркетинговой аналитики. Задачи на продуктовые метрики — в тренажёре Карьерник. Больше вопросов — в разделе с примерами.