Pandas & NumPy Academy · Урок

Когортная таблица удержания

Создавайте матрицу когортного удержания, показывающую долю пользователей недели 0, которые остаются активными в последующие недели, с помощью pivot_table.

Урок 3 из 413 шагов

«Когортная таблица удержания» — бесплатный урок Pandas & NumPy Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Pandas & NumPy Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Что такое когортная таблица удержания

Когортная таблица удержания объединяет пользователей по неделе или месяцу, когда они впервые воспользовались продуктом, а затем отслеживает, какой процент каждой когорты остаётся активным в последующие недели. В строке 0 всегда отображается 100 %, поскольку неделя 0 определяется как неделя регистрации. Значения в последующих столбцах показывают, насколько быстро продукт теряет пользователей: чем медленнее снижение, тем выше удержание.

import pandas as pd

df = pd.read_csv('user_events.csv', parse_dates=['event_date'])
print(df.dtypes)
print(df.head())

Назначение каждому пользователю недели когорты

Неделя когорты — это неделя первого события каждого пользователя. Используйте groupby('user_id')['event_date'].min(), чтобы найти дату первого события для каждого пользователя, а затем преобразуйте её в неделю ISO с помощью .dt.to_period('W'). Объедините эту метку когорты с основным DataFrame событий, чтобы каждая строка содержала информацию о неделе когорты пользователя.

cohort_week = df.groupby('user_id')['event_date'].min().dt.to_period('W').rename('cohort_week')
df = df.join(cohort_week, on='user_id')

df['event_week'] = df['event_date'].dt.to_period('W')

print(df[['user_id', 'event_date', 'cohort_week', 'event_week']].head())

Вычисление номера недели с момента формирования когорты

Номер недели, также называемый номером периода или возрастом, — это разница между неделей события и неделей когорты. Вычитание периодов Pandas возвращает целочисленное смещение. Неделя 0 означает, что пользователь был активен в неделю регистрации; неделя 4 — что он вернулся через четыре недели. Этот столбец смещения становится осью столбцов матрицы удержания.

df['week_number'] = (df['event_week'] - df['cohort_week']).apply(lambda x: x.n)

print(df[['user_id', 'cohort_week', 'event_week', 'week_number']].head(10))

Подсчёт активных пользователей для каждой пары «когорта — неделя»

Сгруппируйте данные одновременно по cohort_week и week_number и подсчитайте уникальных пользователей, чтобы получить исходную матрицу показателей удержания. Каждая ячейка показывает, сколько пользователей из когорты C были активны на неделе N. Диагональ из верхнего левого угла в нижний правый — неделя 0 для каждой когорты — содержит размеры когорт, которые используются как знаменатели при вычислении процентов.

retention_counts = (
    df.groupby(['cohort_week', 'week_number'])['user_id']
    .nunique()
    .reset_index(name='active_users')
)

print(retention_counts.head(10))

Преобразование данных в матрицу удержания

Используйте pivot_table(), чтобы преобразовать показатели удержания из длинного формата в широкую матрицу: строки — это недели формирования когорт, а столбцы — номера недель. Параметр aggfunc='sum' обрабатывает дублирующиеся ключи группировки. Заполните нулями ячейки, соответствующие неделям, когда пользователи этой когорты не были активны. Эта матрица является основой анализа удержания.

retention_matrix = retention_counts.pivot_table(
    index='cohort_week',
    columns='week_number',
    values='active_users',
    aggfunc='sum'
).fillna(0)

print(retention_matrix.iloc[:5, :8])

Расчёт процентов удержания

Разделите каждую строку на её значение для недели 0, чтобы преобразовать количество в проценты. Столбец недели 0 содержит размер когорты и хранится в retention_matrix[0]. Используйте divide(cohort_sizes, axis=0), а затем умножьте результат на 100. Для удобства чтения округлите значения до одного знака после запятой. В результате получится стандартная тепловая карта удержания, используемая в отчётах по продуктовой аналитике.

cohort_sizes = retention_matrix[0]
retention_pct = retention_matrix.divide(cohort_sizes, axis=0) * 100
retention_pct = retention_pct.round(1)

print(retention_pct.iloc[:5, :8])

Интерпретация кривой удержания

Читайте таблицу удержания по диагонали: со временем показатели каждой строки снижаются. У продукта с высоким удержанием значения могут выглядеть так: 100, 60, 50, 45, 42 — быстрое первоначальное падение сменяется стабильным плато. У продукта с низким удержанием значения будут примерно такими: 100, 30, 15, 8, 4 — постоянное снижение без плато. Уровень плато (если оно есть) называют долгосрочным уровнем удержания; это важнейший KPI удержания.

# Average retention rate per week number across all cohorts
avg_retention = retention_pct.mean(axis=0)
print('Average retention by week:')
print(avg_retention.round(1))

Определение лучших и худших когорт

Сравнивайте результаты когорт по удержанию на 4-й или 8-й неделе. Когорта с самым высоким удержанием на 4-й неделе, вероятно, получила преимущества от улучшения продукта или эффективного канала привлечения; худшая когорта могла быть привлечена через канал низкого качества. Используйте .loc[:, 4].sort_values(ascending=False), чтобы упорядочить когорты по удержанию на 4-й неделе.

if 4 in retention_pct.columns:
    week4 = retention_pct[4].sort_values(ascending=False)
    print('Cohorts ranked by week-4 retention:')
    print(week4)

Визуализация удержания с помощью тепловой карты

Тепловая карта с цветовой кодировкой — стандартный способ визуализации таблиц удержания. Используйте sns.heatmap() с параметром annot=True, чтобы показать процентное значение внутри каждой ячейки, и расходящуюся цветовую шкалу (низкое удержание — красный цвет, высокое — зелёный). Задайте vmin=0 и vmax=100, чтобы цвета можно было сопоставлять на разных шкалах удержания.

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(14, 6))
sns.heatmap(retention_pct.iloc[:, :13],
            annot=True, fmt='.0f',
            cmap='RdYlGn', vmin=0, vmax=100,
            ax=ax, linewidths=0.5)
ax.set_title('Weekly Cohort Retention (%)')
ax.set_xlabel('Week Number')
ax.set_ylabel('Cohort Week')
plt.tight_layout()
plt.show()

Построение кривой удержания

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

avg_ret = retention_pct.mean(axis=0)
std_ret = retention_pct.std(axis=0)

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(avg_ret.index, avg_ret.values, color='steelblue', linewidth=2, marker='o')
ax.fill_between(avg_ret.index, avg_ret - std_ret, avg_ret + std_ret, alpha=0.2)
ax.set_xlabel('Week Number')
ax.set_ylabel('Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()

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

Экспортируйте таблицу удержания в Excel, чтобы менеджеры продукта могли использовать её на еженедельных встречах. Примените to_excel() и вручную задайте условное форматирование в Excel либо используйте Styler.background_gradient() в Pandas, чтобы добавить цвета непосредственно в экспортированный файл. Таблица удержания — один из наиболее востребованных результатов продуктовой аналитики.

styled = retention_pct.style.background_gradient(cmap='RdYlGn', vmin=0, vmax=100)
styled.to_excel('retention_table.xlsx', engine='openpyxl')
print('Retention table saved to retention_table.xlsx')

Быстрая проверка

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

Итоги урока

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

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

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

Урок «Когортная таблица удержания» бесплатный?

Да — полный текст урока «Когортная таблица удержания» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Pandas & NumPy Academy, подпишись на CoddyKit PRO. Курс Pandas & NumPy Academy содержит 4 уроков всего.

Чему я научусь в уроке «Когортная таблица удержания»?

Создавайте матрицу когортного удержания, показывающую долю пользователей недели 0, которые остаются активными в последующие недели, с помощью pivot_table. Ты практикуешь Pandas & NumPy Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Pandas & NumPy Academy?

Предыдущий опыт не требуется. Pandas & NumPy Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Когортная таблица удержания»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Pandas & NumPy Academy?

Да. Каждый урок Pandas & NumPy Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Формирование сессий и последовательность событий
  2. Анализ воронки
  3. Когортная таблица удержания
  4. Визуализация пользовательских путей
← Назад к Pandas & NumPy Academy