Когортный анализ в Python

Материал из Энциклопедия интернет-маркетинга MarketWiki

Когортный анализ в Python - это метод группировки пользователей по дате первого события (регистрация, первая покупка, первый визит) и расчёта метрик удержания и LTV с использованием библиотек pandas, numpy и seaborn, позволяющий полностью контролировать логику расчёта и визуализацию без ограничений готовых аналитических платформ.

В интернет-маркетинге Python используется для когортного анализа, когда встроенных инструментов (GA4, Roistat, Mixpanel) недостаточно: требуется сложная логика группировки (например, когорты по первому действию в определённой категории товаров), работа с сырыми данными из нескольких источников (CRM + веб-аналитика + коллтрекинг) или построение кастомных визуализаций для презентаций. Python также позволяет автоматизировать регулярный расчёт когорт и интегрировать его в дашборды (Tableau, Power BI, Apache Superset).

Python стал популярным инструментом для когортного анализа с ростом доступности библиотеки pandas (2010-е годы) и распространением практики Data Science в маркетинге. К 2026 году Python остаётся стандартом для аналитиков, которым нужна гибкость, не доступная в готовых BI-системах.

Суть

[править]

Когортный анализ в Python - это написание кода (обычно с библиотекой pandas), который берёт сырые данные о пользователях и их действиях, группирует их по дате первого визита и вычисляет, сколько из них вернулось через 1, 2, 3 дня или месяца. Это гибко, но требует навыков программирования.

Что такое когортный анализ в Python

[править]

Когортный анализ в Python - это реализация метода когортного анализа с использованием языковых средств Python и его библиотек для обработки данных (pandas, numpy) и визуализации (seaborn, matplotlib). В отличие от готовых инструментов (GA4, Roistat), Python не накладывает ограничений на логику группировки, типы когорт и метрики.

Что можно делать в Python, чего нет в готовых инструментах

[править]
Возможность Готовые инструменты (GA4, Roistat) Python
Произвольная логика когорты Только «дата первого визита» или «дата первого заказа» Любая: первое действие в категории X, первый клик по кнопке Y
Объединение данных из нескольких источников Только данные внутри системы CRM + веб-аналитика + коллтрекинг + база заказов
Кастомная визуализация Стандартные тепловые карты Любые графики, анимации, интеграция в дашборды
Автоматизация Ручное обновление отчёта Полностью автоматический пайплайн (например, ежедневный расчёт)
Стоимость Зависит от тарифа Бесплатно (open-source)

Как работает когортный анализ в Python

[править]

Основные библиотеки

[править]
Библиотека Назначение
pandas Загрузка данных, группировка, расчёт когорт
numpy Математические операции (например, расчёт retention)
seaborn Построение тепловых карт (heatmap) для визуализации
matplotlib Базовая настройка графиков
datetime Работа с датами (выделение периода для когорты)

Типовой алгоритм расчёта

[править]
  1. Загрузка данных - импорт таблицы с пользователями и их действиями (обычно из CSV, SQL, API).
  2. Выделение даты первого действия - для каждого пользователя находится минимальная дата (первый визит, первая покупка, регистрация).
  3. Определение когорты - на основе этой даты вычисляется номер когорты (например, месяц и год).
  4. Расчёт периода действия - для каждого действия вычисляется, через сколько дней или месяцев после первого действия оно произошло.
  5. Агрегация - для каждой когорты и каждого периода вычисляется метрика (количество пользователей, сумма выручки).
  6. Визуализация - построение когортного графика (тепловой карты).

Пример кода (базовый расчёт retention)

[править]
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
df = pd.read_csv('user_actions.csv')
df['action_date'] = pd.to_datetime(df['action_date'])

# 1. Определяем дату первого действия для каждого пользователя
first_action = df.groupby('user_id')['action_date'].min().reset_index()
first_action.columns = ['user_id', 'first_date']

# 2. Присоединяем дату первого действия к каждому событию
df = df.merge(first_action, on='user_id')

# 3. Определяем когорту (например, по месяцу первого действия)
df['cohort'] = df['first_date'].dt.to_period('M')

# 4. Определяем период (через сколько дней после первого действия)
df['period'] = (df['action_date'].dt.year - df['first_date'].dt.year) * 12 + \
                (df['action_date'].dt.month - df['first_date'].dt.month)

# 5. Расчёт retention: количество уникальных пользователей в каждой когорте в каждом периоде
retention = df.groupby(['cohort', 'period'])['user_id'].nunique().reset_index()
retention.columns = ['cohort', 'period', 'users']

# 6. Нормализация: делим на количество пользователей в периоде 0
cohort_sizes = retention[retention['period'] == 0][['cohort', 'users']]
cohort_sizes.columns = ['cohort', 'cohort_size']
retention = retention.merge(cohort_sizes, on='cohort')
retention['retention_rate'] = retention['users'] / retention['cohort_size']

# 7. Визуализация
pivot = retention.pivot(index='cohort', columns='period', values='retention_rate')
plt.figure(figsize=(12, 8))
sns.heatmap(pivot, annot=True, fmt='.0%', cmap='Greens', cbar=True)
plt.title('Когортный анализ: удержание пользователей')
plt.xlabel('Период (месяцы после первого действия)')
plt.ylabel('Когорта (месяц первого действия)')
plt.tight_layout()
plt.show()

Преимущества

[править]
  • Полная гибкость - можно строить когорты по любому признаку (первый клик по кнопке, первая оплата, первая регистрация).
  • Объединение источников - Python позволяет объединять данные из CRM, веб-аналитики, коллтрекинга, баз данных.
  • Автоматизация - скрипт можно запускать по расписанию (например, ежедневно через Cron или Airflow).
  • Кастомизация визуализации - любые цвета, подписи, размеры, форматы графиков.
  • Бесплатность - все библиотеки open-source, нет затрат на лицензии.
  • Масштабируемость - при росте данных можно перейти на распределённые вычисления (Dask, Spark).

Недостатки

[править]
  • Требует навыков программирования - аналитик должен знать Python, pandas, SQL (для выгрузки данных).
  • Настройка инфраструктуры - требуется настроить доступ к базам данных, среду выполнения (Jupyter, скрипты).
  • Поддержка кода - при изменении логики или источников данных код нужно править.
  • Риск ошибок - ошибка в коде (например, неправильное определение периода) может дать неверные результаты.
  • Нет встроенных проверок - в отличие от GA4, Python не предупредит о некорректных данных.

Где используется

[править]

Когортный анализ в Python применяется для:

  • Сложных бизнес-логик - когда когорты нужны не по дате визита, а по первому действию в определённой категории.
  • Объединения данных из нескольких источников - CRM + веб-аналитика + коллтрекинг + база заказов.
  • Автоматической отчётности - ежедневный или еженедельный расчёт когорт с отправкой результата в Telegram, email или дашборд.
  • Продвинутой визуализации - интерактивные графики (plotly), анимация изменения когорт во времени.
  • Интеграции с BI-системами - результаты расчёта загружаются в Tableau, Power BI, Superset.

Часто задаваемые вопросы

[править]

Что такое когортный анализ в Python простыми словами?

[править]

Это написание программы на Python (обычно с библиотекой pandas), которая самостоятельно рассчитывает когорты. На вход подаётся таблица с пользователями и их действиями, на выходе получается таблица с retention и тепловая карта.

Нужно ли знать Python, чтобы делать когортный анализ?

[править]

Для простых когорт - нет, достаточно GA4 или Roistat. Python нужен, когда стандартных инструментов недостаточно: например, когорты не по «первому визиту», а по «первому клику по кнопке "Добавить в корзину"» или когда требуется объединить данные из CRM и веб-аналитики.

Как часто нужно обновлять когортный анализ в Python?

[править]

Это зависит от потребностей бизнеса. Для оперативного управления - ежедневно. Для стратегических выводов (LTV, удержание) - раз в месяц.

Какие данные нужны для когортного анализа в Python?

[править]

Таблица с действиями пользователей: user_id, дата действия, тип действия (если требуется фильтрация), сумма (если рассчитывается LTV). Данные можно загружать из CSV, Excel, SQL-базы, API.

Можно ли автоматизировать когортный анализ в Python?

[править]

Да. Скрипт можно запускать по расписанию (через Cron в Linux, Task Scheduler в Windows, Airflow для сложных пайплайнов), а результаты сохранять в Google Sheets, отправлять в Telegram или загружать в BI-систему.

Связанные термины

[править]