RFM模型指标构建——SQL

本篇文章主要是实现用SQL语句构建RFM模型指标,为文章‘基于RFM模型的用户价值分析——Python&Tableau’第六部分的SQL版本。

文章链接:

miss:基于RFM模型的用户价值分析——Python&Tableau9 赞同 · 0 评论文章正在上传…重新上传取消

将文章‘基于RFM模型的用户价值分析——Python&Tableau’第五部分清洗后的数据导出:

将数据导以varchar格式导入Navicat:

查看字段数据类型:

#查看数据字段类型
DESC sheet1;

将f1、消费金额字段类型修改为整型,将交易日期字段类型修改为日期型;

#修改表中字段类型
ALTER TABLE sheet1 MODIFY COLUMN f1 INT;
ALTER TABLE sheet1 MODIFY COLUMN 交易日期 date;
ALTER TABLE sheet1 MODIFY COLUMN 消费金额 INT;

查看修改结果:

#查看修改后数据字段类型
DESC sheet1;

构建R指标:

#构建R指标
#查询数据集中最大日期
select max(交易日期)
FROM sheet1;

#创建视图r,将2015-03-17设置为‘今天’,按顾客id分组,找出每个顾客的最近一次购买日期,计算‘今天’与最
#近购买日期之间的时间差
CREATE OR REPLACE VIEW r
AS
SELECT 顾客id,DATEDIFF('2015-03-17',MAX(交易日期)) R
FROM sheet1
GROUP BY 顾客id;
#查看视图r
SELECT * FROM r;

构建F指标:

#创建视图f,把一个用户在一天内的多次消费行为,从整体上看作一次,按顾客id分组统计交易次数。
CREATE OR REPLACE VIEW f
as
SELECT 顾客id,count(DISTINCT 交易日期) F
FROM sheet1
GROUP BY 顾客id;
#查看视图f
SELECT * FROM f;

构建M指标:

#创建视图m,以顾客id分组,对消费金额求和
CREATE OR REPLACE VIEW m
AS
SELECT 顾客id,SUM(消费金额) M
FROM sheet1
GROUP BY 顾客id;
#查看视图m
SELECT * FROM m;

将RFM指标联合:

#创建视图RFM,联合查询视图r、f、m
CREATE OR REPLACE VIEW RFM
AS
SELECT r.`顾客id`,R,F,M
FROM r
LEFT JOIN f
ON r.`顾客id`=f.`顾客id`
LEFT JOIN m
ON f.`顾客id`=m.`顾客id`;
#查看视图RFM
SELECT * FROM RFM;

确认打分R、F、M各指标打分依据并进行打分:

#创建视图df,确认打分依据并进行打分。最近一次交易时间间隔R,设定30天为一个跨度进行打分;F和M按数据
#集RFMX的分位数来打分。
CREATE OR REPLACE VIEW df
as
SELECT *,
(
CASE 
WHEN R<30 THEN 5
WHEN R<60 THEN 4
WHEN R<90 THEN 3
WHEN R<120 THEN 2
ELSE 1
END) R_s,
(
CASE 
WHEN F<13 THEN 1
WHEN F<16 THEN 2
WHEN F<17 THEN 3
WHEN F<21 THEN 4
ELSE 5
END) F_s,
(CASE 
WHEN M<813 THEN 1
WHEN M<1204 THEN 2
WHEN M<1257 THEN 3
WHEN M<1545 THEN 4
ELSE 5
END) M_s
FROM RFM;
#查看视图df
SELECT * FROM df;

判断每个顾客的RFM与R、F、M分值并与指标平均值进行比较,大于平均值记为1,小于平均值记为0:

#创建视图fl,判断每个顾客的RFM与R、F、M分值并与平均值进行比较,大于平均值记为1,小于平均值记为0。
CREATE OR REPLACE VIEW fl
AS
SELECT *,IF(R_S>(SELECT avg(R_S) FROM df),1,0) R是否大于均值,IF(F_S>(SELECT avg(F_S) FROM df
),1,0) F是否大于均值,IF(M_S>(SELECT avg(M_S) FROM df),1,0) M是否大于均值
FROM df;
#查看视图fl
SELECT * FROM fl;

添加顾客数值辅助列:

#创建视图gksz,添加顾客数值辅助列
CREATE OR REPLACE VIEW gksz
AS
SELECT *,CONCAT(R是否大于均值,F是否大于均值,M是否大于均值) 顾客数值
FROM fl;
#查看视图gksz
SELECT * FROM gksz;

定义人群标签并应用:

CREATE OR REPLACE VIEW mx
AS
SELECT *,
(CASE 顾客数值
	WHEN '111' THEN '重要价值客户'
	WHEN '110' THEN '消费潜力客户'
	WHEN '101' THEN '频次深耕客户'
	WHEN '100' THEN '新客户'
	WHEN '011' THEN '重要价值流失预警客户'
	WHEN '010' THEN '一般客户'
	WHEN '001' THEN '高消费唤回客户'
	ELSE '流失客户'
END) 顾客类型
FROM gksz;
#查看视图mx
SELECT * FROM mx;

建模完成。

### 石榴姐 SQL 进阶 实战 技巧 专栏介绍 #### 背景与目标 该专栏由莫叫石榴姐撰写,专注于提升读者在实际项目中应用SQL的能力。通过一系列深入浅出的文章,帮助开发者掌握复杂的查询优化、数据分析以及高级功能的应用。 #### 主要内容概览 ##### 数据库性能调优案例分享 通过对具体业务场景下的数据库操作进行剖析,讲解如何编写高效的SQL语句以提高系统响应速度和资源利用率[^1]。 ##### 复杂查询构建方法论 介绍了多种复杂查询的设计思路和技术手段,包括但不限于窗口函数(Window Functions)、CTE(Common Table Expressions)等现代SQL特性,使学习者能够应对更为棘手的数据处理需求。 ##### 特定领域问题解决方案 针对不同行业的特殊要求提供了针对性强的技术方案,例如金融行业中的交易流水分析、电商网站的商品推荐算法实现等方面均有所涉猎。 ##### 高级统计学概念的实际运用 探讨了诸如线性回归置信区间的计算方式,在Oracle环境中可通过`REGR_SLOPE()`和`REGR_INTERCEPT()`函数轻松获取模型参数;进一步讨论了标准误的求解过程及其意义所在[^2]。 ##### 客户行为模式挖掘工具——RFM模型解析 阐述了基于最近一次消费(Recency),频率(Frequency),金额(Monetary Value)三个维度评估顾客价值的方法,并给出了具体的SQL脚本用于执行相应的计算逻辑[^3]。 ##### 日常办公自动化实例——员工考勤管理系统设计 围绕企业内部常见的人员签到记录管理展开论述,明确了有效打卡判定规则并给出了一套完整的SQL代码片段来满足这一应用场景的需求[^4]。 ```sql WITH first_punch AS ( SELECT emp_id, MIN(punch_time) OVER (PARTITION BY DATE_TRUNC('day', punch_time)) as morning_check_in FROM attendance_records ) SELECT DISTINCT ON (emp_id, date_trunc('day', morning_check_in)) emp_id, to_char(morning_check_in,'YYYY-MM-DD HH24:MI') "Morning Check In Time" FROM first_punch WHERE EXTRACT(HOUR FROM morning_check_in) BETWEEN 8 AND 9; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值