Руководитель смотрит отчёт и решает отключить контекстную рекламу. По данным системы, на неё приходится меньше десяти процентов продаж, тогда как на почтовые рассылки почти половина. Через месяц выручка падает на четверть, а рассылки вдруг перестают работать. Причина проста: контекст стоял первым шагом почти в каждой цепочке, но в отчётности его вклад не отражался вовсе.

Последний клик искажает картину и приводит к неверным решениям

Традиционный способ приписать продажу одному источнику называется одноточечным. Вся заслуга достаётся либо первому касанию, либо последнему, либо последнему показу объявления. Простейший вариант с последним кликом встречается чаще всего, потому что он легче реализуется.

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

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

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

Модели распределения делят заслугу между касаниями

Многокасательные модели решают задачу иначе. Они рассматривают всю последовательность взаимодействий и распределяют между ними вес.

Линейная модель делит заслугу поровну между всеми шагами. Она проста и не требует настройки, но уравнивает случайный просмотр и осмысленное действие.

Модель с затуханием во времени даёт больше веса последним касаниям. Она исходит из предположения, что недавнее взаимодействие сильнее влияет на решение. Для коротких циклов покупки это разумно, для долгих сделок сомнительно.

Модель на основе положения выделяет первый и последний шаг. Первый отвечает за знакомство, последний за закрытие сделки. Остальные получают меньшую долю. Такая схема популярна в продажах со сложным циклом.

Модель с пользовательскими весами задаётся вручную. Компания сама решает, сколько отдать знакомству, а сколько закрытию. Гибкость оборачивается субъективностью: веса часто выставляются по интуиции, а не по данным.

def linear(touchpoints):
    if not touchpoints:
        return {}
    share = 1 / len(touchpoints)
    return {point: share for point in touchpoints}


def time_decay(touchpoints, half_life_days=7):
    import math
    weights = {}
    last = max(point["days_ago"] for point in touchpoints)
    total = 0
    for point in touchpoints:
        delta = last - point["days_ago"]
        weight = math.pow(0.5, delta / half_life_days)
        weights[point["channel"]] = weights.get(point["channel"], 0) + weight
        total += weight
    return {channel: value / total for channel, value in weights.items()}


path = [
    {"channel": "контекст", "days_ago": 21},
    {"channel": "поиск", "days_ago": 9},
    {"channel": "рассылка", "days_ago": 0},
]
print(linear([point["channel"] for point in path]))
print(time_decay(path))

На этом коротком пути видно разницу. Линейная модель раздаст по трети каждому каналу. Модель с затуханием отдаст почти всё рассылке, потому что она была последней и наиболее свежей. Ни одна из картин не является истиной, обе всего лишь разные упрощения.

Алгоритмические модели считают вероятность, а не назначают веса

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

Логика строится на сравнении путей. Система собирает все цепочки взаимодействий, которые закончились покупкой, и все, которые ею не закончились. Затем для каждого канала оценивается, как часто он встречается в успешных путях по сравнению с неуспешными.

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

Преимущество подхода в том, что он опирается на данные и не требует ручных допущений. Недостаток в требованиях к объёму: для устойчивых оценок нужны тысячи путей, и в малом бизнесе данных просто не хватает.

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

Данные собираются на стороне клиента и требуют дисциплины

Работа любой модели начинается с фиксации касаний. Без полных и корректных данных расчёт превращается в фантазию.

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

Второе это метки источника. Они передаются в адресе при переходе и содержат название канала, кампании, объявления и ключевого слова. Их нужно сохранять при первом визите, а не перезаписывать при каждом переходе, иначе история потеряется.

function captureSource() {
  const params = new URLSearchParams(location.search);
  const source = params.get("utm_source");
  if (!source) {
    return null;
  }

  const saved = localStorage.getItem("first_source");
  if (!saved) {
    localStorage.setItem("first_source", source);
  }

  const touch = {
    channel: source,
    campaign: params.get("utm_campaign") || "без кампании",
    keyword: params.get("utm_term") || null,
    at: Date.now(),
  };

  const history = JSON.parse(localStorage.getItem("touches") || "[]");
  history.push(touch);
  localStorage.setItem("touches", JSON.stringify(history.slice(-50)));

  return touch;
}

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

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

Четвёртое это согласие. Сбор данных о поведении требует уведомления пользователя, и в ряде стран согласие спрашивается явно. Приложение, которое игнорирует это требование, рискует штрафами и потерей доверия.

Ограничения измерений создают расхождения между системами

Даже при аккуратном сборе данных цифры не сходятся между собой, и это нормально.

Первая причина это разные определения конверсии. Система рекламной площадки считает покупку по своему идентификатору, внутренняя аналитика по своему. Совпадение бывает лишь частичным.

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

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

Четвёртая причина это офлайн-покупки. Заказ по телефону или в магазине почти никогда не связывается с цифровым путём. Для товаров с длинным циклом это заметно искажает картину.

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

Система атрибуции строится на данных, а не на отчёте

Модель нужна не сама по себе, а как инструмент распределения бюджета. Поэтому её стоит встраивать в рабочий процесс.

Первый шаг это сверка. Данные площадок сопоставляются с внутренней аналитикой, и расхождения объясняются. Если разница в разы, значит, где-то потеряны метки или сломана передача событий.

Второй шаг это выбор модели. Для короткого цикла с одним-двумя касаниями достаточно линейной. Для длинного цикла с десятком шагов нужна модель на основе положения или алгоритмическая.

Третий шаг это сегментация. Одна модель для всех типов клиентов почти всегда даёт посредственный результат. Новые покупатели и постоянные ходят разными путями, и считать их вместе бессмысленно.

Четвёртый шаг это проверка экспериментом. Самая надёжная проверка строится на включении и отключении канала для случайно выбранной группы. Только она показывает реальный прирост, а не расчётный.

Пятый шаг это регулярный пересмотр. Поведение аудитории меняется, и модель, работавшая год назад, теряет точность. Пересматривать стоит раз в квартал или при смене рекламной стратегии.

Ошибки внедрения обходятся дороже, чем отсутствие модели

Разберём типичные провалы.

Первая ошибка это перезапись источника при каждом переходе. Человек случайно нажал рекламу спустя месяц после покупки, и вся история потерялась. Сохранение первого касания отдельно от последнего решает проблему.

Вторая ошибка это учёт только кликов. Показ без клика тоже влияет на решение, а в модели он не отражается. Частично это компенсируется оговорками, но полной картины не даёт.

Третья ошибка это отсутствие обратной связи. Модель посчитана, отчёт положен на полку, решения принимаются по привычке. В таком случае вся работа проделана впустую.

Четвёртая ошибка это слепая вера в цифру. Алгоритмическая модель выглядит объективной, но она обучена на прошлых данных и воспроизводит прошлые решения. Радикально новый канал она недооценит, пока тот не наберёт объём.

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

Разбор числового примера показывает, как меняется распределение бюджета

Полезно посчитать один путь целиком и увидеть, к каким суммам приводит смена модели.

Пусть за месяц на ресурс пришли пять тысяч цепочек, закончившихся покупкой. Средний чек составляет три тысячи рублей, значит, выручка равна пятнадцати миллионам. Рекламный бюджет распределён так: контекст восемьсот тысяч, показы шестьсот тысяч, рассылки четыреста тысяч, статьи и обзоры двести тысяч. Итого два миллиона.

Сначала посчитаем по модели последнего клика. Допустим, покупки распределились так: рассылки закрыли две тысячи цепочек, контекст полторы тысячи, показы тысячу, статьи пятьсот.

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

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

Теперь пересчитаем по линейной модели. Пусть средняя длина пути равна четырём касаниям, и в восьмидесяти процентах цепочек контекст стоит первым шагом. Тогда на контекст придётся около четверти всех заслуг, то есть примерно три с четвертью тысячи успешных цепочек. Его расчётная выручка вырастает до девяти с лишним миллионов, а отдача превышает одиннадцать рублей на рубль.

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

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

Практический порядок внедрения снижает риск провала

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

Первый шаг это ревизия меток. Проверяется, что все каналы передают корректные параметры, а внутренние переходы не затирают внешние. Часто уже на этом этапе обнаруживаются потерянные источники.

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

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

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

Пятый шаг это контрольный эксперимент. Отключение канала для части аудитории даёт цифру, которой можно верить больше, чем любой модели.

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

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

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