Mysql 用户行为分析

目录

数据导入

1-建表
2-导入数据

用户消费行为分析

1-统计不同月份的下单人数

2-统计用户不同月份的回购率和复购率

3-统计不同性别的消费频次是否有差异

4-统计不同性别的用户消费金额是否有差异

5-统计不同年龄段的用户消费金额是否有差异

6-RFM 用户价值分析

建表

数据库下建立用户表userinfo 和 订单表 orderinfo

建orderinfo表

create table if not EXISTS ORDERINFO(
	ORDERID varchar(10) NUll, #--订单ID,主键
    USERID int(10) NULL,#--用户ID 可以用户表进行关联
    ISPAID varchar(10) NULL,#--是否支付
    PRINCE float(10) NULL,#--订单价格
    PAIDTIME varchar(10) NULL #--订单支付时间
 );

建表userinfo

create table USERINFO(
	USERID varchar(10) NULL, #用户ID  主键
    SEX varchar(10) NULL,#性别PAIDTIME
    BIRTH varchar(10) NULL #出生日期
 );

数据导入

cmd 命令可以快速导入数据 ,不建议workbench
导入文件 建议放在默认文件夹
导入order 表

load data infile 'D:/ProgramData/MySQL/MySQL Server 8.0/Uploads/order_info_utf.csv' 
into table first.orderinfo fields terminated by ',' optionally enclosed by '' escaped by '' 
lines terminated by '\r\n';

导入user 表

load data infile 'D:/ProgramData/MySQL/MySQL Server 8.0/Uploads/user_info_utf.csv' 
into table first.orderinfo fields terminated by ',' optionally enclosed by '' escaped by '' 
lines terminated by '\r\n';

用户消费行为分析

1-统计不同月份的下单人数

2-统计用户不同月份的回购率和复购率

3-统计不同性别的消费频次是否有差异

4-统计不同性别的用户消费金额是否有差异

5-统计不同年龄段的用户消费金额是否有差异

6-rfm对用户价值划分

统计不同月份的下单人数

对应下单时间 有 年 月 日,我们统计年-月时间维度,count 计算下单数量

# 统计不同月份的下单人数
select concat(year(paidtime),'-',month(paidtime)) as month_,
count(distinct userid) ct from orderinfo
where ispaid = '已支付'
group by year(paidtime),month(paidtime);

Mysql 用户行为分析_第1张图片
数据量只有3月和4月前9天的数据量,每个月的1,2号下单量多,可能每个月初做促销活动,之后下降至平稳

统计用户不同月份的回购率和复购率

复购:某个时间段内 购买次数>1次 的用户
回购:某个时间段内 用户 有购买行为,过段时间后,用户 又购买,这叫做回购。回购和复购的差别是,跨了两个时间维度。

(1)复购率

select d.ordermonth,count(c) as '总人数',count(if(d.c>1,1,null)) as '复购',
count(if(d.c>1,1,null))/count(c) as '复购率'
from
(select userid,date_format(paidtime,'%Y-%m-%01') ordermonth,count(userid) c from orderinfo
where ispaid = '已支付'
group by userid,ordermonth) d
group by d.ordermonth;

Mysql 用户行为分析_第2张图片
图中显示,3月总人数与复购人数都比4月多,4月可能在引流,广告推广上投入不够

(2)回购率

select t1.ordermonth,count(t1.userid) as '当月购买人数',count(t2.userid) as '回购人数',count(t2.userid)/count(t1.userid) as '回购率' from
(
(select userid, date_format(paidtime,'%Y-%m-%01') ordermonth 
from orderinfo where ispaid = '已支付' and date_format(paidtime,'%Y-%m-%01') = '2016-03-01' group by ordermonth,userid 
order by userid ) t1 
left join 
(select userid,date_format(paidtime,'%Y-%m-%01') ordermonth 
from orderinfo where ispaid = '已支付' and date_format(paidtime,'%Y-%m-%01') = '2016-04-01' group by ordermonth,userid 
order by userid) t2
on t1.userid = t2.userid);

Mysql 用户行为分析_第3张图片
统计到4月复购人数 13119,回购率 0.2394

不同性别的销售情况

# 统计性别消费差异
select t.sex '性别',avg(t.ct) '消费次数'
from(
select a.userid,b.sex,	count(a.orderid) as ct
from userinfo b
join orderinfo a
on a.userid = b.userid
group by a.userid,b.sex) t
group by t.sex;

Mysql 用户行为分析_第4张图片
一般女性比男性的购买占比高,图中现象可能是数据表中存在 性别为空的数据数据,未对null 处理

统计不同性别的用户消费金额是否有差异

# 统计不同性别的消费能力
select sex,round(avg(price),2) as avg_price
from(
select price,sex
from orderinfo a
join userinfo b
on a.userid = b.userid
where ispaid = '已支付'
and sex<>'') d
group by sex

Mysql 用户行为分析_第5张图片
女性的消费能力虐高于男性,基本相差不大

统计不同年龄段的用户消费金额是否有差异

#统计不同年龄段的消费差异金额
select age,round(sum(price),2) as sum_price
from(
select price,
case when year(now()) - year(birth) between 10 and 19 then '10-19岁'
	when year(now()) - year(birth) between 20 and 29 then '20-29岁'
	when year(now()) - year(birth) between 30 and 39 then '30-39岁'
	when year(now()) - year(birth) between 40 and 49 then '40-49岁'
	when year(now()) - year(birth) between 50 and 59 then '50-59岁'
	when year(now()) - year(birth) between 60 and 69 then '60-69岁'
	when year(now()) - year(birth) between 70 and 89 then '70-89岁'
else 0 end  age
from orderinfo a
join userinfo b
on a.userid = b.userid
where ispaid = '已支付')d
where age<>0
group by age
order by sum_price;

Mysql 用户行为分析_第6张图片
消费力度最大的年龄段是在30-39岁,推测原因,这个年龄段具有工作惊艳,有一定的经济水平,所以应该针对这个年龄段人群做重点推广。

RFM 用户价值分析

R(Recency)最近一次消费时间:表示用户最近一次消费距离现在的时间。消费时间越近的客户价值越大。1年前消费过的用户肯定没有1周前消费过的用户价值大。
F(Frequency)消费频率:消费频率是指用户在统计周期内购买商品的次数,经常购买的用户也就是熟客,价值肯定比偶尔来一次的客户价值大。
M(Monetary)消费金额:消费金额是指用户在统计周期内消费的总金额,体现了消费者为企业创利的多少,自然是消费越多的用户价值越大。

Mysql 用户行为分析_第7张图片
根据RFM 三个维度 将用户群体划分八个群体
R 维度划分

create view  最近消费时间间隔 as
SELECT userid,MIN(时间间隔) AS 最近一次消费时间间隔
FROM
(SELECT userid,DATEDIFF('2016-05-05',paidtime) AS 时间间隔
FROM orderinfo
WHERE ispaid = "已支付") a
GROUP BY userid;

# 创建R得分
create view R得分 as
SELECT userid,
(CASE WHEN 最近一次消费时间间隔 BETWEEN '20' AND '30' THEN 5
WHEN 最近一次消费时间间隔 BETWEEN '31' AND '40' THEN 4
WHEN 最近一次消费时间间隔 BETWEEN '41' AND '50' THEN 3
WHEN 最近一次消费时间间隔 BETWEEN '51' AND '60' THEN 2
WHEN 最近一次消费时间间隔 BETWEEN '61' AND '70' THEN 1 ELSE 0 END) AS 'R得分'
FROM 最近消费时间间隔;

F 维度划分

# 创建 F得分
drop view 用户购买次数视图;
create view 用户购买次数视图 as
SELECT userid,COUNT(paidtime) AS 购买次数
FROM orderinfo
WHERE ispaid = "已支付"
GROUP BY userid;

select * from 用户购买次数视图;

create view F得分 as
SELECT userid,
(CASE WHEN 购买次数 > 31 THEN 5
WHEN 购买次数 BETWEEN 21 AND 30 THEN 4
WHEN 购买次数 BETWEEN 11 AND 20 THEN 3
WHEN 购买次数 BETWEEN 2 AND 10 THEN 2
WHEN 购买次数 =1 THEN 1 ELSE 0 END) AS F得分
FROM 用户购买次数视图;

M维度划分

# 创建M得分
drop view 用户消费视图;
create view 用户消费视图 as
select userid,round(sum(price),2) as 消费金额 from
orderinfo 
group by userid;

select * from 用户消费视图;
drop view M得分;
create view M得分 as
SELECT userid,
(CASE WHEN 消费金额 > 10000000 THEN 5
WHEN 消费金额 BETWEEN 1000000 AND 9999999 THEN 4
WHEN 消费金额 BETWEEN 100000  AND 999999 THEN 3
WHEN 消费金额 BETWEEN 9999  AND 99999 THEN 2
WHEN 消费金额 BETWEEN 100    AND 9999 THEN 1
ELSE 0 END) AS M得分
FROM 用户消费视图;

统计三个维度得分情况

create view RFM as
SELECT R.userid,R.R得分,F.F得分,M.M得分
FROM R得分 AS R INNER JOIN F得分 AS F
ON R.userid=F.userid
inner join M得分 as M

Mysql 用户行为分析_第8张图片
根据三个维度得分情况对用户划分

create view 用户划分 as
SELECT userid,
(CASE WHEN R得分 < 2.7327 AND F得分 > 1.3841 AND M得分 > 1.0008 THEN "重要保持用户"
WHEN R得分 < 2.7327 AND F得分 < 1.3841 AND M得分 > 1.0008 THEN "重要挽留用户"
WHEN R得分 > 2.7327 AND F得分 < 1.3841 AND M得分 > 1.0008 THEN "重要发展客户"
WHEN R得分 > 2.7327 AND F得分 > 1.3841 AND M得分 > 1.0008 THEN "重要价值用户"
WHEN R得分 < 2.7327 AND F得分 > 1.3841 AND M得分 < 1.0008 THEN "一般保持用户"
WHEN R得分 > 2.7327 AND F得分 < 1.3841 AND M得分 < 1.0008 THEN "一般挽留用户"
WHEN R得分 > 2.7327 AND F得分 < 1.3841 AND M得分 > 1.0008 THEN "一般发展用户"
ELSE '一般价值用户' END) AS 用户价值类型
FROM RFM;

Mysql 用户行为分析_第9张图片
最后统计每个群体数量

SELECT 用户价值类型,count(userid) from 用户划分
group by 用户价值类型;

Mysql 用户行为分析_第10张图片
重要价值客户(111):最近消费时间近、消费频次和消费金额都很高,必须是VIP啊!
重要保持客户(011):最近消费时间较远,但消费频次和金额都很高,说明这是个一段时间没来的忠诚客户,我们需要主动和他保持联系。
重要发展客户(101):最近消费时间较近、消费金额高,但频次不高,忠诚度不高,很有潜力的用户,必须重点发展。
重要挽留客户(001):最近消费时间较远、消费频次不高,但消费金额高的用户,可能是将要流失或者已经要流失的用户,应当基于挽留措施

图中显示:重要保持用户22人;重要价值用户235;重要发展客户6人;重要挽留用户5人,重点关注这些用户群体,并采取对应措施

你可能感兴趣的:(Mysql 用户行为分析)