avatar
Мир аналитика данных
@analysts_world
14.06.2023 08:32
Покажу на примере, что такое когортный анализ и с чем его едят.
Начну с определения, прямо как в школе.
Когортный анализ - способ изучить группы пользователей и клиентов, объединённых общими признаками в определённый период времени.

SQL запросом отбираем аккаунты клиентов, которые вас интересуют. df['account_id'] Допустим, по дате создания или у кого первая дата оплаты продукта с начала года. Колонки будут: week – неделя. в которой произошло это событие, номер клиента - account_id.

Вот так можно в SQL соединить год и неделю, на случай если нужен не только 2023, но и прошлые года:
concat(YEAR(first_payed_product_at),'-',week(first_payed_product_at,1)) as week. В итоге будут данные в таком формате: 2023-0, 2023-1, 2023-2 и прочее

По отобранным клиентам считаем выручку за 2023 год в разрезе платежных систем.
type – это тип платежной системы (tinkoff, yandex_kassa и прочее)
query = f""" -- здесь нужен f, чтобы потом в условии where можно было бы воспользоваться и указать список клиентов, по которым мы ищем выручку.
select account_id, type
sum(amount) as 'amount'
from payment
where account_id in {tuple(df_acc['account_id'])}
and deleted=0
and status='accepted'
and created_at >= '2023-01-01'
group by 1,2
order by 1,3
df_rev = pd.read_sql(query, connection)

Выгрузка сохраняется в датафрейм df_rev.
Относим клиента в ту платежную систему, через которую прошли максимальные платежи за период – оставляем последние .last (мы сортировали их order by 3).
df_big = df_rev.groupby(by='account_id').last().reset_index()

Соединяем базу со всеми клиентами – df_acc, который мы выкачали вначале с выгрузкой df_rev
Если не было выручки, то пишем fillna('no_payment’)
df_merge = pd.merge(df_acc, df_big, on = 'account_id', how = 'left').fillna('no_payment’)

А теперь самое интересное!

df_final = df_merge.pivot_table(index = 'week', columns=['type'],  values = 'account_id',aggfunc = 'count', margins=True).fillna(0).reset_index()

Мы развернули таблицу, чтобы по строкам у нас были недели, по столбцам – типы оплат, а в значениях - кол-во account_id, то есть кол-во клиентов, максимальные платежи которых проходят через этот тип оплат.
🔥 13
👍 5
🤯 5
3 28 3.2K

Обсуждение 3

Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.

Обсудить в Telegram