我是靠谱客的博主 可耐飞鸟,最近开发中收集的这篇文章主要介绍RFM模型的创建及分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

R--- 最近一次购买到现在隔了多少天
F--- 每个各户购买了多少次
M--- 每个客户累计购买金额或平均购买金额
1 数据概览
2 数据清洗
3 维度打分
4 分值计算和客户分层

分为八类客户

[100,101,110,111,11,10,1,0],['新客户','频次深耕客户','消费潜力客户', '重要价值客户','重要价值流失客户','一般客户','高消费唤回客户','流失客户']

【注】:此数据集原无消费金额一列,为了练习模型自己将列item_category当作消费金额练习使用,关注代码即可,请忽略数据本身

# 导入包
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 导入数据,查看数据概览,数据清洗
# 1 类型和缺失值处理
data = pd.read_csv('user.csv')
data.drop(columns='user_geohash',axis=1,inplace=True)
data['date'] = data['time'].apply(lambda a:a.split()[0])
data['hour'] = data['time'].apply(lambda a:a.split()[1])
data['time'] = pd.to_datetime(data['time'])
data['date'] = pd.to_datetime(data['date'])
data['hour'] = data['hour'].astype('int64')
data['week'] = data['date'].dt.weekday
# 2 数据清洗 取所需要的列值
data = data[data['behavior_type']==4]
data = data[['user_id','behavior_type','date','item_category']]
print(data)
求R: 最近一次购买距离现在多长时间
求F:每个用户在这段时间的购买频次
求M:每个用户的平均消费额和总消费额
# 3 求R: 最近一次购买距离现在多长时间
r = data.groupby('user_id')['date'].max().reset_index()
r['R'] = (pd.to_datetime('2015-01-01')-r['date']).dt.days
r = r[['user_id','R']]
print(r)
# 4 求F:每个用户在这段时间的购买频次
f = data.groupby('user_id')['behavior_type'].count().reset_index()
f.rename(columns={'behavior_type':'F'},inplace=True)
# print(f)
# 5 求M:每个用户的平均消费额和总消费额
m_mean = data.groupby('user_id')['item_category'].mean().reset_index()
m_mean.rename(columns={'item_category':'M_mean'},inplace=True)
m_sum = data.groupby('user_id')['item_category'].sum().reset_index()
m_sum.rename(columns={'item_category':'M_sum'},inplace=True)
r表f表m表三表连接通过merge函数  on = user_id
rf = pd.merge(r,f,how='outer',on='user_id')
# print(rf)
rfm = pd.merge(rf,m_mean,on='user_id')

判断r/f/m三个值的范围

print(min(rfm['R']),max(rfm['R']))
print(min(rfm['F']),max(rfm['F']))
print(min(rfm['F']),max(rfm['F']))

对r/f/m三个值进行1-5映射

rfm['r_record'] = pd.cut(rfm['R'],bins=[0,10,20,30,40,50],labels=[5,4,3,2,1],right=False)
rfm['F_record'] = pd.cut(rfm['F'],bins=[0,15,30,45,60,80],labels=[1,2,3,4,5],right=False)
rfm['M_mean_record'] = pd.cut(rfm['M_mean'],bins=[0,3000,6000,9000,12000,15000],labels=[1,2,3,4,5],right=False)
求三个值映射后对应的平均值,判断每个值是否大于平均值,大于记为1,小于记为0
rfm['R是否大于平均值'] = (rfm['r_record'] > rfm['r_record'].mean()) * 1
rfm['F是否大于平均值'] = (rfm['F_record'] > rfm['F_record'].mean()) * 1
rfm['M_mean是否大于平均值'] = (rfm['M_mean_record'] > rfm['M_mean_record'].mean()) * 1

对三个形成0-1的值相加

rfm['RFM'] = rfm['R是否大于平均值']*100 + rfm['F是否大于平均值']*10 + rfm['M_mean是否大于平均值']*1

对合并后的值形成映射

rfm['RFM'].replace([100,101,110,111,11,10,1,0],['新客户','频次深耕客户','消费潜力客户',
       '重要价值客户','重要价值流失客户','一般客户','高消费唤回客户','流失客户'],inplace=True)

绘制图表

不同类型客户的人数对比
不同类型客户的人数占比
不同类型客户累计消费金额
不同类型客户金额占比图
r = rfm['RFM'].value_counts().reset_index().sort_values(by='RFM',ascending=True)
sns.barplot(x=r['index'],y=r['RFM'])
plt.title('不同类型客户的人数对比',fontsize=20)
plt.show()
plt.pie(x=r['RFM'],labels=r['index'],autopct='%0.2f%%')
plt.title('不同类型客户的人数占比',fontsize=20)
plt.show()

M_sum = rfm.groupby('RFM')['M_mean'].sum().reset_index()
M_sum['M_mean'] = M_sum['M_mean'].apply(lambda x: round(x))
M_sum = M_sum.sort_values(by='M_mean',ascending=True)
# print(rfm.info())
plt.barh(y=M_sum['RFM'],width=M_sum['M_mean'])
plt.title('不同类型客户的消费对比',fontsize=20)
plt.show()
explode = [0,0.1,0,0,0,0]
print(M_sum['M_mean'])
plt.pie(x=M_sum['M_mean'],labels=M_sum['RFM'],autopct='%0.2f%%',explode=explode)
plt.title('不同类型客户的消费占比',fontsize=20)
plt.show()

 

最后

以上就是可耐飞鸟为你收集整理的RFM模型的创建及分析的全部内容,希望文章能够帮你解决RFM模型的创建及分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部