rfm模型python实施步骤,RFM分析案例
作者:Cherich_sun
链接:3359 www . Jian 020d FDC E58d
本文为读者投稿。
公众号「ysdby的IT之旅」,后台回复:「RFM数据」即可获取本文完整数据。
原文链接:最详细的结合Python和RFM模型实现用户分层的实践案例!
写在前面:做数据分析的合作伙伴可能知道一些分析方法,但是对分析思维没有把握,或者遇到业务问题不知道如何下手。如果有以上提到的困惑,请参考本文。下图显示了整理后的分析方法和方法。如果能有效利用,80%以上的工作问题都可以解决。希望你能注意到,方法论是思维层面,方法是执行层面。那么,如何应用到实际业务中,才是重点。本文以RFM模型为例,将其应用于实际案例。(本文用Python实现,但Excel也可以。)
项目背景:某生鲜外卖APP成立于2018年1月1日,主营生鲜蔬菜、水果、海鲜、肉禽。APP上线后,营销期为一年。分析显示,部分重要客户被竞争对手挖走,这些用户贡献了80%的平台销售额。之前所有用户都采用了相同的操作策略。为了解决这个问题,需要对用户进行分类,了解用户目前的水平,细化运营。
一、总体分析流程1。分析目的:用户分类。
2.数据采集:excel数据
3.清理和处理:Excel和Python
4.模型建立:RFM
5.数据可视化
不及物动词结论和建议
二。对RFM模式的理解
最后,RFM模型的结果有助于更准确地将活动规则制定为用户标签,增强用户粘性,提升用户感知。最终效果图如下。
三。基于Python 1的RFM用户分层。数据采集
import panda aspd data=PD . read _ excel(c:/users/cherich/desktop/userinfo . xlsx )data . head)。
数据信息(
注意:当前数据集是5000条用户数据,缺失的值不会影响本次分析。数据清理通常包括三种类型:处理缺失值、处理重复值和转换数据类型。因此,只需考虑数据类型。这里有先决条件。r,F和M应该有参考时间。如果活动持续到现在,现在就可以做。但是我们的数据是历史数据,所以需要找到活动的结束时间。
DATA.sort_values(by= last deal ,ascending=False))。
2、数据处理
#事件结束时间2019-06-30data[最终交易]=data[最终交易]。as type(str )stop _ date=PD . to _ datetime)2019-06 "上次登录"(datas)"上次交易时间()(DATAS)" Lambdax:x . split))0)DATAS 0)DATAS)"上次交易时间")datas[F1]=datas[非会员累计购买次数] datas[会员累计购买次数]DATAS[ R1 ]=DATAS[ R1 ]。ASType [
注意:以上操作的目的是将R指标从时间类型转换为可计算格式,然后建立模型,准备计算时间区间。
3、建立模型
创建模型,必须计算f、r、m的平均值,但是,请注意,三个指标的数据都有极大值和极小值。这将导致一些错误。所以解决办法就是标准化,设置区间,5分制,5分钟最好。(数值范围可根据具体业务灵活调整,也可按四分位数调整)
defr_Score(n ) : n=int(n ) n).if0n=80:r=5 elif 80n=1603:r=4 elif 160n=2403:r=3 elif 240n=32033333330 r/360 r if0n=14:r=1 elif 14n=28:r=2 elif 28n=42:r=3 elif 42
n=56:r=4 else:r=5 return rdef M _ score(n):n=int(n)if 0n=1500:r=1 elif 1500n=3000:r=2 elif 3000n=4500:r=3 elif 4500n=6000:r=4 else:r=5 return rdata s[ M1 _ score ]=datas[ M1 ]。应用(M_score)数据[ F1 _ score ]=数据[F1]。应用(F_score)数据[ R1 _ score ]=数据[R1]。apply(R_score)datas.head()
注意:这里再次对R,F,M进行平均,取平均值为标准。如果单个指标大于平均值,则显示1,否则显示0。RFM的最终结果由0和1组成,可以得到最终的用户类型。
R1分数]。mean()F_mean=datas[F1_score].均值()M_mean=datas[M1分数]。均值()数据[R]=数据[R1分数]。应用(x:1 if x R _ mean else 0)数据[F]=数据[F1_score].应用(x:1 if x F _ mean else 0)数据[M]=数据[M1分数]。应用(x:1 if x M _ mean else 0)数据
数据[RFM]=数据[R].应用(字符串)数据[F].应用(字符串)数据[M].apply(str)datasdef user _ tag(RFM):if RFM== 000 :RES=流失用户elif rfm==010: res=一般维持用户elif rfm==100: res=新客户elif rfm==110: res=潜力客户elif rfm==001: res=重要挽留客户elif rfm==101: res=重要深耕客户elif rfm==011: res=重要唤回客户else: res=重要价值客户返回resdatas[用户标记]=datas[ RFM ].应用(用户标签)数据4、数据可视化
将matplotlib.pyplot作为滨海港作为snsimport matplotlib作为mplsns.set(font=SimHei ,style= dark grid )user _ tag=datas。group by(datas[ user _ tag ]).size()plt.figure(figsize=(10,4),dpi=80)user _ tag。sort _ values(ascending=True,inplace=True)plt.title(label=生鲜平台用户分层对比,fontsize=22,color=white ,backgroundcolor=#334f65 ,pad=20)s=PLT。barh(user _ tag。index,user_tag.values,高度=0.8,颜色=PLT。厘米。cool warm _ r(NP。s中rect的Lin space(0,1,len(user _ tag)):width=rect。get _ width()PLT。文本(宽度40,矩形。get _ y()rect。get _ height()/2,
groups _ b=datas。group by(by= user _ tag ).size()plt.figure(figsize=(10,6),dpi=80)plt.title(label=生鲜平台用户分层占比,fontsize=22,color=white ,backgroundcolor=#334f65 ,pad=20)explode=[0.6,0,0,0,0,0,0,0.4,0.8]patches,l_text,p_text=plt.pie(groups_b.values,labels=groups_b.index,shadow=True,colors=PLT。厘米。cool warm _ r(NP。Lin space(0,1,len(groups_b)),autopct= % .2f % %
以上基本完成了模块模型实现用户分层,可以看出新客户占比30%左右,重要价值客户占比30%左右。两者是平台的最主要用户类型。
接下来就需要结合具体业务来制定运营策略。最后分享的是,现在我们看到最多的招聘需求是具备分析思维。那什么是分析思维。
我的理解是,首先要理解业务,其次要掌握分析方法,要明确分析方法存在的意义是帮助我们将零散业务问题归类,归类的过程形成分析思路,有了分析思路,那你就具备了分析思维。
5、结论与建议
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。