Python: атрибуция в Google Analytics — СБЕР

Senior Python Fintech

Условие задания

**Компания:** Сбер

**Данные:** DataFrame `visits`:

| Столбец | Тип | Описание |
|---------|-----|----------|
| visitor_id | str | ID посетителя |
| source | str | Источник: organic, cpc, email, direct, social |
| visit_date | date | Дата визита |
| has_transaction | bool | Была ли транзакция |

**Задание:**
1. Постройте цепочки источников для каждого посетителя (path to conversion)
2. Найдите топ-5 цепочек, приводящих к транзакции
3. Сравните first-touch и last-touch атрибуцию

Пример данных

Структура для ориентира — реальные значения из эталонного решения.

import pandas as pd

# Сортировка по посетителю и дате
visits = visits.sort_values(['visitor_id', 'visit_date'])

# 1. Построение цепочек
def build_paths(df):
    paths = []
    for visitor_id, group in df.groupby('visitor_id'):
        sources = group['source'].tolist()
        transactions = group['has_transaction'].tolist()

        current_path = []
        for source, has_tx in zip(sources, transactions):
            current_path.append(source)
            if has_tx:
                paths.append({
                    'visitor_id': visitor_id,
                    'path': ' → '.join(current_path),
                    'path_length': len(current_path),
                    'first_touch': current_path[0],
                    'last_touch': current_path[-1],
                })
                current_path = []  # Начинаем новую цепочку

    return pd.DataFrame(paths)

conversion_paths = build_paths(visits)

# 2. Топ-5 цепочек
top_paths = (
    conversion_paths
    .groupby('path')
    .size()
    .reset_index(name='conversions')
    .sort_values('conversions', ascending=False)
    .head(5)
)
print("Топ-5 цепочек конверсии:")
print(top_paths)

# 3. First-touch vs Last-touch атрибуция
first_touch = (
    conversion_paths
    .groupby('first_touch')
    .size()
    .reset_index(name='ft_conversions')
    .sort_values('ft_conversions', ascending=False)
)

last_touch = (
    conversion_paths
    .groupby('last_touch')
    .size()
    .reset_index(name='lt_conversions')
    .sort_values('lt_conversions', ascending=False)
)

comparison = (
    first_touch
    .merge(last_touch,
           left_on='first_touch',
           right_on='last_touch',
           how='outer')
    .fillna(0)
)
comparison['source'] = comparison['first_touch'].fillna(comparison['last_touch'])
comparison = comparison[['source', 'ft_conversions', 'lt_conversions']]
print("\nСравнение атрибуции:")
print(comparison)

Темы

атрибуция pandas маркетинг воронка

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Python: атрибуция в Google Analytics — СБЕР"?

Это задание для уровня Senior. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «Python» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: атрибуция, pandas, маркетинг, воронка.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «Python»?

На zasqlpython.ru есть 482 Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.

← Все задания