Когортный анализ в Python
Когортный анализ в 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 | Работа с датами (выделение периода для когорты) |
Типовой алгоритм расчёта
[править]- Загрузка данных - импорт таблицы с пользователями и их действиями (обычно из CSV, SQL, API).
- Выделение даты первого действия - для каждого пользователя находится минимальная дата (первый визит, первая покупка, регистрация).
- Определение когорты - на основе этой даты вычисляется номер когорты (например, месяц и год).
- Расчёт периода действия - для каждого действия вычисляется, через сколько дней или месяцев после первого действия оно произошло.
- Агрегация - для каждой когорты и каждого периода вычисляется метрика (количество пользователей, сумма выручки).
- Визуализация - построение когортного графика (тепловой карты).
Пример кода (базовый расчёт 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-систему.
