SQL数据分析 I 淘宝用户分析

1、数据来源说明:

本数据来源于阿里巴巴天池,选取了从2014年11月18日至2014年12月18日之间,8477名随机用户共1048575条行为数据,数据集的每一行表示一条用户行为,共6列。

select count(user_id) as '总数据条数'
from userdata
1.1
select count(DISTINCT user_id) as '用户数'
from userdata
1.2

列字段:

select *
from userdata LIMIT 5;
1.3

user_id:用户ID
item_id:商品ID
behavior_type:用户行为(包含点击、收藏、加购物车、购买四种行为,分别用数字1、2、3、4表示)
user_geohash:地理位置(有空值)
item_category: 品类ID(商品所属的品类)
time:用户行为发生的时间

2、提出问题:

a) 整体用户的购物情况
pv(总访问量)、日均访问量、uv(用户总数)、有购买行为的用户数量、用户的购物情况、复购率分别是多少?
b)用户行为转化漏斗
点击- 加购物车- 收藏- 购买各环节转化率如何?购物车遗弃率是多少,如何提高?
c)购买率高和购买率为0的人群有什么特征
d)基于时间维度了解用户的行为习惯
e)基于RFM模型的用户分析

3、数据清洗

a)缺失值处理
item_category 列表示地理位置信息,由于存在大量缺失值,且为加密信息,难以研究,因此后续不对这个字段进行分析
b)数据一致性化处理
由于time字段的时间包含(年-月-日)和小时,为了方便分析,将该字段分成2个字段,一个日期列(date)和一个小时列(time)。

# 在time前面插入一列date
ALTER TABLE userdata ADD date varchar(20) not null after item_category;
# 复制time列到date列
UPDATE userdata set date=time;
# 截取日期
UPDATE userdata
set date = replace(date,date,SUBSTRING_INDEX(date,' ',1));
# 截取时间
UPDATE userdata
set time = replace(time,time,SUBSTRING_INDEX(time,' ',-1));
select * from userdata limit 5;
3.1

c)由于behavior_type列的四种行为类型分别用1,2,3,4表示点击、收藏、加入购物车、购买四种行为,为了方便查看数据,将1、2、3、4替换为'PV','fav','cart','buy'

# 修改behavior_type列数据类型为字符串
ALTER table userdata MODIFY behavior_type varchar(20);

# 替换behavior_type 数据
UPDATE userdata set behavior_type=replace(behavior_type,1,'pv');
UPDATE userdata set behavior_type=replace(behavior_type,2,'fav');
update userdata set behavior_type=replace(behavior_type,3,'cart');
update userdata set behavior_type=replace(behavior_type,4,'buy');
select * from userdata limit 5;

d) 通过查看表结构,发现date列日期不是日期类型,可以通过表结构直接修改为date类型,也可以通过代码实现

ALTER TABLE userdata modify date date;
3.2

4、构建模型、分析问题

a) 总体用户购物情况
——pv(总访问量)


4.1

——日均访问量


4.2

——uv(用户总数)
4.3

——有购买行为的用户数
4.4

——用户的购物情况

CREATE view user_behavior as 
SELECT user_id
      ,count(behavior_type) as '总量'
      ,sum(case when behavior_type='pv' then 1 ELSE 0 end) as '点击次数'
      ,sum(case when behavior_type='fav' then 1 ELSE 0 end) as '收藏次数'
      ,sum(case when behavior_type='cart' then 1 else 0 end) as '加购次数'
      ,sum(case when behavior_type='buy' then 1 else 0 end) as '购买数'
from userdata
GROUP BY user_id
ORDER BY count(behavior_type) DESC;

# 查看用户购物情况
SELECT * FROM user_behavior;
4.5

——复购率:产生两次或两次以上购买的用户占购买用户的比例

# 复购率
SELECT sum(case when 购买数 > 1 then 1 else 0 END) as '复购次数'
      ,sum(case when 购买数 > 0 then 1 else 0 END) as '总购买数'
      ,concat(round(sum(case when 购买数>1 then 1 else 0 END)/sum(case when 购买数 > 0 then 1 else 0 END)*100,2),'%') 
       as '复购率'
FROM user_behavior;
4.6

b)用户行为转化为漏斗
在购物环节中收藏和加入购物车两个环节没有先后之分,所以将这两个环节可以放在一起作为购物环节的一步,最终得到用户购物行为各环节转化率,如下:


select sum(点击次数) as 点击总数
      ,sum(收藏次数) + sum(加购次数) as 收藏和加购
      ,sum(购买数) as 购买总数
      ,CONCAT(round(sum(点击次数)/sum(点击次数)*100,2),'%') as pv
      ,concat(round((sum(收藏次数) + sum(加购次数))/sum(点击次数)*100,2),'%') as pv_to_favCart
      ,concat(round(sum(购买数)/sum(点击次数)*100,2),'%') as pv_to_buy
from user_behavior;

4.7
4.8

不同行业转化率会有差异,据《精益数据分析》中,在整个互联网范围内,平均转化率为2.14%,途中购买行为转化率为1.04%,与行业平均值存在较大差异,淘宝移动端用户行为的转化率还有很大的增长空间。
c) 购买率高和购买率低的人群有什么特征

SELECT *
      ,round(购买数/点击次数*100,2) as 购买率
FROM user_behavior
ORDER BY 购买率 desc;
4.9
SELECT *
      ,round(购买数/点击次数*100,2) as 购买率
FROM user_behavior
ORDER BY 购买数 desc;
4.10

4.11

4.12

购买率高用户的特征:
由上可以看出购买率高的用户,点击率很低,一般点击不超过5次就直接购买,可以推断这些用户为理性消费者,有明确的购物目标,很少会被商家的广告或促销吸引。
购买率低的用户特征:
由上图可以看出,购买率低用户分为两类:
第一类:用户点击次数少,一方面可能是这类用户不太会网购或者不喜欢上网的用户,可以加以引导,另一方面是否商品不满足消费者需求,比如定价过高或者设计不合理;
第二类:用户点击次数高,收藏及加购次数也多的用户,此类用户可能正为商家的促销活动做准备,下单欲望较少且自制力较强,思虑多或者不会支付,购物难度较大。
d) 基于时间维度了解用户的行为习惯
——一天中用户的活跃时段分布

SELECT time
      ,count(behavior_type) as '用户行为总量'
      ,sum(case when behavior_type='pv' then 1 ELSE 0 end) as '点击次数'
      ,sum(case when behavior_type='fav' then 1 ELSE 0 end) as '收藏次数'
      ,sum(case when behavior_type='cart' then 1 else 0 end) as '加购次数'
      ,sum(case when behavior_type='buy' then 1 else 0 end) as '购买数'
from userdata
GROUP BY time
ORDER BY time;
4.13

4.14

由上图可以看出,每日0点到5点用户活跃度快速降低,降到一天中的活跃量字第直,6点到10点用户活跃度快速上升,10点到18点用户活跃度较平稳,17点到23点用户活跃度快速上升,达到一天中的最高值。
——一周中用户活跃时间段分布
鉴于 2014-11-18为 周二,2014-12-18 为 周四,因此第一周和最后一周数据不考虑到此次分析中

select DATE_FORMAT(date,'%W') as week_type
      ,count(behavior_type) as '用户行为总量'
      ,sum(case when behavior_type='pv' then 1 else 0 end) as '点击次数'
      ,sum(case when behavior_type='fav' then 1 else 0 end) as '收藏次数'
      ,sum(case when behavior_type='cart' then 1 else 0 end) as '加购次数'
      ,sum(case when behavior_type='buy' then 1 else 0 end) as '购买数'
from userdata
where date BETWEEN '2014-11-24' and '2014-12-14'
GROUP BY week_type;
4.15
4.16

由以上结果可以看出,每周用户活跃度较稳定,其中周五用户活跃度突增,这是因为2014-12-12这天正好为周五,由于双十二电商大促销活动引起的。
e) 基于RFM模型找出有价值的用户
RFM模型是衡量客户价值和客户创力能力的重要工具和手段,其中3个要素构成了数据分析的重要指标,分别是:
R-Recency(最近一次购买时间)
F-Frequency(消费频率)
M-Money(消费金额)
由于数据源没有相关的金额数据,暂且通过R和F的数据对客户价值进行分析。
——计算R-Recency
由于数据集的时间为2014-11-18-2014-11-18,这里选取2014-11-19为计算日期,统计客户最近发生购买行为的日期距离2014-11-19的间隔天数,再对间隔天数进行排名,间隔天数越少,客户价值越大,排名越靠前。

SELECT a.*
      ,@rank := @rank + 1 as recent_rank
FROM
(
        select user_id
                    ,DATEDIFF('2014-12-19',max(date)) as Recency
        from userdata
        where behavior_type='buy'
        GROUP BY user_id
        ORDER BY Recency) a
JOIN (SELECT @rank :=0) b
image.png
4.17

由上图可以看出1-10天内客户的最近一次消费集中在1-10天内,要有针对性的推出活动,吸引长时间未购买的客户进行持续消费。
——计算F-Frequency
先统计每位客户的购买频率,在对购买频率进行排名,频率越大,客户价值越大,排名越靠前

select a.*
      ,@rank := @rank+1 as fre_rank
FROM 
(
    select user_id
                ,count(behavior_type) as Frequency
    FROM userdata 
    where behavior_type='buy'
    GROUP BY user_id
  ORDER BY Frequency desc ) a
join (select @rank :=0) b

购买频次对应的用户数


4.18
SELECT Frequency
      ,count(Frequency) as '用户数'
FROM
(
select user_id
            ,count(behavior_type) as Frequency
FROM userdata 
where behavior_type='buy'
GROUP BY user_id) t1
GROUP BY t1.Frequency
ORDER BY t1.Frequency;
4.19

4.20

由上可以得出:
--购买1次(新客户)占比为47%,产生重复购买(老客户)的占比为53%;
--购买3次及以上(成熟客户)的占比为30.46%,购买5次及以上(忠实客户)的占比为11.04%
可见客户的重复购买率较好,但是仍可以通过营销手段或者提升产品设计等方面提高新用户的留存率
——对用户进行评分
对4330名有购买行为的用户按照排名进行分组,共划分未四组,对排名在前1/4的用户打4分,1/4-2/4的用户打3分,2/4-3/4的用户打2分,剩余用户打1分,按照这个规则分别对用户时间间隔排名和购买频率排名打分,最后把两个分数合并在一起作为该名用户的最终评分。

select t3.user_id
      ,t3.recent
      ,t3.rencent_rank
      ,t4.Frequency
      ,t4.Fre_rank
      ,concat(
       case when t3.rencent_rank <=(4330/4) then '4'
            when t3.rencent_rank >=(4330/4) and t3.rencent_rank <=(4330/2) then '3'
            when t3.rencent_rank >=(4330/2) and t3.rencent_rank <=(4330/4)*3 then '2'
            else '1' end, 
       case when t4.Fre_rank <=(4330/4) then '4'
            when t4.Fre_rank >=(4330/4) and t4.Fre_rank <=(4330/2) then '3'
            when t4.Fre_rank >=(4330/2) and t4.Fre_rank <=(4330/4)*3 then '2'
            else '1' end) as user_value
FROM
# 对每位用户最近发生购买行为的时间间隔进行排名(间隔天数越少,客户价值越大)
(
    SELECT t1.*
                 ,@rank1 := @rank1+1 as rencent_rank
    FROM 
    (
        SELECT user_id
                    ,DATEDIFF('2014-12-19',max(date)) as recent
        FROM userdata
        where behavior_type='buy'
        GROUP BY user_id
        ORDER BY recent) t1
    join (select @rank1 :=0) t2) t3
JOIN
# 对每位用户的购买频率进行排名(频率越大,客户价值越大)
(
    select a.*
                ,(@rank:=@rank + 1) as Fre_rank
    FROM
    (
        select user_id
                    ,count(behavior_type) as Frequency
        from userdata 
        where behavior_type='buy'
        GROUP BY user_id
        ORDER BY Frequency desc ) a
    join ( select @rank := 0) b) t4
on t3.user_id=t4.user_id
ORDER BY user_value desc
4.21

4.22

通过打分可以了解每位顾客的特性,从而实现差异化营销。比如对于user_value=44为重点用户,需重点关注,对于user_value=41这类新客户,可以适当给点折扣或者捆绑销售来增加用户的购买频率。

结论

1、总体转化率只有1.04%,用户点击后收藏和加购转化率在5.1%,需要提高客户的购买意愿,可以通过活动促销、精准营销等方式。
2、购买率高且点击量少的用户属于理智型购物者,有明确的购物目标,受促销活动和广告影响小,而点击率高但购买率低的用户可以认为是等待型或克制型用户群体,下单欲望较少自制力强,购物难度较大。
3、大部分用户活跃在10点-23点,在19点和23点达到一天的高峰,周五过后活跃度有所下降,但周末开始回升。可以根据用户的活跃时间段精准推送商家的折扣或者促销活动,提高购买率。
4、通过R、F的数据对用户行为进行打分,对每位用户进行精准化营销,还可以通过对R和F的数据检测,推测客户消费的异动情况,挽回流失客户。

推荐阅读更多精彩内容