抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

使用Mysql建立RFM模型,由于图片使用国外CDN,首次打开本页面会有加载时间

使用Mysql对海外电子产品用户购买数据建立RFM模型

博客挂载于Github,图片挂载于SMMS图床,首次打开请静候一分钟时间加载
使用的2020年海外电子产品用户购买数据集来源于kaggle社区

1.观测数据

观测数据发现,用户id、下单金额字段出现了大量的null值,且数据集中存在大量下单时间为1970-01-01 00:33:40的错误数据
观测数据
为了在下面步骤更加方便,使用create table语句建表并清洗数据

代码如下

-- 查看数据集的下单时间范围
SELECT
MAX(`下单时间`)
,MIN(`下单时间`)
FROM rfm_data
-- 返回2020-01-05到2020-11-21,则R的时间间隔计算基准为11-22

-- 查看数据集各行行数
SELECT COUNT(*)
,COUNT(`下单金额`)
,COUNT(`下单时间`)
,COUNT(`用户id`)
FROM rfm_data
-- 返回结果一致

-- 通过sum嵌套ISNULL函数对三个字断的null值进行计数
SELECT
SUM(ISNULL(`下单时间`))
,SUM(ISNULL(`下单金额`))
,SUM(ISNULL(`用户id`))
FROM rfm_data
-- 返回结果都是0

-- 统计用户人数并根据二八定律区分高分用户
SELECT
COUNT(DISTINCT `用户id`
,round(COUNT(DISTINCT `用户id`)*0.2,0) 用户数
FROM rfm_data
-- 返回用户数为233576,高分用户为用户中前46715位

2.建立RFM模型


2.1建立分类阈值,以便后续对用户行为评分

代码如下

-- 使用with as 临时表方法
WITH a AS
(
    select 
    `用户id`
    ,TIMESTAMPDIFF(day,max(`下单时间`),'2020-11-22') R
    ,COUNT(*)F
    ,ROUND(SUM(`下单金额`),2)M
    from rfm_sql.rfm_data
    group by 1
)
SELECT
R  
FROM a
ORDER BY 1 ASC # 其中在计算F与M的分类阈值时使用DESC降序
LIMIT 46715,1

-- 最终计算得出,R的分类阈值为27,F为3,M为732.42

2.2根据返回的分类阈值,对用户评分并建立RFM模型

建表代码如下

-- 使用create table as 嵌套with as方法建表,建立RFM模型
CREATE TABLE rfm as
-- 建立临时表a为计算各用户R、F、M三个维度的值
WITH a AS
(
    select 
    `用户id`
    ,TIMESTAMPDIFF(day,max(`下单时间`),'2020-11-22') R
    ,COUNT(*)F
    ,ROUND(SUM(`下单金额`),2)M
    from rfm_sql.rfm_data
    group by 1
)
-- 建立临时表b为用户的R、F、M三个维度进行评分
,b as 
(
    select `用户id`
    ,case when R <=27 then '高' else '低' end R
    ,case when F >= 3 then '高' else '低' end  F
    ,case when M >= 732.42 then  '高' else '低' end M
    from a
)
-- 建立临时表c,为最终的RFM模型,至此即可为业务方提供数据支持
,c AS
(
    select *, 
    (case when M = '高' then '重要' else '一般' end ) as 重要度,
    (case when F = '高' and R = '高' then '价值客户'
    when F = '高' and R = '低' then '唤回客户'
    when F = '低' and R = '高' then '发展客户'
    when F = '低' and R = '低' then '挽留客户' end) as 类型
    from b
)
SELECT * FROM c

3.输出运营策略

根据返回的RFM模型结果,以数据支持业务方输出精细化的运营策略

评论