Атрибуция в маркетинге — модели для аналитика

Коротко

Атрибуция — распределение ценности конверсии между маркетинговыми каналами, которые участвовали в привлечении пользователя. Пользователь увидел рекламу в 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 для аккаунтов с достаточным объёмом конверсий.

Сравнение моделей

Модель Instagram Яндекс.Директ Прямой
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). Линейная распределит затраты честнее.

Как тренироваться

Атрибуция — ключевая тема маркетинговой аналитики. Задачи на продуктовые метрики — в тренажёре Карьерник. Больше вопросов — в разделе с примерами.