python-RFM模型

RFM模型:根据客户消费行为的三个关键指标(R-最近一次的购物时间,F-一段时间内客户的购物次数,M-客户消费总金额)来将客户分层并针对不同层级的客户进行不同的营销策略;

此次将客户分成8类(按R、F、M三个值的平均值作为阈值来进行划分),整理成函数如下:

#函数:该函数将客户按RFM方法分成八类,且显示对应的营销策略(分类的阈值和等级以及对于的营销策略可以按需进行更改)
def rfm_strategy(r,f,m,recently,frenquency,money):
    if r>=recently:
        if f >= frenquency:
            if m>=money:
                rfm="重要价值客户"
                strategy="提高满意度,增加留存"
            else:
                rfm="一般价值客户"
                strategy="引导其消费"
        else:
            if m >= money:
                rfm="重要保持客户"
                strategy="通过活动提高购买频率"
            else:
                rfm="一般保持客户"
                strategy="利用优惠吸引客户消费"
    else:
        if f >= frenquency:
            if m>=money:
                rfm="重要发展客户"
                strategy="触达客户,防止客户流失"
            else:
                rfm="一般发展客户"
                strategy="较少关注"
        else:
            if m >= money:
                rfm="重要挽留客户"
                strategy="了解用户需求想办法挽留"
            else:
                rfm="一般挽留客户"
                strategy="较少关注"
    return rfm,strategy

接下来,将数据导入,计算出对应的数值,这里导入的数据是一张完整订单明细,一个客户会有多次消费记录,在这里我们需要对数据进行汇总和聚合操作,这里使用pivot_table方法来进行数据整理,这里需要留意,数据在进行此操作之前需要检查是否有脏数据(重复记录、重要值缺失、异常值),如有需先进行数据清洗

#导入数据,将订单日期转换成与目前日期相差的月份;
# 这里使用了pd.to_datetime方法将日期格式转化成标准日期格式;
# 最后使用relativedelta计算两个日期之间的月份差值;
data=pd.read_csv(r"D:\示例 - 超市.csv")
data['当前日期']=pd.Timestamp(date.today())
data['订单日期']=pd.to_datetime(data['订单日期'])
data['订单日期']=[relativedelta(dt1=data['当前日期'][i],dt2=data['订单日期'][i]).months for i in range(0,len(data['订单日期']))]
#使用透视表功能,统计每个客户的最近一次购买日与目前日期相差的月份、一段时间内的购买金额、一段时间内的购买频次;
#并计算出R、F、M的均值
result=pd.pivot_table(data=data[['客户名称','订单 Id','订单日期','销售额']],index=['客户名称'],\
                      values=['订单 Id','订单日期','销售额'],aggfunc={'订单 Id':np.size,'订单日期':np.min,'销售额':np.sum})
recently=result['订单日期'].mean()
frenquency=result['订单 Id'].mean()
money=result['销售额'].mean()
result=pd.DataFrame(data=result).reset_index()

这里已经将关键数值计算出来了,接下来可以使用我们之前写的函数来给客户加分类标签

#使用rfm_strategy函数计算每个客户对应的分类和策略
result[['标记','策略']]=[rfm_strategy(result['订单日期'][i],result['订单 Id'][i],result['销售额'][i],recently,frenquency,money)\
                     for i in range(0,len(result['订单日期']))]

接下来我们可以选择将数据导出(使用pd.to_csv方法),或者直接可视化看下客户分类的一个情况

#对分类的客户数量进行统计
result_data=pd.pivot_table(data=result,index=['标记'],values=['订单日期'],aggfunc='size')
result_data=pd.DataFrame(data=result_data).reset_index()
#对客户分类情况进行可视化
sns.set_style({'font.sans-serif':'Microsoft YaHei'})
plt.rcParams['font.sans-serif']=['SimHei']
plt.figure(figsize=(9,9))
x=range(8)
y1=result_data[0]
plt.title("RFM客户分类情况")
plt.bar(x, y1, tick_label=result_data['标记'], width=0.5,align='center')
ax=plt.gca()
for labels in ax.xaxis.get_ticklabels():
    labels.set_rotation(45)
plt.show()
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值