InvoiceDate - дата когда была совершена покупка
Type - там данные о типе подписки: возврат, новый клиент, обновление подписки
Plan - monthly/annual
Price - цена
Вот такие данные
Алгоритм такой:
1. Выделяешь первый месяц(неделю) прихода клиента это же будет и номер когорты
2. Находишь дельту между датой покупки и первой датой покупки переводишь в месяц(неделю)
3. группируешь в разрезе номера когорты, дельты. в agg({'Type':'nunique'})
4. сбрасываешь индексы в полученной таблице
5. Определяешь количество покупателей в каждой когорте (это количество клиентов для 0 месяца(недели))
6. объединяешь две таблицы лучше использовать merge
7. Находишь retention
8. из полученной таблицы pivot_table(index='cohorts', columns = 'cohort_lifetime', values='retention',aggfunc='sum')
9. Для наглядности по полученной таблице строишь тепловую карту