Python数据分析实战:手把手零售用户消费行为分析(RFM模型)

2023-01-04 01:09 乐鱼全站app下载

 扫码分享

本文摘要:前面讲了数据预处置惩罚、数据基天职析,今天讲这部门篇幅会比力长,是整个分析的重点、重点、重点。3用户消费行为分析通过前面基本数据形貌分析可以清楚该企业整体的消费趋势和用户消费能力,现在进一步挖掘用户消费行为数据,通过RFM模型、生命周期等方法对用户举行分层,为后续运营治理提供依据。#3.1用户第一次消费(首购)#首购可以进一步依店肆划分,权衡差别店肆的差异性,从而量化店肆能力,为后期店肆优化提供依据。

乐鱼全站app下载

前面讲了数据预处置惩罚、数据基天职析,今天讲这部门篇幅会比力长,是整个分析的重点、重点、重点。3用户消费行为分析通过前面基本数据形貌分析可以清楚该企业整体的消费趋势和用户消费能力,现在进一步挖掘用户消费行为数据,通过RFM模型、生命周期等方法对用户举行分层,为后续运营治理提供依据。#3.1用户第一次消费(首购)#首购可以进一步依店肆划分,权衡差别店肆的差异性,从而量化店肆能力,为后期店肆优化提供依据。grouped_user.min().order_dt.value_counts().plot()plt.show()#3.2用户最后一次消费grouped_user.max().order_dt.value_counts().plot()plt.show()#从首次消费图上可以看出,每月新增的用户显着在淘汰。

用户首次消用度户最后一次消费#3.3新老客消费比#3.3.1几多用户仅消费了一次?user_life = grouped_user.order_dt.agg(["min","max"])##groupby后使用多个聚合函数用agg而非applyprint(user_life.head())print((user_life['min']==user_life['max']).value_counts())#有2654个用户5个月只购置1次,我们的店肆销售的产物是高频次的用品,这个时候就要更深入的思考原因了。#同时还要思考,针对这2654个用户如何挽回。

#3.3.2每月新客户占比#按month分组下的userid分组,求每月每个用户的最早购置日期和最晚消费日期grouped_um=df.groupby(['month','user_id']).order_dt.agg(['min','max'])# ['new']为新增列:若为新用户,则为 True。grouped_um['new'] = (grouped_um['min'] == grouped_um['max'] )print(grouped_um.reset_index().groupby('month').new.value_counts())#盘算出每个月购置的客户总数print(grouped_um.reset_index().groupby('month').new.count() #使用布尔值筛选True 作图grouped_um1=grouped_um.reset_index().groupby('month')grouped_um2=grouped_um1['new'].apply(lambda x:x.value_counts()/x.count()).reset_index()grouped_um2[grouped_um2['level_1']].plot(y = 'new', x ="month")plt.show()True为新客总数由图可以看出,新用户数量从1月份开始连续下滑#3.3.3.4.用户分层 -RFM#RFM是一个经典的用户分类模型,模型使用通用生意业务环节中最焦点的三个维度——最近消费(Recency)、#消费频率(Frequency)、消费金额(Monetary)细分用户群体,从而分析差别群体的用户价值,#最终到达精准营销。一般分为这8种类型"""'111':'重要价值客户' 该类用户与店肆生意业务频繁、生意业务金额大,但长时间没有二次消费,存在流失风险。——企业利润的潜在泉源,接纳用户唤回运营。

'011':'重要保持客户' 该类用户与店肆生意业务频繁、生意业务金额大,且最近一次消费时间距离短,实际孝敬价值很高。——企业优质的客户群,接纳会员制运营。'101':'重要挽留客户' 该类用户生意业务金额大,但生意业务并不频繁、且长时间没有二次消费,也存在流失风险。

——有很高潜在价值的客户,可针对性研究用户特征,通过特定营销手段吸引用户提高购置频率。'001':'重要生长客户' 该类用户最近消费距离短、购置金额大,但生意业务不频繁。——有很高潜在价值的客户。

乐鱼全站app下载

对该类用户展开专题研究,重点分析用户群特征,以便在下次促销时向合适的用户通报合适的产物,转化为留存客户。'110':'一般价值客户' 该类用户购置频率高,但长时间没有生意业务,而且购置金额较低,店肆已很难获取更多利润。

'010':'一般保持客户' 该类用户最近生意业务时间距离短、购置频率高,属于活跃用户,但由于累计购置金额较少,消费能力有限,属于店肆的一般维持用户。'100':'一般挽留客户' 低价值客户。

'000':'一般生长客户' 无法立刻给企业带来较大利润的用户。"""rfm=df.pivot_table(index='user_id',values=['order_products','order_amount','order_dt'], aggfunc={'order_dt':'max', 'order_amount':'sum', 'order_products':'sum'})print(rfm.head())rfm['R'] = -(rfm['order_dt']-rfm['order_dt'].max())/np.timedelta64(1,'D')#/np.timedelta64(1,"D") 换成浮点数rfm.rename(columns={'order_products':'F','order_amount':'M'},inplace=True)#inplace 代表 是否笼罩原始二维表def rfm_func(x): level=x.apply(lambda x:'1' if x>=0 else '0') label=level.R + level.F +level.M d={ '111':'重要价值客户', '011':'重要保持客户', '101':'重要挽留客户', '001':'重要生长客户', '110':'一般价值客户', '010':'一般保持客户', '100':'一般挽留客户', '000':'一般生长客户' } result=d[label] return resultrfm['label']=rfm[['R','F','M']].apply(lambda x : x-x.mean()).apply(rfm_func,axis = 1)#axis = 1是逐行应用 #默认axis=0,即表现apply函数逐列应用。print(rfm.head())print(rfm.groupby('label').count().sort_values('order_dt',ascending=False))#从数据上可以看出,我们有2394个是一般挽留客户。可以凭据店肆的谋划属性来确定是放弃还是提高活跃"""针对上述8类用户分层情况,可开端制定三大运营计谋:提高活跃度:注重提升一般客户、低价值客户的活跃度,将其转化为优质客户。

提高留存率:与重要价值、重要挽留客户互动,提高这部门用户的留存率。提高忠诚度:维系重要保持客户、重要生长客户的忠诚度,保持良好收入。详细手段包罗搭建会员体系、会员分类治理与升级、积分兑换、发放折扣券等。

"""#在画一张散点图rfm.loc[rfm.label=='重要价值客户','color'] = 'g' #greenrfm.loc[~(rfm.label=='重要价值客户'),'color'] = 'r' #redrfm.plot.scatter('F','R',c=rfm.color)plt.show()#上图为R(最近消费)与F(消费次数)的散点图,可以看出重要价值用户的R大F大,#表现消费次数多且消费时间远。可接纳重点唤回方式举行运营。还可以基于聚类(Kmeans)划分RFM,这个以后单独拿一篇来讲。

#3.3.6.用户购置周期(按订单)#用户消费周期形貌#用户消费周期漫衍order_diff = grouped_user.apply(lambda x: x.order_dt-x.order_dt.shift())#体会df.apply(列.func)print(order_diff.head(15))#shift() 为 两个日期错行相减##目的是求 时间差值print(order_diff.describe()) #对时间差值举行形貌统计分析(会自动过滤空值)#平均购置周期是9天,均值是15天#有25分位购置周期是3天,切合我们行业的特性。#订单周期呈指数漫衍(order_diff/np.timedelta64(1,'D')).plot.hist(bins=20)plt.show()#3.3.7用户生命周期(按第一次&最后一次消费)#用户生命周期形貌#用户生命周期漫衍user_life=grouped_user.order_dt.agg(['min','max'])print(user_life.head())print((user_life['max']-user_life['min']).describe())#用户生命周期的均值为40天,但25%的用户生命周期仅0天【显然受只购置一次的用户影响比力厉害,下面将分清除与否划分作图】user_life['差值']=(user_life['max']-user_life['min'])/np.timedelta64(1,'D')print(user_life.head())#清除(生命周期仅0天的用户):user_life.query('差值>0')['差值'].plot.hist(bins=40)plt.show()#3.4复购率和回购率分析#通过对复购率、回购率举行分析,可找到较高的月份举行细化分析,#视察较高的产物(产物特征),以及较高的用户(用户特征),#可凭据这些细化的数据做产物的爆款营销、推广、个性化营销等。

#复购率:自然月内,购置多次的用户占比#回购率:曾经购置过的用户在某一时期内的的再次购置的占比#3.4.1复购率purchase_r = pivoted_counts.applymap(lambda x :1 if x>1 else np.NaN if x==0 else 0)purchase_r.head()(purchase_r.sum()/purchase_r.count()).plot(figsize = (10,4))plt.show()#sum()对于1的求和,count()过滤掉np.Nan##使用元组的方式赋值#3.4.2回购率def purchase_back(data): status=[] for i in range(4): if data[i]==1: if data[i+1]==1: status.append(1) if data[i+1]==0: status.append(0) else: status.append(np.NaN) status.append(np.NaN) #需注意 语句中的是 第一位与第二位相比 输出结构放第一位, return pd.Series(status,index=df_purchase.columns)#1代表 本月购置及下个月购置 ,sum()可盘算 ,#0代表 本月购置,下个月未购置 count()可盘算总人数,#回购率: 本月及下月购置/本月购置人群purchase_b=df_purchase.apply(lambda x:purchase_back(x),axis=1)print(purchase_b.head())##此处的透视表为何用的方法不是.applymap而是.apply()(purchase_b.sum()/purchase_b.count()).plot(figsize=(10,4))##使用元组的方式赋值plt.show()复购率回购率好了,代码就先容到这里了,接待大家关注我。


本文关键词:乐鱼全站app下载,Python,数据分析,实战,手把手,零售,用户,消费

本文来源:乐鱼全站app下载-www.bxdp88.com

返回顶部