前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分群思维(五)特殊的分群思维-同期群分析

分群思维(五)特殊的分群思维-同期群分析

作者头像
HsuHeinrich
发布2023-03-29 13:53:43
3100
发布2023-03-29 13:53:43
举报
文章被收录于专栏:HsuHeinrich

分群思维(五)特殊的分群思维-同期群分析

小P:小H,用户留存率降了,增长也缓慢了,这是什么原因啊,会不会是新用户出了问题啊,还是说老用户不满意了? 小H:可以尝试同期群分析,看看新老用户的差异。

代码语言:javascript
复制
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 初始化设置
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【分群思维05】自动获取~

代码语言:javascript
复制
df = pd.read_csv('paid.csv', encoding="gbk")
df.head()

日期

付费金额

uid

0

2021/4/30 9:50

300

9734668

1

2021/4/30 9:42

150

9947799

2

2021/4/30 9:41

680

9058431

3

2021/4/30 9:32

30

9947799

4

2021/4/30 9:25

150

2412798

  • cohort
代码语言:javascript
复制
# 生成用户每月数据
df['购买月份'] = pd.to_datetime(df['日期']).dt.to_period("M")
order = df.groupby(["uid", "购买月份"], as_index=False).agg(
    月付费总额=("付费金额", "sum"),
    月付费次数=("uid", "count"),
)

# 计算同期群分组:用户首次购买月份
order["同期群分组"] = order.groupby("uid")['购买月份'].transform("min")
# 计算cohort月
order["cohort月"] = (order.购买月份-order.同期群分组).apply(lambda x:f"+{x.n}月")

常见的cohort展示方式有两种,一种是按照日期差呈现出左上角数据;一种是按照实际日期呈现出右上角数据

代码语言:javascript
复制
# 留存cohort方式1
order.pivot_table(index="同期群分组", columns="cohort月",
                          values="uid", aggfunc="count",
                          fill_value=0).rename_axis(columns="留存用户")

image-20230206151730697

代码语言:javascript
复制
# 留存cohort方式2
order.pivot_table(index="同期群分组", columns="购买月份",
                          values="uid", aggfunc="count",
                          fill_value=0).rename_axis(columns="留存用户")

image-20230206151747937

代码语言:javascript
复制
# 按照cohort方式1计算各指标

# 生成用户留存cohort
user_retention_cohort = order.pivot_table(index="同期群分组", columns="cohort月",
                             values="uid", aggfunc="count",
                             fill_value=0).rename_axis(columns="留存用户")

# 生成用户留存率cohort
user_retention_rate_cohort = user_retention_cohort.divide(user_retention_cohort.iloc[:, 0], axis=0)
user_retention_rate_cohort.rename_axis(['留存率'], axis=1, inplace=True)

# 生成人均付费金额cohort
user_paid_total_cohort = order.pivot_table(index="同期群分组", columns="cohort月",
                                  values="月付费总额", aggfunc="sum",
                                  fill_value=0).rename_axis(columns="付费总额")
user_paid_per_amount_cohort = user_paid_total_cohort.divide(user_retention_cohort.iloc[:, 0], axis=0)
user_paid_per_amount_cohort.rename_axis(['人均付费金额'], axis=1, inplace=True)

# 生成人均购买次数cohort
user_paid_total_cohort = order.pivot_table(index="同期群分组", columns="cohort月",
                                  values="月付费次数", aggfunc="sum",
                                  fill_value=0).rename_axis(columns="付费总次数")
user_paid_per_cnt_cohort = user_paid_total_cohort.divide(user_retention_cohort.iloc[:, 0], axis=0)
user_paid_per_cnt_cohort.rename_axis(['人均付费次数'], axis=1, inplace=True)
代码语言:javascript
复制
# 优化表格 这里以用户留存率为例
(user_retention_rate_cohort.style
    .format("{:.2%}")
    .bar(subset="+0月", color="green")
    .background_gradient("Reds",subset=user_retention_rate_cohort.columns[1:],axis=None)
 )

image-20221220223513323

  • 留存堆积图

以下数据如果有需要的同学可关注公众号HsuHeinrich,回复【分群思维05】自动获取~

代码语言:javascript
复制
# 模拟的数据,部分数据较前期多可忽略
df_sp2 = pd.read_excel('留存cohort.xlsx', index_col=0)
df_sp2.head()

image-20230206151814082

代码语言:javascript
复制
# 绘制留存堆积图
df_sp2.T.plot.area(stacked=True, figsize=(12,8))
plt.title('留存堆积图')
plt.show()

output_11_0

留存堆积图能很好的展示留存信息和增长信息,当新增用户显著高于前期的流失时,用户活跃规模是增长的。如上图,我们可以看到在2019.1月至6月用户呈现缓慢的增长,此时各月的流失也比较缓慢。之后直至8月迎来快速增长期,这段时期的新用户增长明显较大。此后到2022.1月新用户增增长略可,用户流失也略可,所以也呈现出了缓慢的增长,到2022.2月则开始下滑了。

共勉~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分群思维(五)特殊的分群思维-同期群分析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档