chapter4.什么样的顾客会选择离开

商业数据分析实战(酒卷隆志/里洋平)

第四章 案例2——交叉列表统计:什么样的顾客会选择离开

社交游戏的用户流失分析

和上个月相比,本月《黑猫拼图》游戏的用户数减少了很多。和上月相比,本月的商业宣传和月度活动并未大的变化。因此我们需要调查清楚用户数大量减少的原因并改善这种状况,那么我们该怎么办呢

4.1 现状和预期

现状:和上月相比,本月的用户数减少了。在本例中,我们的目标是查清用户数减少的原因,并确保和上月相同的用户数。那么下一步要做的就是通过数据分析查清元婴,并明确所需解决的问题。

4.2 发现问题

同样,在第4章中,为了明确现状和预期之间差距的结构,我们需要首先思考上月和半月有哪些不同的地方。在发现问题的阶段,重要的是从大而广的视角出发来考虑各种可能性。例如,我们可以尝试做出如下假设。

1)、商业推广上存在的问题,流失的用户数超过了新增的用户数

2)、每月不同主题的游戏活动开始变得很无聊,用户都不爱玩了

3)、按用户的性别或者年龄段等属性来划分用户群,可能是其中某个用户群出现了问题。

做出上述假设后,应尽可能地在短时间内大致验证一下。我们通过咨询市场部和游戏开发部,得到了下述信息。

1)、和上月相比,商业推广的粒度大体没变,新增用户数也大致保持在相同的水平

2)、开展的各种有次活动通上月相比几乎没有变化

因此,只剩下第3条假设“可能是其中某个用户群出现了问题”没有得到验证了。也就是说,并没有发现现有是由第1条或第2条假设造成。再进一步深挖假设的内容,可以知道用户群通常是按照性别、年龄端等来划分的。于是,首先我们可以考虑是否有某个属性的用户群数量减少了,然后通过和上月的数据加以比较,确认用户减少了的用户属性,并思考如何恢复用户数量。

4.3 数据的收集和加工

探讨分析所需的数据

在确定了分析的主题后,就需要探讨一下分析所需的数据了

这次的用户群到底需要哪些数据呢,本案例中我们提出的假设如下所示。

问题

和上月相比,用户数量减少了                                                                                              (事实)

某个用户群出现了问题                                                                                                         (假设)

解决方案

针对用户数量减少了的用户群采取相应的措施,使用用户数量回到和上月相同的水平

基于这个假设,让我们整理一下分析的过程。

1、《黑猫拼图》游戏的用户数量相比上月减少了                                                                         (事实)      

2、某些用户群的用户数量减少了                                                                                                  (假设)

3、针对该用户群指定相应的措施,使用户数量回到和上月相同水平                                      (解决方案)                                    

 

4.4 数据分析

1)、读入csv文件

os.getcwd()
filepath = 'E:\\Download\\data_analysis\\data' 
os.chdir(filepath) #将工作路径设置至filepath
dau = pd.read_csv("section4-dau.csv", parse_dates=['log_date'])
user_info = pd.read_csv("section4-user_info.csv")

2)、合并DAU和user.info的数据

user_dau = pd.merge(dau, user_info, on=['user_id', 'app_name'], how='left')

3)、用户群分析(按性别统计)

#按月统计不同性别的登录用户数
user_dau.groupby(by=[pd.Grouper(key='log_date', freq='M'),'gender']).count()['user_id']
log_date    gender
2013-08-31  F         47343
            M         46842
2013-09-30  F         38027
            M         38148
Name: user_id, dtype: int64

 

4)、用户群分析(按年龄段统计)

#按月统计不同年龄段的登录用户数
user_dau.groupby(by=[pd.Grouper(key='log_date', freq='M'),'generation']).count()['user_id'].reset_index().pivot(index='log_date', columns='generation', values='user_id')
log_date    generation  gender
2013-08-31  10          F          9091
                        M          9694
            20          F         17181
                        M         16490
            30          F         14217
                        M         13855
            40          F          4597
                        M          4231
            50          F          2257
                        M          2572
2013-09-30  10          F          7316
                        M          8075
            20          F         13616
                        M         13613
            30          F         11458
                        M         10768
            40          F          3856
                        M          3638
            50          F          1781
                        M          2054
Name: user_id, dtype: int64

 

5)、用户群分析(按性别X年龄段统计)

#按月统计不同年龄段不同性别的用户数
df_g = user_dau.groupby(by=[pd.Grouper(key='log_date', freq='M'),'generation','gender']).count()['user_id']
df_g
log_date    generation  gender
2013-08-31  10          F          9091
                        M          9694
            20          F         17181
                        M         16490
            30          F         14217
                        M         13855
            40          F          4597
                        M          4231
            50          F          2257
                        M          2572
2013-09-30  10          F          7316
                        M          8075
            20          F         13616
                        M         13613
            30          F         11458
                        M         10768
            40          F          3856
                        M          3638
            50          F          1781
                        M          2054
Name: user_id, dtype: int64

 格式转换(pivot_table,pivot)

df_g = user_dau.groupby(by=[pd.Grouper(key='log_date', freq='M'),'generation','gender']).count()['user_id']
df_g.reset_index().pivot_table(index='log_date', columns=['generation', 'gender'], values='user_id')
generation	10	20	30	40	50
gender	F	M	F	M	F	M	F	M	F	M
log_date										
2013-08-31	9091	9694	17181	16490	14217	13855	4597	4231	2257	2572
2013-09-30	7316	8075	13616	13613	11458	10768	3856	3638	1781	2054

 6)、用户群分析(按设备统计)

user_dau.groupby(by=[pd.Grouper(key='log_date', freq='M'),'device_type']).count()['user_id'].reset_index().pivot(index='log_date', columns='device_type', values='user_id')
device_type	Android	iOS
log_date		
2013-08-31	46974	47211
2013-09-30	29647	46528

结果发现,9月iOS用户数相比8月下降幅度很小,然而Android用户数却极大地减少了,因此问题很可能出自这个用户群

7)、用户群分析结果的可视化

待补充。。。 

4.5 解决对策

4.6 小结


版权声明:本文为xueruixuan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。