python客户价值分析_Python实现RFM客户价值分析

要实现精细化运营,就需要对用户进行分层,筛选出各层次的用户,这样运营才能针对性的制作策略去运营。我今天就来说下用户分层经典的模型RFM模型与聚类分析模型,今天主要介绍RFM模型

一、什么是RFM模型

RFM是3个指标的缩写,最近一次消费时间间隔(Recency),消费频率(Frequency),消费金额(Monetary)。而RFM模型就是通过这三项指标,来描述客户的价值状况,从而得到分群的客户。其中R是指用户的最近一次消费时间距现在有多长时间了,这个指标反映用户流失与复购(粘性)

F是指用户在指定观察的周期内消费了几次。这个指标反映了用户的消费活跃度(忠诚度)

M是指用户在指定的观察周期内在平台花了多少钱,这个指标反映用户对公司贡献的价值(营收)

二、什么时候用

任何模型最终都是腰围业务服务的,并不任何时候、任何数据都可以套用这个模型最客户分群的。用RFM模型时需要考虑下面几个因素需要客户有一定的消费频次,像房子、耐用品、家私这类,客户不会隔三差五去消费这些东西,所以这类的消费数据要做客户价值分析的话,RFM不是一个好的选择

需要客户有消费金额,对企业产生价值

需要记录有用户ID,这样RFM分层完后才能对应上

RFM 更使用于传统企业里的运营商、银行、航空,以及互联网消费行业

三、怎么用

下面我就接着上一篇文章中京东消费者数据,用python来实现RFM模型,由于数据集中缺少购买金额这个数据,所以这个维度我就先忽略不看,重要的还是思路

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

%matplotlib inline

jd_consumer=pd.read_excel('./京东消费者分析数据.xlsx',sheet_name='JD_Fnl')

jd_consumer.head()观察购买次数频率的分布

jd_consumer[jd_consumer['type']=='Order'].groupby('customer_id').size().sort_values(ascending=False)

customer_id

653834 3

813206 2

228162 2

507444 2

1496979 2

..

1087899 1

1087819 1

1087596 1

1087560 1

64 1

Length: 10652, dtype: int64

我只选择消费食品的用户用来分析,因为用户在一定时间内购买食品的频次比其他电子产品、服饰等更活跃对数据进行整合,以2018年04月15号到2018年3月1号为观察的时间区间

#对列重命名

jd_consumer.rename(columns={'action_date':'action_time'},inplace=True)

#提取时间中的小时时段

jd_consumer['action_date']=jd_consumer['action_time'].apply(lambda x:pd.datetime.strftime(x,'%Y-%m-%d'))

jd_consumer['action_month']=jd_consumer['action_time'].apply(lambda x:pd.datetime.strftime(x,'%Y-%m'))

jd_consumer_food=jd_consumer[(jd_consumer['type']=='Order') &

(jd_consumer['shop_category']=='Food') &

(jd_consumer['action_month']=='2018-03')][['customer_id',

'action_date','type']].drop_duplicates()R

idx=jd_consumer_food.groupby('customer_id').size().sort_values(ascending=False)[:1000].index

jd_rfm=jd_consumer_food[jd_consumer_food['customer_id'].isin(idx)].groupby('customer_id').agg({'action_date':'max','type':'count'})

jd_rfm['R']=(pd.to_datetime('2018-04-15')-pd.to_datetime(jd_rfm['action_date'])).dt.days

jd_rfm.rename(columns={'type':'F'},inplace=True)

jd_rfm=jd_rfm.drop('action_date',axis=1)这里需要注意,R、F阈值的划分需要与实际的业务相结合,制定出贴合业务的阈值,这样划分出来的结果才是最优的。考虑数据本身不是很全,我这里直接用均值作为阈

rmd = jd_rfm['R'].mean()

fmd = jd_rfm['F'].mean()

rmd,fmd

(29.321, 1.004)

def customer_type(frame):

customer_type = []

for i in range(len(frame)):

if frame.iloc[i,1]<=rmd and frame.iloc[i,0]>=fmd :

customer_type.append('重要价值用户')

elif frame.iloc[i,1]>rmd and frame.iloc[i,0]>=fmd :

customer_type.append('重要唤回用户')

elif frame.iloc[i,1]<=rmd and frame.iloc[i,0]

customer_type.append('重要深耕用户')

elif frame.iloc[i,1]>rmd and frame.iloc[i,0]

customer_type.append('即将流失用户')

frame['classification'] = customer_type

customer_type(jd_rfm)

print('不同类型的客户总数:')

print('--------------------')

jd_rfm.groupby(by='classification').size().reset_index(name='客户数')

四、用户分类完整表

由于此数据缺失金额,所以没能进行一个完整的RFM分析,不过具体的思路上面已经阐释清楚了,以下附上一个完整的RFM用户分类表作为实战参考

五、后续

RFM可以根据用户的这三类数据进行分层,但实际中很多其它维度的数据,所以为了更好的实现精细化运营,需要更多的维度参与进来。下一篇我会介绍怎么实现给用户打标签,为用户画像

以下链接可到上一篇文章Wvvi:电商消费者数据分析​zhuanlan.zhihu.com

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值