热线电话:13121318867

登录
2022-03-04 阅读量: 1023
Python:电商客户价值RFM划分案例(演练代码)

原文出处:https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12281897.0.0.77c92b4abI9m56&postId=286067


代码摘抄:



import pandas as pd

import datetime

import matplotlib.pyplot as plt


获取数据

data=pd.read_excel('./工作/商品销售数据.xlsx')

data.head(10)#查看前十行

数据清洗

#查看数据基本信息

data.info()

#处理空值

data=data.dropna(subset=['用户 ID'])

#查看重复值

data[data.duplicated()]

#删除重复值

data=data.drop_duplicates()

#查看描述性信息

data.describe()

#处理异常值

data=data[data['数量']>0]

data.describe()

数据整理

data.head()


#数据整理

data['金额']=data['数量']*data['价格']

data.head()

pd.to_datetime(data['发货日期'])

today='2012-01-01'

#按照订单号和用户ID进行分组

grouped_data = data.groupby(['订单号', '用户 ID'], as_index=False).agg({'发货日期': 'max', '金额': 'sum'})

grouped_data

grouped_data['时间间隔']=(pd.to_datetime(today)-pd.to_datetime(grouped_data['发货日期'])).dt.days

grouped_data

计算R、F、M值

rfm_data= grouped_data.groupby('用户 ID', as_index=False).agg({'时间间隔': 'min', '订单号': 'count', '金额': 'sum'})

rfm_data.columns=['用户 ID','间隔天数','下单次数','金额']

rfm_data

数据分析


计算R值阈值

#计算R

plt.figure(figsize=(10, 8))

x = rfm_data['间隔天数'].sort_values()

y =rfm_data.index

plt.plot(x, y)

计算用户R评分

# 定义函数按照区间划分 R

def caculate_r(s):

if s <= 100:

return 5

elif s <= 200:

return 4

elif s <= 300:

return 3

elif s <= 400:

return 2

else:

return 1

rfm_data['R评分'] = rfm_data['间隔天数'].agg(caculate_r)

rfm_data

计算F值阈值

#计算F

plt.figure(figsize=[6,6])

x=rfm_data['下单次数'].sort_values()

y=rfm_data.index

plt.plot(x,y)


计算用户F评分

def caculate_f(s):

if s <= 5:

return 1

elif s <= 10:

return 2

elif s <= 15:

return 3

elif s <= 20:

return 4

else:

return 5

rfm_data['F评分'] = rfm_data['下单次数'].agg(caculate_f)

rfm_data


计算M值阈值

#计算m

plt.figure(figsize=[6,6])

x=rfm_data['金额'].sort_values()

y=rfm_data.index

plt.plot(x,y)

计算用户M评分

# 定义函数按照区间划分 M

def caculate_m(s):

if s <= 2000:

return 1

elif s <= 4000:

return 2

elif s <= 6000:

return 3

elif s <= 8000:

return 4

else:

return 5

rfm_data['M评分']=rfm_data['金额'].agg(caculate_m)

rfm_data


计算 R评分、F评分、M评分的平均数


#分别计算RFM的平均分

r_avg = rfm_data['R评分'].mean()

f_avg = rfm_data['F评分'].mean()

m_avg = rfm_data['M评分'].mean()

print('R评分的均值为:{}F评分的均值为{},M评分的均值为{}'.format(r_avg, f_avg, m_avg))

标记用户RFM的高低

# R评分、F评分、M评分 的数据分别与对应的平均数做比较

rfm_data['R评分'] = (rfm_data['R评分'] > r_avg) * 1

rfm_data['F评分'] = (rfm_data['F评分'] > f_avg) * 1

rfm_data['M评分'] = (rfm_data['M评分'] > m_avg) * 1

rfm_data

# 拼接R评分、F评分、M评分

rfm_score = rfm_data['R评分'].astype(str) + rfm_data['F评分'].astype(str) + rfm_data['M评分'].astype(str)

rfm_score

标记用户类型

# 定义字典标记 RFM 评分档对应的用户分类名称

transform_label = {

'111':'重要价值用户',

'101':'重要发展用户',

'011':'重要保持用户',

'001':'重要挽留用户',

'110':'一般价值用户',

'100':'一般发展用户',

'010':'一般保持用户',

'000':'一般挽留用户'

}

# RFM评分替换成具体的客户类型

rfm_data['客户类型']=rfm_score.replace(transform_label)

rfm_data

## 按【客户类型】分组,统计用户的数量

customer_data =rfm_data.groupby('客户类型')['用户 ID'].count()

customer_data

数据展现

# 绘制柱状图

plt.rcParams['font.family']=['SimHei']

plt.figure(figsize=(12, 8))

plt.bar(customer_data.index, customer_data)

plt.xlabel('客户类型', fontsize=12)

plt.ylabel('人数', fontsize=12)

plt.title('不同客户的数量分布', fontsize=16)

# 绘制饼图

plt.figure(figsize=(14, 10))

plt.pie(customer_data, labels=customer_data.index, autopct='%0.1f%%')

plt.title('不同客户占比情况', fontsize=16)

结论和建议

可视化结果表明一般维持用户和流失用户的人数偏多,分别占比35.8%和38.3%,重要价值用户占比14%,其余各类型用户分别占比不到5%


对于一般维持用户较多(消费频率高,但最近未消费,消费金额也少)的情况,问题可能在于一般维持用户后续的复购转化不足。可以多通过短信、平台网站等渠道,在一般维持用户购买后的一段时间内可以领取复购券等策略,将这类用户转化为更高价值的用户类型。


对于流失用户较多的情况,问题可能在于平台的产品竞争力或者服务不足。可以多对比竞品公司的产品,对自身的产品进行提升。也可以发掘用户兴趣,使用推送等低成本手段进行挽留同时,可以采取赠送优惠券的策略,并收集用户对平台产品以及服务的评价。


对于重要价值用户,他们是平台GMV贡献最多的一部分用户。平台可以投入更多的资源提供VIP或个性化服务,比如:推荐用户办理VIP并提供一对一客服咨询,创建VIP社群定时发放福利,定期举办会员日等手段,提高这类用户的忠诚度







60.5424
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子