如何利用SQL创建RFM用户分析模型

news2025/6/20 7:06:46

   RFM用户分析模型究竟是什么?在之前的博客已经介绍了它的意义以及如何在现有的数据的情况下,利用Pandas创建分析模型,这里不再重复,详细可以参考我博客https://blog.csdn.net/weixin_48591974/article/details/116192534



   这一期将详细介绍如何利用SQL直接获取所需的数据去创建RFM用户分析模型。SQL ---- Structured Query Language(结构化查询语言 ),它是一种专门用来与数据库沟通的语言,提供了很多从数据库中高效地读写数据、查询数据的方法。常用的DBMS(数据库管理软件) 有 MySQL、Access、SQLite、SQL SERVER、Oracle 等等。



Recency:最近一次消费,即上一次交易距今多少天,反应了客户是否流失;


Frequency:消费频率,一段时间内客户的消费频率,反应了客户的消费活跃度;


Monetary:消费金额,一段时间内客户消费总金额,反应了客户价值


根据 RFM 这 3个 Dimension,可以分为8种客户类型,如下图:



在这里插入图片描述



   以下将简单介绍3个指标值的计算方法:



   F 值的计算:例如要计算 子表 orders 里 user_id 为 8002011的值。



在这里插入图片描述



   统计数据行数,我们可以使用 count() 函数完成,最后得出 F值为 3



SELECT  count(*)    AS F
FROM    orders
WHERE   user_id = 8002011;


   M 值的计算: 使用 sum() 函数将计算字段 price * amount 所有行加起来就得出 user_id 8002011 总消费金额为 13000



SELECT  sum(price * amount) AS M
FROM    orders
WHERE   user_id = 8002011;


   R 值的计算:在orders表中,可见时间是以 Integer 类型存在,也就是以格兰威治秒数(Unix时间戳)类型存在,指的是从1970年1月1日开始计算的秒数。关于时间戳和日期转换方法,可以运用 python的 datetime module 去实现转换。例如今天(2024-01-12)所对应的时间戳经过转换为 1704988800(秒),因此可以用这数值减去最近一次消费的日期,最后转换成天数,就知道 user_id 8002011最近一次消费距离今天为多少天。



SELECT (1704988800 - max(pay_time)) / (24 * 60 * 60) AS R,
FROM    orders
WHERE   user_id = 8002011;


   有了以上对3个指标的计算方法,以下就继续介绍各种方法进行分析。假设有如下总的数据表(更多数据行省略…)



在这里插入图片描述



   首先通过GROUP BY 子句,将原数据进行 分组,再通过聚合函数把字段组合相同的行划分为同一组。具体语法如下:



SELECT user_id  AS 用户ID,
       user_name AS 用户昵称,
       (1704988800 - max(pay_time)) / (24 * 60 * 60) AS R,
       count(user_id) AS F,  
       sum(price * amount) AS M
FROM   orders
GROUP BY user_id;


   这样就可以把每位用户的 RFM 值都计算出来了。



在这里插入图片描述



   刚才根据 R、F、M 维度表现的高与低,把用户分划分为 8 类,我们可以选择中位数作为区分高、低的依据。



   数据表 orders 共包含 21名用户数据。所以如果我们想获取中位数,查询语句需要写成 LIMIT 10, 1 由于21的中位数为 11, 因此 LIMIT 语句的第1个参数为 10,第2个参数为返回1行的结果,那就是中位数的值。



   获取 R 的中位数: 结果为32



SELECT (1704988800 - max(pay_time)) / (24 * 60 * 60) AS R
FROM   orders
GROUP BY user_id
ORDER BY R
LIMIT 10,1;


   获取 F 的中位数: 结果为3



SELECT count(user_id) AS F
FROM   orders
GROUP BY user_id
ORDER BY F
LIMIT 10,1;


   获取 M 的中位数: 结果为 36500



SELECT sum(price * amount) AS M
FROM   orders
GROUP BY user_id
ORDER BY M
LIMIT 10,1;


   接着,以如何获得 “新用户” 和 "流失用户"为例去继续编写语句分析。以上已经得出 R、F、M 的中位数。由于R(最近一次消费)的值越小,说明用户越活跃,因此低于 32 的被划分为 R 水平 高,反之为 R 水平 低。同理,我们可以得出 F 和 M 的划分方法, F:低于 3 为水平 低,反之为 高;M:低于 36500 为水平 低,反之为 高。



   HAVING 子句在用法上和 WHERE 子句非常相似,它们都能够根据指定条件筛选数据,也可以使用我们在 SELECT 子句中定义的字段别名。不同之处在于,WHERE 子句作用于原数据表,用来筛选 行;而 HAVING 子句作用于分组结果,用来筛选 分组。所以在编写语句时,必须区分好。



SELECT user_id  AS 用户ID,
       user_name AS 用户昵称,
       (1704988800 - max(pay_time)) / (24 * 60 * 60) AS R,
       count(user_id) AS F,  
       sum(price * amount) AS M
FROM   orders
GROUP BY user_id
HAVING R <=32
   AND F < 3
   AND M < 36500;


   得出"新用户" 数据表:



在这里插入图片描述



SELECT user_id  AS 用户ID,
       user_name AS 用户昵称,
       (1704988800 - max(pay_time)) / (24 * 60 * 60) AS R,
       count(user_id) AS F,  
       sum(price * amount) AS M
FROM   orders
GROUP BY user_id
HAVING R > 32
   AND F < 3
   AND M < 36500;


   得出"流失用户" 数据表:



在这里插入图片描述



   同理,其它6个维度的客户分析也是同样编写相对应的条件语句进行筛选。对于在众多的用户中如何可以快速、科学地分类,尤其前5个维度,对于每个商业行业有着重要的作用,也是掌握企业命运的风向标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1388797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次用Qt开发 “启动器” 的经历

项目背景 背景 工具多&#xff0c;需要频繁切换。Windows环境&#xff0c;因为日常用到的软件较多&#xff0c;大致如下 浏览器涉及3款 FirefoxChromeEdge 开发的编译器及IDE涉及 Visual StudioVisual Studio CodePycharmSublime Text 设备涉及 DeskTopMackbook AirNoteBook…

【linux】查看Debian应用程序图标对应的可执行命令

在Debian系统中&#xff0c;应用程序图标通常与.desktop文件关联。您可以通过查看.desktop文件来找到对应的可执行命令。这些文件通常位于/usr/share/applications/或~/.local/share/applications/目录下。这里是如何查找的步骤&#xff1a; 1. 打开文件管理器或终端。 2. 导…

linux下485通信调试记录

1、使用linux下使用串口调试助手 linux下可以安装并使用下述串口调试工具进行串口测试&#xff1a; 1.1、cutecom cutecom是linux下常用的图形化串口调试软件&#xff0c;通过以下命令安装并打开&#xff1a; sudo apt-get install cutecom sudo cutecom显示如下&#xff1…

DAY01_Spring—Spring框架介绍IOCSpring工厂模式

目录 1 什么是框架2 Spring框架2.1 Spring介绍2.2 MVC模型说明2.3 IOC思想2.3.1 问题说明2.3.2 IOC说明 3 Spring IOC具体实现3.1 环境准备3.1.1 关于JDK说明3.1.2 检查JDK环境配置 3.2 创建项目3.3 关于Maven 命令3.3.1 install 命令3.3.2 clean 命令 3.4 添加jar包文件3.4.1 …

经典网络 循环神经网络(一) | RNN结构解析,代码实现

文章目录 1 提出背景2 RNN2.1 RNN结构2.2 RNN代码实现2.3 代码简洁实现 1 提出背景 为什么要引入RNN呢&#xff1f; 非常简单&#xff0c;之前我们的卷积神经网络CNN&#xff0c;全连接神经网络等都是单个神经元计算 但在序列模型中&#xff0c;前一个神经元往往对后面一个神…

Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/135620590 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

36V/1.6A两通道H桥驱动芯片-SS8812T可替代DRV8812

由工采网代理的SS8812T是一款双通道H桥电流控制电机驱动器&#xff1b;每个 H 桥可提供输出电流 1.6A&#xff0c;可驱动两个刷式直流电机&#xff0c;或者一个双极步进电机&#xff0c;或者螺线管或者其它感性负载&#xff1b;双极步进电机可以以整步、2 细分、4 细分运行&…

旧路由重置新路由设置新路由设置教程|适用于自动获取IP模式

前言 如果你的光猫是直接拨号&#xff08;路由模式&#xff09;的&#xff0c;就可以按照本教程进行路由重置或者更换新路由器。 本文章适合电脑小白&#xff0c;请注意每一步哦&#xff01; 注意事项 开始之前需要确认光猫是桥接模式还是路由模式。如果光猫是路由模式&…

❤ HbuildX使用以及快捷键

❤ HbuildX使用以及快捷键 一、HbuildX使用 HbuildX左侧项目侧边栏 点击视图 > 显示项目左侧即可 二、HBuilder X 快捷键 左移 Shift tab 右移 tab 查找 全局文件搜索:CtrlP 本文档内查找字符串:ctrlf 目录内查找字符串:ctrlaltf 替换:ctrlh 查找下一个字符串:f3 查…

表的增删改查CURD(一)

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;MySql&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 新增&#xff08;Create&#xff09; 全列插入 指定列…

SDK游戏盾是什么?,sdk游戏盾有什么作用

在现今的游戏市场&#xff0c;游戏保护成为了每个游戏开发者都不能忽视的重要环节。恶意破解、作弊和盗版等问题严重影响了游戏的安全性和商业价值。而如何保护自己的游戏免受这些威胁&#xff0c;已经成为游戏开发者们面临的重大挑战。好在SDK游戏盾&#xff0c;它如同保护游戏…

家用小型洗衣机哪款性价比高?好用的内衣洗衣机推荐

现在大多数的上班族&#xff0c;面临的都是早九晚六的工作&#xff0c;而且工作完下班回家还是面对各种各样的家务&#xff0c;特别是清洗需要换洗的洗衣&#xff0c;属实是有点辛苦了。可能很多人为了方便&#xff0c;每次洗衣服的都是把一堆衣服直接丢进洗衣机&#xff0c;直…

Ansible Filter滤波器的使用(一)

一、【说在前面】 Ansible Filter一般被称为滤波器或者叫过滤器。 这个东西初次听到以为是什么科学计算的东西&#xff0c;但是想来ansible不太可能有什么滤波操作&#xff0c;所以这个东西本质是一个数值筛选器&#xff0c;内置函数&#xff0c;本质是一个为了做区别化的工具…

光学 | 联合Ansys Zemax及Lumerical应对AR/VR市场挑战

当前的增强现实和虚拟现实&#xff08;AR/VR&#xff09;市场涵盖了广泛的应用趋势&#xff0c;设计人员和各企业在努力寻找非传统解决方案&#xff0c;以满足主流消费者不断变化的需求。 对于AR头戴设备等可穿戴解决方案&#xff0c;设计思路通常源于对小巧轻量化系统的需求&a…

大数据传输慢的真正原因与解决方案

随着企业数据不断增长&#xff0c;大数据传输已成为一项至关重要的任务。然而&#xff0c;许多企业在处理大数据传输时频繁遭遇传输速度慢的问题。本文将深入探讨大数据传输速度慢的根本原因&#xff0c;并提供一些切实有效的解决方案。 大数据传输在企业中的重要性不言而喻&am…

算法竞赛备赛进阶之数位DP训练

数位DP的思想就是对每一位进行DP&#xff0c;计算时记忆化每一位可以有的状态&#xff0c;其作用是减少运算时间&#xff0c;避免重复计算。 数位DP是一种计数用的DP&#xff0c;一般就是要统计一个区间[A,B]内满足一些条件数的个数。 以1e9甚至1e18、1e100的问题为例&#x…

Docker 容器之间的互相通信

Docker容器之间的互相通信 步骤一&#xff1a;创建自定义网络 首先&#xff0c;我们需要创建一个自定义网络&#xff0c;以便容器可以连接到这个网络上&#xff0c;从而实现互相通信。在命令行中执行以下命令&#xff1a; # 创建 docker network create ddz # 查看 docker n…

洛谷 P1523 旅行商简化版【线性dp+npc问题简化版】

原题链接&#xff1a;https://www.luogu.com.cn/problem/P1523 题目背景 欧几里德旅行商(Euclidean Traveling Salesman)问题也就是货郎担问题一直是困扰全世界数学家、计算机学家的著名问题。现有的算法都没有办法在确定型机器上在多项式时间内求出最优解&#xff0c;但是有…

2024 年企业要增强反脆弱性,IT 能够做什么?

新冠疫情被称为黑天鹅事件&#xff0c;而“黑天鹅”这个词的创造者纳西姆尼古拉斯塔勒布在另一本书《反脆弱&#xff1a;从不确定性中获益》&#xff08; CSDN博主读书笔记《反脆弱&#xff1a;从不确定性中获益》 &#xff09;中&#xff0c;则给出了面对随时可能出现的黑天鹅…

玖章算术NineData通过阿里云PolarDB产品生态集成认证

近日&#xff0c;玖章算术旗下NineData 云原生智能数据管理平台 (V1.0&#xff09;正式通过了阿里云PolarDB PostgreSQL版 (V11)产品集成认证测试&#xff0c;并获得阿里云颁发的产品生态集成认证。 测试结果表明&#xff0c;玖章算术旗下NineData数据管理平台 (V1.0&#xff…