Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Сколько денег приносят? (LTV)
- LTV удобно считать по когортам. Что для этого нужно:
- найти дату первой покупки каждого покупателя;
- вычислить число новых покупателей за каждую дату;
- добавить дату первой покупки в таблицу с заказами;
- сгруппировать таблицу и посчитать выручку.
- Дата первой покупки first_order_month мы уже высчитали отвечая на предыдущие вопросы
- orders.head()
- order_date Revenue Uid first_order_date first_session_date delta_time first_order_month order_month
- 0 2017-06-01 00:10:00 17.00 10329302124590727494 2017-06-01 00:10:00 2017-06-01 00:09:00 00:01:00 2017-06-01 2017-06-01
- 1 2017-06-01 00:25:00 0.55 11627257723692907447 2017-06-01 00:25:00 2017-06-01 00:14:00 00:11:00 2017-06-01 2017-06-01
- 2 2017-06-01 00:27:00 0.37 17903680561304213844 2017-06-01 00:27:00 2017-06-01 00:25:00 00:02:00 2017-06-01 2017-06-01
- 3 2017-06-01 00:29:00 0.55 16109239769442553005 2017-06-01 00:29:00 2017-06-01 00:14:00 00:15:00 2017-06-01 2017-06-01
- 4 2017-06-01 07:58:00 0.37 14200605875248379450 2017-06-01 07:58:00 2017-06-01 07:31:00 00:27:00 2017-06-01 2017-06-01
- Посчитаем количество новых покупателей (n_buyers) за каждый месяц
- cohort_sizes = orders.groupby('first_order_month').agg({'Uid': 'nunique'}).reset_index()
- cohort_sizes.columns = ['first_order_month', 'n_buyers']
- Сгруппируем таблицу заказов по месяцу первой покупки и месяцу каждого заказа и сложим выручку. Сбросим индекс методом reset_index()
- cohorts = orders.groupby(['first_order_month','order_month']).agg({'Revenue': 'sum'}).reset_index()
- Строка таблицы cohorts показывает, какую выручку принесла когорта. Например, строка 0 сообщает, что покупатели, сделавшие свой первый заказ в июне 2017 года, в этом же месяце принесли суммарно 9557.49 рублей выручки.
- cohorts.Revenue.describe()
- count 79.000000
- mean 3190.597468
- std 5392.641642
- min 3.420000
- 25% 491.365000
- 50% 1015.980000
- 75% 1866.795000
- max 21716.200000
- Name: Revenue, dtype: float64
- Для дальнейшего анализа воспользуемся инструкцией из тренажера в теме:"Юнит-экономика" урок: "Считаем экономику одного покупателя в интернет-магазине"
- С точки зрения когортного анализа LTV — накопительная выручка когорты в пересчёте на количество людей. Добавим в таблицу cohorts данные о том, сколько людей первый раз совершили покупку в каждый месяц
- report = pd.merge(cohort_sizes, cohorts, on='first_order_month')
- print(report.head())
- first_order_month n_buyers order_month Revenue
- 0 2017-06-01 2023 2017-06-01 9557.49
- 1 2017-06-01 2023 2017-07-01 981.82
- 2 2017-06-01 2023 2017-08-01 885.34
- 3 2017-06-01 2023 2017-09-01 1931.30
- 4 2017-06-01 2023 2017-10-01 2068.58
- Так как средняя маржинальность нам не известна предположим, что онас равна 50%
- margin_rate = 0.5
- report['gp'] = report['Revenue'] * margin_rate
- report['age'] = (report['order_month'] - report['first_order_month']) / np.timedelta64(1, 'M')
- report['age'] = report['age'].round().astype('int')
- print(report.head())
- first_order_month n_buyers order_month Revenue gp age
- 0 2017-06-01 2023 2017-06-01 9557.49 4778.745 0
- 1 2017-06-01 2023 2017-07-01 981.82 490.910 1
- 2 2017-06-01 2023 2017-08-01 885.34 442.670 2
- 3 2017-06-01 2023 2017-09-01 1931.30 965.650 3
- 4 2017-06-01 2023 2017-10-01 2068.58 1034.290 4
- Наконец, найдём LTV. Разделим валовую прибыль когорт за каждый месяц на общее число пользователей в каждой когорте. Для наглядности визуализируем когорты в виде сводной таблицы
- report['ltv'] = report['gp'] / report['n_buyers']
- output = report.pivot_table(
- index='first_order_month',
- columns='age',
- values='ltv',
- aggfunc='mean').round()
- output.fillna('')
- age 0 1 2 3 4 5 6 7 8 9 10 11
- first_order_month
- 2017-06-01 2.0 0 0 0 1 0 0 0 0 0 0 0
- 2017-07-01 3.0 0 0 0 0 0 0 0 0 0 0
- 2017-08-01 3.0 0 0 0 0 0 0 0 0 0
- 2017-09-01 3.0 1 0 2 0 0 0 0 0
- 2017-10-01 3.0 0 0 0 0 0 0 0
- 2017-11-01 3.0 0 0 0 0 0 0
- 2017-12-01 2.0 0 0 1 0 0
- 2018-01-01 2.0 0 0 0 0
- 2018-02-01 2.0 0 0 0
- 2018-03-01 2.0 0 0
- 2018-04-01 2.0 0
- 2018-05-01 2.0
- 2018-06-01 2.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement