「MySQL」电商“人货场”指标体系
本文你将学到:
- 如何搭建电商“人货场”指标体系
- MySQL:留存率分析
- MySQL:RFM模型分析
- MySQL:用户行为路径分析
细心的同学可能会发现,这个符号的「标题」都是实战项目,因为学习的目的不是学习本身,而是为了解决实际问题。本文通过案例来讲述MySQL在公司里是如何应用的。
本文适用于有一定MySQL基础,想进阶练习的同学。(真的都是干货,请大家多多练习) 思维导图附在文章末尾,配合文章一起使用效果更佳。
一、项目背景
电商行业从早些年的粗放式经营,逐步转化为精细化运营。随着平台数据量的不断增加,通过数据分析挖掘消费者的潜在需求、消费偏好成为平台运营过程中的重要环节。
本项目目的如下:
- 探索用户行为规律,寻找高价值用户
- 分析商品特征,寻找高贡献商品
- 分析产品功能,优化产品路径
二、使用“人货场”拆解方式建立指标体系
「人」是整个运营的核心,所有举动都围绕着怎么让更多的人有购买行为,且买的更多买的更贵。
「货」对应着供给,涉及到了商品分层,哪些是红海,哪些是蓝海,如何进行动态调整。
「场」就是消费者在什么场景下,以什么样的方式接触到了这个商品。(哇这句话太精彩了)
建立指标体系如下:
人货场对应的指标(部分)
三、问题确认
1、基于RFM模型找出核心付费用户群,对这部分用户进行精准营销。「人」
2、商品分析:找出热销商品,研究热销商品特点。「货」
3、基于漏斗模型的用户购买流程各环节分析指标,确定各环节的转化率,便于找到需要改进的环节。「场」
四、准备数据
CREATE TABLE temp_trade(
user_id int(9) COMMENT '⽤户ID',
item_id int(9) COMMENT '商品ID',
behavior_type int(1) COMMENT '⽤户⾏为类型(1-曝光;2-购买;3-加⼊购物⻋;4-加⼊收藏夹。)',
user_geohash varchar(14) COMMENT '地理位置',
item_category int(5) COMMENT '品类ID',
date_time datetime COMMENT '用户行为发生时间',
dates date COMMENT '用户行为发生日期'
);
从navicat导入以下数据源:
temp_trade数据源:https://gitee.com/hu-weiqing/datasource/blob/master/temp_trade.xlsx
数据源前10条展示如下:
五、SQL实现
1、用户指标体系
1.1 基础数据:统计每日PV、UV、PV/UV
-- UV:统计distinct user_id数量
-- PV:统计behavior_type=1的记录数SELECT
a.dates,
count(distinct a.user_id) as 'UV',
count(if(a.behavior_type=1,user_id,null)) as 'PV',
count(if(a.behavior_type=1,user_id,null)) / count(distinct a.user_id) as 'PV/UV'
FROM temp_trade a
GROUP BY a.dates ;
1.2 统计留存率⭐️⭐️⭐️
# 不得不说,我代码写得实在太漂亮了,还有注释,绝了绝了,人美心善-- 第三步:把下面这一大坨代码用with as封装成一个临时表(要和第四步的select配合查询)
WITH r AS (-- 第二步:把每天来过的用户在接下来的第1,2,3,7,15,30天内下过单的求出来
SELECT
a.dates,
count(distinct a.user_id) as uv,
count(distinct if(datediff(b.dates,a.dates) = 1,b.user_id,null)) as remain1,
count(distinct if(datediff(b.dates,a.dates) = 2,b.user_id,null)) as remain2,
count(distinct if(datediff(b.dates,a.dates) = 3,b.user_id,null)) as remain3,
count(distinct if(datediff(b.dates,a.dates) = 7,b.user_id,null)) as remain7,
count(distinct if(datediff(b.dates,a.dates) = 15,b.user_id,null)) as remain15,
count(distinct if(datediff(b.dates,a.dates) = 30,b.user_id,null)) as remain30
FROM
(
-- 第一步:求出每天来的用户在之后日期的访问数据
SELECT a.user_id,a.dates FROM temp_trade a GROUP BY a.user_id,a.dates) a
LEFT JOIN (SELECT a.user_id,a.dates FROM temp_trade a GROUP BY a.user_id,a.dates) b on a.user_id = b.user_id
# 取日期之后的数据
WHERE b.dates >= a.dates
GROUP BY a.dates
)-- 第四步:查询每日uv和第1,2,3,7,15,30天的留存率
SELECT
r.dates,
r.uv,
concat(round(100* r.remain1 / r.uv ,2),'%') as 'day1_%',
concat(round(100* r.remain2 / r.uv ,2),'%') as 'day2_%',
concat(round(100* r.remain3 / r.uv ,2),'%') as 'day3_%',
concat(round(100* r.remain7 / r.uv ,2),'%') as 'day7_%',
concat(round(100* r.remain15 / r.uv ,2),'%') as 'day15_%',
concat(round(100* r.remain30 / r.uv ,2),'%') as 'day30_%'
FROM r ;
1.3 RFM模型⭐️⭐️⭐️
由于该数据没有M值,故只建立了4个分类:重要价值客户、重要发展客户、重要保持客户、重要挽留客户。
1)分别求出R、F和R_value、F_value
#1.求出R和R_value-- 第四步:建立视图,方便下面计算使用
CREATE VIEW r_level ASSELECT
a.user_id,
a.max_date,
-- 第二步:求出统计日期与最近一次下单时间的间隔天数(本次统计日期默认是2019-12-18)
datediff('2019-12-18',a.max_date) as diff,-- 第三步:根据间隔天数,自定义R值的评分机制
-- 这里是根据2、4、6、8这些值划分成5个档次:1、2、3、4、5,数字越高代表R值越好
(case when datediff('2019-12-18',a.max_date) <= 2 then 5
when datediff('2019-12-18',a.max_date) <= 4 then 4
when datediff('2019-12-18',a.max_date) <= 6 then 3
when datediff('2019-12-18',a.max_date) <= 8 then 2
else 1 end) as R_valueFROM (-- 第一步:先求出客户的最近一次下单时间
SELECT
a.user_id,
max(a.dates) as max_date
FROM temp_trade a
WHERE a.behavior_type = 2
GROUP BY a.user_id
) a ;
r_level表
# 2.求出F和F_value-- 第三步:建立视图,方便下面计算使用
CREATE VIEW f_level ASSELECT
a.user_id,
a.pay_date,-- 第二步:根据购买频次建立评分机制
-- 这里是根据2、4、6、8这些值划分成5个档次:1、2、3、4、5,数字越高代表F值越好
(case when a.pay_date <=2 then 1
when a.pay_date <=4 then 2
when a.pay_date <=6 then 3
when a.pay_date <=8 then 4
else 5 end ) as F_valueFROM (
-- 第一步:先求出客户购买频次(这里是根据下单天数去重,有些公司是根据订单号去重)
SELECT
a.user_id,
count(distinct a.dates) as pay_date
FROM temp_trade a
WHERE a.behavior_type = 2
GROUP BY a.user_id
) a ;
f_level表
2)求出RF均值
-- R均值
SELECT avg(R_value) as 'r_agv' FROM r_level ; -- 2.7939-- R均值
SELECT avg(F_value) as 'f_agv' FROM f_level ; -- 1.9939
3)RF值与RF均值做比较,整合成4种用户类型(本来有8种)
本次只看R值和F值
SELECT
a.*,
b.pay_date,
b.F_value,
case when a.R_value > 2.7939 and b.F_value > 1.9939 then '重要价值客户'
when a.R_value > 2.7939 and b.F_value < 1.9939 then '重要发展客户'
when a.R_value < 2.7939 and b.F_value > 1.9939 then '重要保持客户'
when a.R_value < 2.7939 and b.F_value < 1.9939 then '重要挽回客户'
end as user_levelFROM r_level a
LEFT JOIN f_level b on a.user_id = b.user_id ;
RFM模型运行结果
2、商品指标体系
-- 商品的点击、收藏、加购、购买以及转化率计算,按照购买降序
SELECT
a.item_id,
sum(case when a.behavior_type = 1 then 1 else 0 end) as '点击',
sum(case when a.behavior_type = 4 then 1 else 0 end) as '收藏',
sum(case when a.behavior_type = 3 then 1 else 0 end) as '加购',
sum(case when a.behavior_type = 2 then 1 else 0 end) as '购买',
count(distinct(case when a.behavior_type = 2 then a.user_id else null end)) / count(distinct a.user_id) as '购买转化率'FROM temp_trade a
GROUP BY a.item_id
ORDER BY sum(case when a.behavior_type = 2 then 1 else 0 end) DESC;-- 品类维度同理,将item_id改成item_category即可。
(数据是假,但掩盖不了我写文章的真)
3、平台指标体系
3.1 行为分析
SELECT
a.dates, -- 把上面的item_id改成dates就好了
sum(case when a.behavior_type = 1 then 1 else 0 end) as '点击',
sum(case when a.behavior_type = 4 then 1 else 0 end) as '收藏',
sum(case when a.behavior_type = 3 then 1 else 0 end) as '加购',
sum(case when a.behavior_type = 2 then 1 else 0 end) as '购买',
count(distinct(case when a.behavior_type = 2 then a.user_id else null end)) / count(distinct a.user_id) as '购买转化率'FROM temp_trade a
GROUP BY a.dates
ORDER BY sum(case when a.behavior_type = 2 then 1 else 0 end) DESC;
3.2 行为路径分析 ⭐️⭐️⭐️
1)取每条记录的前4个行为——lag()over()
-- 第三步:创建视图
CREATE VIEW rt AS-- 第二步:用窗口函数lag()over()取每条记录的前4条记录
SELECT
a.user_id,
a.item_id,
a.behavior_type,
a.date_time,
a.dates,
-- order by后默认升序
lag(a.behavior_type,4) over(partition by a.user_id,a.item_id order by a.date_time) as lag_4,
lag(a.behavior_type,3) over(partition by a.user_id,a.item_id order by a.date_time) as lag_3,
lag(a.behavior_type,2) over(partition by a.user_id,a.item_id order by a.date_time) as lag_2,
lag(a.behavior_type,1) over(partition by a.user_id,a.item_id order by a.date_time) as lag_1FROM temp_trade a ;-- 第一步:因为本数据源没有特别代表性的值,所以自己插入一条,便于验证逻辑准确性,此步骤可省略
-- INSERT INTO temp_trade value(47328088,289585954,4,null,5232,'2019-12-10 12:00:00','2019-12-10')-- 第四步:随机查询一条数据验证逻辑是否正确
SELECT * FROM rt WHERE rt.user_id = 47328088 and rt.item_id = 289585954;
运行结果:lag()over()
2)取发生购买行为的前4个行为——behavior_type = 2
-- 本次用户行为路径分析,只取发生过购买行为的行为路径,分析购买前的路径规律
CREATE VIEW rt_1 AS
SELECT rt.*
FROM rt
WHERE rt.behavior_type = 2;
运行结果:behavior_type = 2
3)用户购买同一种商品,则取最近一次购买行为的数据——rank()over()
-- 第三步:创建视图
CREATE VIEW rt_way AS -- 第二步:再取最近一条记录
SELECT rt_1.* FROM(
-- 第一步:先将数据按照用户和商品降序
SELECT
rt_1.*,
rank() over(partition by rt_1.user_id,rt_1.item_id order by rt_1.date_time desc) as rank_n
FROM rt_1
) rt_1
WHERE rt_1.rank_n = 1 ;-- 数据终于处理好了
SELECT * FROM rt_way ;
运行结果:rank()over()
4)查询每个路径下有多少客户数
-- 将购买及购买前四个行为用-符号连接起来,分别统计路径的购买人数
SELECT
concat(
ifnull(a.lag_4,'空'),'-',
ifnull(a.lag_3,'空'),'-',
ifnull(a.lag_2,'空'),'-',
ifnull(a.lag_1,'空'),'-',
a.behavior_type
) as user_way,
count(distinct a.user_id) as buyer_num
FROM rt_way a
GROUP BY concat(
ifnull(a.lag_4,'空'),'-',
ifnull(a.lag_3,'空'),'-',
ifnull(a.lag_2,'空'),'-',
ifnull(a.lag_1,'空'),'-',
a.behavior_type
) ;
用户路径分析最终运行结果
六、结论
1、用户分析
- UV异常分析:每日UV数据中,明显异常点为双十二活动造成,该影响为已知影响。
- 用户成上升趋势,其中11.26,12.3等数据下降还需结合其它数据再做判断。
- 双十二活动后用户周 环比会相应下降,为正常原因。
猜测可能的问题有:
- 内部问题:产品BUG(网站bug)、策略问题(周年庆活动结束了)、营销问题(代言人换了)等;
- 外部问题:竞品活动问题(其他平台大酬宾),政治环境问题(进口商品限制),舆情口碑问题(平台商品爆出质量问题)等;
2、用户精细化运营
可以在后续精细化运营场景中直接使用细分用户,做差异化运营。
3、商品分析
- 找到热销商品;
- 其中’5027‘、’5399‘品类购买转化率较其余商品品类偏低,需要结合更多数据做进一步解读。可能的原因:品类自有特性导致用户购买较低,比如非必需品、奢侈品等等。
4、产品功能路径分析
- 可以发现用户多以直接购买为主;
- 添加购物⻋的购买在主要购买路径中数量较少;
- 后续的产品加购功能和产品收藏功能还需要结合更多数据做改进方案。
为了体现逻辑性,便于你们理解和实操,又是写了2天改了1天~ 优秀的文章不用多说,这就是了~ 欢迎点赞收藏评论交流
「MySQL」电商“人货场”指标体系相关推荐
- 神策数据:围绕跨境电商“人货场”,数据如何助力品牌乘风出海?
本文根据神策数据华南业务售前负责人李泓波关于<跨境电商,风口下的挑战与机遇>的主题演讲整理,从跨境电商新风口以及如何抓住风口下的机遇两方面,详细讲述跨境电商乘风出海.加速成长的方法论与实践 ...
- 「ECharts」电商平台数据可视化实时监控系统之后台开发
此项目后台采用 Koa2 进行开发配置,相关配置整理如下. 1. Koa2 概述 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领 ...
- 「MySQL」从零到删库
目录 零.数据库的产生 什么是数据库 database 抛出问题,数据库的产生 数据库萌芽阶段的发展历程 CRUD 层次模型 网状模型 关系型数据库 企业和我们都选什么数据库呢? 详见:零.数据库的产 ...
- 「名道电商」电商们如何利用抖音营销?
抖音的火爆已经成功引起了各个互联网大佬的注意,腾讯.阿里.百度纷纷推出了自己的短视频软件,刷抖音的人们一边喊着"抖音在抹杀我们的时间",一边乐此不疲得刷着抖音,企业们也看到了抖音带 ...
- 聊聊「游戏」这个磨人的小妖精
引言:此文是我的「读书会」里一份优秀作业,刘昊男同学作品.对于游戏,我记得之前看过「六原则」,不妨放在开头: 研究不熟悉的东西使之变为熟悉的东西: 将熟悉的东西作有规律的重复: 在重复的过程中尽可能作 ...
- todo已完成任务_uTools 插件介绍 | 「todo」!打工人必备
打工人,打工魂,打工才是人上人.没有困难的工作,只有勇敢会用工具的打工人. 一转眼,2020年余额已经不足,又到了一年一度的打工人复盘时间 回首2020,大事小事,林林总总,顾此失彼,手忙脚乱.一年好 ...
- 电商库存设计mysql redis_电商中的库存管理实现-mysql与redis
库存是电商系统的核心环节,如何做到不少卖,不超卖是库存关心的核心业务问题.业务量大时带来的问题是如何更快速的处理库存计算. 此处以最简模式来讨论库存设计. 以下内容只做分析,不能直接套用,欢迎各位同道 ...
- 电商库存设计mysql redis_电商技术 -- 库存设计指北
前言 最近在解决一套老电商系统的库存"超卖"问题.一直以为超卖问题,最难解决的是库存扣减,实则不然,我们的系统在解决了库存扣减问题之后,还会一直有"超卖"现象? ...
- 电商平台基础指标体系
电商平台主要的 1.总体运营指标 流量类指标(pv.uv.人均页面访问数).订单产生效率指标(总订单数量.访问到下单转化率).总体销售业绩指标(成交额金额.销售金额.客单价).整体指标(销售毛利.毛利 ...
最新文章
- linux命令rname,linux的rename命令
- 华为云总裁郑叶来:易获取、用得起、方便用的算力是人工智能发展的关键
- python控制语句第一章_【原创】Python第一章
- Redundant Paths POJ - 3177(tarjan+边双连通分量)
- 关于高考报志愿的一些规划建议
- 骚操作!他居然同时给谷歌和 Facebook 上班干活
- 归并排序(二路、递归)
- 《Python核心编程》第二版第18页第一章练习 -Python核心编程答案-自己做的-
- matlab如何矩阵相除,Matlab中的矩阵除法有问题???
- Linux下安装jdk报Permission denied以及chmod详解
- N皇后问题(回溯算法解法)
- Vuex的官方文档笔记
- Mybatis学习笔记2-配置文件解析
- 方舟编译器开源,华为自家开源平台面世!(附编译过程)
- ArcGIS模拟3D洪水
- macOS 安装 Adobe Zii 2019 for Adobe
- 智华计算机终端无法卸载,智华天成V1.0计算机终端保密检查系统软件 国密装备目录**...
- 美团的至暗时刻:用户口碑崩塌,食品安全五连击,股价腰斩!
- 使用网页源代码下载网络录播/回放/缓存视频
- 木马生成器源代码-资源法(VC++)
热门文章
- (转)Proxy error: Could not proxy requestXXX from localhost:8080 to localhost:3000 (ENOTFO
- spring boot + vue 使用poi实现Excel导出功能(包括Excel样式调整,以及前后端代码)
- Mac Chrome浏览器取消自动升级(看这一篇就够了)
- 浏览器内核和性能优化总结
- SEO人员,如何创建新闻源级别的文章?
- 数据湖是什么?有什么优势?与数仓区别?未来的发展?
- excel相乘后求和_相减之后再相乘,然后再相加,公式难题
- 澳洲python培训
- 哪种编程语言适合后端开发?Java和PHP的区别在哪?
- Ubuntu 22.04换国内源 清华源 阿里源 中科大源 163源