Когортный анализ retention в pandas
Вопрос
Как в pandas построить таблицу retention по месячным когортам из таблицы событий (user_id, event_date)?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Когорта: месяц первого события через `groupby("user_id")["event_date"].transform("min")`
Номер месяца жизни: разница периодов `to_period("M")`
Уникальные пользователи по `(cohort, age)` через `nunique`
`pivot` в таблицу когорта × месяц жизни
Деление на нулевой месяц `div(..., axis=0)`
Оговорить определение активности и незавершённые когорты
Что могут спросить следом
- Почему последние когорты выглядят хуже?
- Чем retention отличается от rolling retention?
- Как построить такую таблицу в SQL?
Разбор
Сначала определяю когорту: месяц первого события пользователя, transform("min") по user_id и to_period("M"). Затем возраст: разница между месяцем события и месяцем когорты в месяцах, для периодов это просто вычитание и .apply(lambda x: x.n) или через год и месяц. Дальше считаю уникальных пользователей на пару (cohort, age) через groupby и nunique, разворачиваю pivot(index="cohort", columns="age"). Retention: делю каждую строку на нулевой месяц, div(cohorts[0], axis=0). Отдельно оговариваю, что считается активностью, и что у свежих когорт правый край таблицы неполный: последний месяц ещё не закончился, сравнивать его с остальными нельзя.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.