SQL 使用CASE WHEN实现RFM参数—F(Frequency)

SQL 使用CASE WHEN实现RFM参数—F(Frequency)

前言:

博主目前从事的是BA数据分析师、在实际工作中需要问其他部门的同事提供SQL需求,在最近的工作中大量用到SQL搭建RFM模型的案例,其中分别涉及到参数R,F和M的参数实现。因此,以我实际工作遇到的问题进行总结。

参数F的概念:

F值:客户在最近一段时间内交易次数。(Frequency)
基于交易频率次数,交易频率越高,所对应的客户价值就越高。反映客户交易活跃度。

使用SQL实现F值
案例如下:
2022年5月1日,某电商平台进行了一次促销活动,需要查看在历史所有时间段顾客购买频次情况,即不同F的人数分布。F值如下:
1、F1
2、F2+

1、创建表格(以临时表格为例)

在这里插入图片描述

2、查看原始表格

在这里插入图片描述

3、查看每个顾客对应的购买频次Frequency

在这里插入图片描述
注意:查看购买频次可以对具体的下单时间进行COUNT聚合。上述创建的临时表格在同意而顾客在date上可能存在重复。但在实际的数据库中,每笔订单都会有具体的时间区分或者通过订单的代码进行区分,具体还要视情况而定。因此,这里大家可以稍微思考一下。

4、按照要求对Fre进行分组(F1,F2+)

在这里插入图片描述
注:在CRM系统中,我们较关注一次客和复购客的购买情况,因此将Fre分成1和2+即可。其次对两个分组的人进行分组聚合,查看一次客和复购客对应的顾客数量。
完整代码如下:

SELECT * FROM r;

DROP TABLE IF EXISTS temp_LD;
CREATE TEMPORARY TABLE temp_LD AS
SELECT cus,COUNT(DISTINCT date) AS Fre FROM r
GROUP BY cus;

SELECT * FROM temp_LD;

DROP TABLE IF EXISTS temp_Fre;
CREATE TEMPORARY TABLE temp_Fre AS
SELECT Fre,CASE WHEN FRE=1 THEN '1' WHEN FRE>1 THEN '2+' END AS Fre_Group 
FROM temp_LD;

SELECT Fre_Group,COUNT(DISTINCT Fre) AS cus_num FROM temp_Fre
GROUP BY Fre_Group;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
RFM模型是一种常用的客户分析模型,用于评估客户的价值和重要性。下面是一个简单的Python实现RFM模型的示例: ```python import pandas as pd # 读取订单数据 df = pd.read_excel('sales.xlsx') # 计算最近购买日期、购买频率和消费金额 rfm_data = df.groupby('会员ID').agg({ '最近购买日期': lambda x: (df['最近购买日期'].max() - x.max()).days, '购买频率': 'count', '消费金额': 'sum' }).rename(columns={ '最近购买日期': 'R', '购买频率': 'F', '消费金额': 'M' }) # 对R、F、M进行分段打分 rfm_data['R_score'] = pd.cut(rfm_data['R'], bins=[-float('inf'), 30, 60, 90, float('inf')], labels=[4, 3, 2, 1], right=False) rfm_data['F_score'] = pd.cut(rfm_data['F'], bins=[-float('inf'), 1, 2, 3, float('inf')], labels=[1, 2, 3, 4], right=False) rfm_data['M_score'] = pd.cut(rfm_data['M'], bins=[-float('inf'), 1000, 2000, 3000, float('inf')], labels=[1, 2, 3, 4], right=False) # 计算RFM得分 rfm_data['RFM_score'] = rfm_data['R_score'].astype(str) + rfm_data['F_score'].astype(str) + rfm_data['M_score'].astype(str) # 打印RFM得分数据 print(rfm_data) # 将RFM得分数据写入Excel文件 rfm_data.to_excel('rfm_scores.xlsx') ``` 上述代码假设你的订单数据保存在名为'sales.xlsx'的Excel文件中,并且包含'会员ID'、'最近购买日期'、'购买频率'和'消费金额'等列。代码首先计算最近购买日期(R)、购买频率(F)和消费金额(M),然后对这三个指标进行分段打分,最后计算RFM得分并存储在'RFM_score'列中。打印RFM得分数据并将其写入名为'rfm_scores.xlsx'的Excel文件中。 请根据你的实际数据和需求修改代码中的列名、分段打分方式和文件路径等参数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜的乄第七章

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值