**简介:**企业有其生命周期,用户在一家公司也有其生命周期,用户从初次进入一家公司,到消费多次成为熟客,到最后可能慢慢流失掉,这些都是用户不同的生命周期阶段。现在互联网公司都要求针对用户进行精细化运营,这样可以大大的提高用户成交率,同时可以节省运营成本。因此,通过对用户的行为进行分析,判断其所属的生命周期阶段,对于初级用户需要引导其往成长期用户发展,而成长期用户往成熟期用户发展,成熟期用户则可以通过会员机制、头衔认证、定期推送兴趣爱好的内容等保证用户留存,对于休眠期用户则通过召回机制召回沉默用户,促进回流。
1.如何定以用户生命周期?
一般我们采用用户在平台消费的频次,消费的时长以及留存来进行划分。
1.用户消费频次和次周留存率
如下图所示,取了一段时间内的交易用户,计算他们在下一段时间内的留存率情况,做出留存图。
从图中可以发现累计购买1-3次的用户的次周留存率较低,3-6次的用户的次周留存率相对较高,而随着购买频次的越来越高,他们的次周留存率也越来越高,因此,在运营中,我们要想办法将初级用户转化为成长用户,成长用户转化为成熟用户,提升他们的购买频次。
2.用户消费间隔
发现一段时间内最后两次消费间隔越小的用户购买率越高,特别是30天以内的,因此,从客户刚进入开始,最好在30天内能进行有效营销措施,加速用户生命周期阶段的转化。
2. 生命周期的具体应用:
RFM之客户细分
有了上面的用户阶段划分,我们就需要对用户做一些具体的措施,比如推送个消息,增加一下曝光或者转化,不同阶段用户可能不一定全部需要预警,我们可以挑出有价值的用户进行营销,我们使用RFM来进行确定。
R值:最近一次消费(Recency)指的是最近一次消费时间与当前时间的间隔。理论上R值越小的客户是价值越高的客户。在目前网购便利的大环境下,顾客有了更多的购买选择和更低的购买成本,去除地域的限制因素,客户非常容易流失,如果想要提高回购率和留存率,需要时刻关注R值。
F值:消费频率(Frequency)指的是顾客在固定时间内(比如一年)的购买次数。实际操作中,由于部分商品的特殊性,比如3C产品,耐用品等即使是忠实粉丝用户也很难在1年内购买多次。所以,这种情况下,会把F值的时间范围去掉,替换成累计购买次数。
M值:消费金额(Monetary)指的是顾客在对应时间内(比如一年)的消费金额。M值和F值是一样的,都带有时间范围,指的是一段时间内的消费金额.
高价值客户:最近消费时间近、消费频次和消费金额都很高,属于高质量客户。
重点发展客户:最近消费时间较近、消费金额高、但频次不高、忠诚度不高的客户,都很有潜力,可以重点发展。
重点保持客户:最近消费时间较远,但消费频次和金额都较高,说明这是一个一段时间没来的忠实客户,我们需要主动和他保持联系。
重点挽留客户:最近消费时间较远、消费频次不高,但消费金额高的用户,可能是将要流失或者已经流失的客户,应当采取挽留措施。
具体的营销策略可以根据各自业务情况的不同进行判断
最后,也可以计算出用户的rfm总得分,判断用户的价值高低,也可以计算出各类型用户的总消费金额,客单价,频次等信息
#author:szl
#create_time:2019-11-28
#RFM模型
#订单号 门店 第三方门店ID 省份 城市 用户名 商家实收金额 商家实收金额(含佣金) 下单时间
#------RFM用户------#
#用户名 下单次数 最后一次下单时间 订单金额
import numpy as np
import pandas as pd
import os
import datetime,time
path='D:/szl/data/'
def date_diff(a):
stru_a=datetime.datetime.strptime(a,'%Y-%m-%d %H:%M:%S')
#a_to_date=datetime.datetime.strftime(stru_a,'%Y-%m-%d')
datediff = (pd.to_datetime('today') - pd.to_datetime(stru_a)).days
return datediff
def load_data(path):
file=os.listdir(path)
print (file)
result=pd.DataFrame()
for i in file:
df1=pd.read_excel(path+str(i))
df2=df1[['订单号','门店','第三方门店ID','省份','城市','用户名','商家实收金额','商家实收金额(含佣金)','下单时间']]
df2['订单号']=df2['订单号'].apply(lambda x:str(x))
df2['下单时间距今']=df2['下单时间'].apply(lambda x:date_diff(x))
result=result.append(df2)
return result
def customer_labels(x):
if x==111:
return '高消费熟客户'
elif x==110:
return '低消费熟客'
elif x==101:
return '需重点发展的潜力顾客'
elif x==100:
return '需一般发展的顾客'
elif x==11:
return '需要重点关怀的流失熟客'
elif x==10:
return '需一般关怀的流失熟客'
elif x==1:
return '需重点挽留的流失顾客'
elif x==0:
return '需一般挽留的流失顾客'
if __name__=='__main__':
df=load_data(path)
print ('数据读取完毕,开始生成rfm用户表')
R_Agg = df.groupby(by=['用户名'])['下单时间距今']
R_Agg = R_Agg.agg([('最近一次消费','min')])
F_Agg = df.groupby(by=['用户名'])['订单号']
F_Agg = F_Agg.agg([('2019年消费频次','count')])
M_Agg = df.groupby(by=['用户名'])['商家实收金额(含佣金)']
M_Agg = M_Agg.agg([('2019年消费金额',sum)])
rfm = R_Agg.join(F_Agg).join(M_Agg)
#使用均值来判断
rfm['R是否大于均值']=(rfm['最近一次消费']>30)*1
rfm['F是否大于均值']=(rfm['2019年消费频次']>rfm['2019年消费频次'].mean())*1
rfm['M是否大于均值']=(rfm['2019年消费金额']>rfm['2019年消费金额'].mean())*1
rfm['人群数值']=(rfm['R是否大于均值']*100)+(rfm['F是否大于均值']*10)+(rfm['M是否大于均值']*1)
rfm['人群类型']=rfm['人群数值'].apply(lambda x:customer_labels(x))
#查看各类型用户占比
count=rfm['人群类型'].value_counts().reset_index()
count.columns=['客户类型','人数']
count['人数占比']=count['人数']/count['人数'].sum()
##具体查看各类用户的消费金额分布
consumer_r = rfm.groupby('人群类型')['2019年消费金额'].agg([('消费总金额',sum)]).reset_index()
consumer_r.columns=['客户类型','消费总金额']
consumer_r['总金额占比']=consumer_r['消费总金额']/consumer_r['消费总金额'].sum()
new_rfm = pd.merge(count,consumer_r,on='客户类型',how='left')
#数据输出
writer1=pd.ExcelWriter(r'D:/szl/data/rfm_result_data.xlsx')
rfm.to_csv(r'D:/szl/data/rfm_raw_data.csv')
new_rfm.to_excel(writer)
writer.save()