Как атрибутировать пользователей из разных источников?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Атрибуция пользователей из разных источников
Атрибуция — это процесс определения источника, через который пользователь пришёл в приложение или сервис. Это критически важная задача для любого аналитика, поскольку позволяет оценить эффективность каналов привлечения трафика, ROI маркетинговых кампаний и принять обоснованные решения о распределении бюджета.
Основные методы атрибуции
1. Классическая linear атрибуция (First-touch, Last-touch)
Самый простой подход — атрибутировать пользователя источнику, который он посетил первым (First-touch) или последним (Last-touch) перед покупкой/действием:
WITH user_journey AS (
SELECT
user_id,
source,
timestamp,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY timestamp) as first_visit,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY timestamp DESC) as last_visit
FROM user_events
)
SELECT
user_id,
CASE WHEN first_visit = 1 THEN source END as first_touch_source,
CASE WHEN last_visit = 1 THEN source END as last_touch_source
FROM user_journey
WHERE first_visit = 1 OR last_visit = 1
Плюсы: простота, понятность Минусы: не учитывают промежуточные точки контакта, может быть недооценка сложных путей
2. Multi-touch атрибуция
Распределяет 100% кредита между несколькими источниками в пути пользователя:
- Linear — равный вес для каждого контакта (25% + 25% + 25% + 25%)
- Time-decay — больший вес последним контактам (10% + 20% + 30% + 40%)
- Position-based — 40% первому, 40% последнему, 20% остальным
- Data-driven — вес определяется машинным обучением на основе исторических данных
WITH conversion_paths AS (
SELECT
user_id,
source,
event_timestamp,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_timestamp) as touch_position,
COUNT(*) OVER (PARTITION BY user_id) as total_touches
FROM events
WHERE user_id IN (
SELECT DISTINCT user_id FROM conversions WHERE conversion_date = CURRENT_DATE
)
)
SELECT
source,
touch_position,
total_touches,
CASE
WHEN touch_position = 1 OR touch_position = total_touches THEN 0.40
ELSE 0.20 / (total_touches - 2)
END as attribution_weight
FROM conversion_paths
ORDER BY user_id, touch_position
3. UTM параметры и pixel tracking
Добавьте utm_source, utm_medium, utm_campaign ко всем внешним ссылкам:
https://myapp.com?utm_source=facebook&utm_medium=cpc&utm_campaign=summer_sale
Также используйте pixel tracking для того, чтобы отслеживать пользователей через социальные сети, email и display сети:
<img src="https://analytics.myapp.com/pixel?user_id={{user_id}}&source=email" />
4. Идентификация пользователей (User ID matching)
Когда пользователь переходит из разных источников, нужно их идентифицировать:
- Cookie-based — сохраняем анонимный ID в браузере
- User ID matching — привязка к аккаунту пользователя
- Cross-device tracking — отслеживание одного пользователя через разные устройства
def attribute_user(user_session):
"""Определить источник пользователя"""
# Проверяем UTM параметры
if user_session.utm_source:
return user_session.utm_source
# Проверяем referrer
if user_session.referrer:
return extract_domain(user_session.referrer)
# Проверяем cookie для repeat visits
if user_session.existing_user_source:
return user_session.existing_user_source
return "direct"
Практические рекомендации
1. Подготовка данных:
- Убедитесь, что все источники трафика логируются (organic, paid, social, direct, referral, email)
- Используйте User ID как основной идентификатор
- Сохраняйте первоначальный источник в базе данных
2. Выбор модели:
- Для простых сценариев: last-touch атрибуция
- Для сложных фаннелей: multi-touch или data-driven
- Для долгих циклов продаж: time-decay
3. Инструменты:
- Google Analytics (встроенная атрибуция)
- Mixpanel, Amplitude (product analytics)
- AppsFlyer, Adjust (для мобильных)
- Custom решения с SQL
4. Метрики для мониторинга:
- CAC (Customer Acquisition Cost) по источникам
- LTV (Lifetime Value) по источникам
- Retention rate по каналам
- Cost per conversion