项目介绍
本项目主要围绕阿里巴巴提供的一个淘宝用户行为数据集进行分析,(行为包括点击、购买、加购、喜欢),目的在于揭露隐式反馈,提供更好的运营建议。
数据来源
https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1
环境
win10,Navicat,Excel
目录
一、项目背景
1.项目概述
数据集(UserBehavior.csv)包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。本项目分析其中的一万条数据。
2.每列详细描述
用户ID | 整数类型,序列化后的用户ID |
商品ID | 整数类型,序列化后的商品ID |
商品类目ID | 整数类型,序列化后的商品所属类目ID |
行为类型 | 字符串,枚举类型,包括('pv', 'buy', 'cart', 'fav') |
时间戳 | 行为发生的时间戳 |
用户行为类型共有四种,它们分别是
行为类型 | 说明 |
---|---|
pv | 商品详情页pv,等价于点击 |
buy | 商品购买 |
cart | 将商品加入购物车 |
fav | 收藏商品 |
3.分析目的
- 用户活跃时段
- 用户对哪些产品、类目感兴趣
- 用户的留存率、复购率、跳失率等
- 用户购买行为特点
- 根据RFM模型对用户分类
二、数据处理
1.缺失值查看及处理
查看每一列数据的行数
-- 1.检查是否有缺失值
SELECT COUNT(userid),COUNT(itemid),COUNT(categoryid),count(behaviortype),COUNT(timestamps)
FROM userbehavior
本数据集完整程度较好,每一列都是9998行,没有缺失值
2.检查重复值并处理
SELECT userid FROM userbehavior
GROUP BY userid,itemid,timestamps,categoryid,timestamps
HAVING COUNT(userid) > 1;
结果是
没有重复值
3.检查逻辑错误并处理
数据集的时间戳范围在2017年11月25日至2017年12月3日之间,查看是否有不在这个时间范围内的。
首先把时间戳转换为datetime形式
ALTER TABLE userbehavior
ADD COLUMN dates_time TIMESTAMP NULL;
UPDATE userbehavior
SET dates_time = FROM_UNIXTIME(timestamps);
ALTER TABLE userbehavior
ADD COLUMN dates TIMESTAMP NULL;
UPDATE userbehavior
SET dates = FROM_UNIXTIME(timestamps,'%Y-%m-%d');
然后查找是否有不在这个时间范围内的
select *
from userbehavior
WHERE dates < '2017-11-25'
or dates > '2017-12-03';
再把他们删除掉
delete from userbehavior
WHERE dates < '2017-11-25'
or dates > '2017-12-03';
4.增加时间、小时列
为了方便后续按照时间、小时对用户习惯进行分析,增加这两列
#添加新列time,返回时间
ALTER TABLE userbehavior
ADD COLUMN time VARCHAR(10) NULL;
UPDATE userbehavior
SET time = FROM_UNIXTIME(timestamps,'%H:%i:%S');
#添加新列hour,返回小时
alter table userbehavior
add column hour varchar(2);
update userbehavior
set hour=left(time,2);
查看经过上述处理之后的表
三、数据分析
1.流量分析
1.1 总体流量转化
-- 用户行为流量转化
SELECT
SUM(CASE WHEN behaviortype = 'pv' THEN 1 ELSE 0 END) AS 总浏览量,
SUM(CASE WHEN behaviortype = 'fav' OR behaviortype = 'cart' THEN 1 ELSE 0 END ) AS 总收藏加购量,
SUM(CASE WHEN behaviortype = 'buy' THEN 1 ELSE 0 END) AS 总购买量,
-- 计算加购收藏转化率
CONCAT(ROUND(SUM(CASE WHEN behaviortype = 'fav' OR behaviortype = 'cart' THEN 1 ELSE 0 END )/SUM(CASE WHEN behaviortype = 'pv' THEN 1 ELSE 0 END) * 100,2),'%') AS pv_cart,
-- 计算下单转化率
CONCAT(ROUND(SUM(CASE WHEN behaviortype = 'buy' THEN 1 ELSE 0 END)/SUM(CASE WHEN behaviortype = 'pv' THEN 1 ELSE 0 END)*100,2),'%') AS pv_buy
FROM userbehavior;
结果:
用Excel实现可视化:
1.2 每日流量分析
SELECT
dates,
count(DISTINCT(userid)) as 用户数,
SUM(CASE WHEN behaviortype = 'pv' THEN 1 ELSE 0 END) AS 浏览量,
SUM(CASE WHEN behaviortype = 'fav' OR behaviortype = 'cart' THEN 1 ELSE 0 END ) AS 收藏加购量,
SUM(CASE WHEN behaviortype = 'buy' THEN 1 ELSE 0 END) AS 购买量
from userbehavior
group by dates
order by dates;
用Excel实现可视化:
12月2日和12月3日这两天流量明显呈上升趋势,推测可能是因为淘宝双12预热活动,浏览量、收藏加购量较12月1日有明显增加。
1.3 单日流量分析
SELECT
hour,
count(DISTINCT(userid)) as 用户数,
SUM(CASE WHEN behaviortype = 'pv' THEN 1 ELSE 0 END) AS 浏览量,
SUM(CASE WHEN behaviortype = 'fav' OR behaviortype = 'cart' THEN 1 ELSE 0 END ) AS 收藏加购量,
SUM(CASE WHEN behaviortype = 'buy' THEN 1 ELSE 0 END) AS 购买量
from userbehavior
group by hour
order by hour;
分析:
- 图上显示低谷期为凌晨1-5点,是大多数人休息的时间,从6点开始各项指标才逐渐上升,符合一般用户的作息习惯
- 用户数和购买数从早上8点以后差别不大,收藏加购量和浏览量在22点达到顶峰
- 推测用户最活跃时间段为19-22点,是大多数人下班休息放松的时间
2.商品分析
2.1 按照下单次数进行分析
按照下单次数分组,分析每种下单次数对应的商品种类
SELECT
购买次数,
count(*) as 商品数量
FROM
(
SELECT
itemid,
count(itemid) AS 购买次数
FROM
userbehavior
WHERE
behaviortype = 'buy'
GROUP BY
itemid
) AS a
GROUP BY 购买次数
由此可见,大多数商品只会被购买一次
我们再看看根据类目进行分类的下单次数
SELECT
购买次数,
count(*) as 类目数量
FROM
(
SELECT
categoryid,
count(categoryid) AS 购买次数
FROM
userbehavior
WHERE
behaviortype = 'buy'
GROUP BY
categoryid
) AS a
GROUP BY 购买次数
根据类目分类,某些类目重复次数较多,可以对目标用户加强以下这些类目的推荐
SELECT
categoryid,
count(categoryid) AS 购买次数
FROM
userbehavior
WHERE
behaviortype = 'buy'
GROUP BY
categoryid
order by 购买次数 desc
limit 3
2.2 按照浏览次数进行分析
按照浏览次数分组,分析每种浏览次数对应的商品种类
SELECT
浏览次数,
count(*) as 商品数量
FROM
(
SELECT
itemid,
count(itemid) AS 浏览次数
FROM
userbehavior
WHERE
behaviortype = 'pv'
GROUP BY
itemid
) AS a
GROUP BY 浏览次数
结果:
帕累托结果可视化:
总浏览量=浏览次数*商品数量
在Excel里面做出商品占比以及总浏览量占比的表格,并可视化
上图显示的结果并不符合二八定律,浏览次数排前20%的商品只贡献了3.5%的浏览量,有82.67%的商品只被浏览过一次,浏览量占比达到63.5%,这还是表现了互联网环境下商品的长尾效应;建议商家增多爆款的曝光量。
3.用户分析
3.1 购买路径分析
从点击到下单购买,中间用户可能会收藏该商品,加购该商品,将这些可能性组合一下一共有四种购买路径:
(1)点击–直接购买
(2)点击–加购不收藏–购买
(3)点击–收藏不加购–购买
(4)点击–加购且收藏–购买
我们对每一种路径进行分析和统计,看一下哪一种更受欢迎。
首先构建每个用户的行为统计表
-- 按照用户ID分组,用户行为user_behavior行转列数据
CREATE VIEW user_behavior_data AS
SELECT userid,
COUNT(behaviortype) AS 用户行为数总计,
sum(CASE WHEN behaviortype ='pv' THEN 1 ELSE 0 END) AS 点击,
sum(CASE WHEN behaviortype ='fav' THEN 1 ELSE 0 END) AS 收藏,
sum(CASE WHEN behaviortype ='cart' THEN 1 ELSE 0 END) AS 加购,
sum(CASE WHEN behaviortype ='buy' THEN 1 ELSE 0 END) AS 购买
FROM userbehavior
GROUP BY userid
ORDER BY 用户行为数总计 DESC;
查看不同行为的用户数量
-- 不同行为的用户数量
SELECT
SUM(CASE WHEN 点击>0 THEN 1 ELSE 0 END) AS 点击用户数,
SUM(CASE WHEN 收藏>0 THEN 1 ELSE 0 END) AS 收藏用户数,
SUM(CASE WHEN 加购>0 THEN 1 ELSE 0 END) AS 加购用户数,
SUM(CASE WHEN 购买>0 THEN 1 ELSE 0 END) AS 购买用户数
FROM user_behavior_data;
产生点击的用户数有92名,最终购买的用户是55名,由此计算出购买转化率是59.8%。
接下来计算每一种路径的转化率
(1)点击–直接购买
-- 路径1:点击--直接购买
SELECT
SUM(CASE WHEN 购买>0 THEN 1 ELSE 0 END) AS 购买用户数
from user_behavior_data
where 收藏=0
and 加购=0
and 购买>0;
点击-直接购买的用户占比4/55=7.2%,转化率 4/92=4.3%
(2)点击–加购不收藏–购买
-- 路径2:点击--加购不收藏--购买
SELECT
SUM(CASE WHEN 加购>0 THEN 1 ELSE 0 END) AS 加购不收藏用户数,
SUM(CASE WHEN 购买>0 THEN 1 ELSE 0 END) AS 购买用户数
FROM user_behavior_data
WHERE 加购>0 AND 收藏=0;
用户占比 32/55=58.2% 加购到购买转化率68%
(3)点击–收藏不加购–购买
-- 路径3:点击--收藏不加购--购买
SELECT
SUM(CASE WHEN 收藏>0 THEN 1 ELSE 0 END) AS 收藏不加购用户数,
SUM(CASE WHEN 购买>0 THEN 1 ELSE 0 END) AS 购买用户数
FROM user_behavior_data
WHERE 加购=0 AND 收藏>0;
用户占比 6/55=10.9% 收藏到购买转化率50%
(4)点击–加购且收藏–购买
-- 路径4:点击--加购且收藏--购买
SELECT
SUM(CASE WHEN 加购>0 THEN 1 ELSE 0 END) AS 加购且收藏用户数,
SUM(CASE WHEN 购买>0 THEN 1 ELSE 0 END) AS 购买用户数
FROM user_behavior_data
WHERE 加购>0 AND 收藏>0;
用户占比 13/55=23.6% 加购收藏到购买转化率 62%
我们可以发现
- 在所有购买的用户中,将近60%的人喜欢加购不收藏,23.6%的人加购并收藏
- 加购或收藏行为发生之后,购买的转化率会大大提升,只有极少数人会在点击之后直接购买。我们可以引导用户将商品加购,提高中间转化率。
3.2 复购率分析
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)*100/ sum(case when 购买>0 then 1 else 0 end ),2),'%') AS '复购率'
FROM user_behavior_data;
复购率反应客户的忠诚度,我们监控的时间是9天,9天内有65.45%的消费者复购,忠诚度还是比较高的。
3.3 每日新增用户数
select minday.`min(dates)` as 日期,count(userid) as 每日新增用户数
from
(SELECT userid,min(dates)
from userbehavior
group by userid) as minday
group by 日期
3.4 次日留存率
select dates,
ifnull(round((sum(case when (userid,dates)in
(select userid,date_add(dates,interval -1 day)
from userbehavior)
and (userid,dates)in (select userid,min(dates)from userbehavior group by userid)
then 1 else 0 end))/
(sum(case when (userid,dates)in
(select userid,min(dates)from userbehavior group by userid)
then 1 else 0 end)),3),0)as p
from userbehavior
group by dates
order by dates;
- 结合每日新增来看,11月25日和11月30日的新增用户用户质量非常高
- 本项目选取数据有限,12月1日至3日没有新增用户了,所以次日留存率为0
- Facebook有一个著名的40-20-10法则,新用户次日留存率为40%,那么这个产品的数据就是比较好的。11月25日至11月30日的新增用户次日留存都在40%以上,淘宝的留存率是挺好的。
3.5 跳失率
跳失率=只访问了一个页面就离开的访问次数占该入口总访问次数的比例,我们用只浏览了一个页面的访客数/总访客数来计算。
select a.跳失人数,a.总用户数,跳失人数/总用户数 as 跳失率
from (select
(select count(userid)from user_behavior_data
where 点击=1
and 收藏=0
and 加购=0
and 购买=0) as 跳失人数,
count(distinct userid) as 总用户数
from user_behavior_data) as a
就这9天而言,跳失率为0
说明没有用户只浏览了一个界面以后就离开,由此可见淘宝的商品广告足够有创意或者吸引力。
3.6 RFM分析
RFM模型包括
- 最近一次消费(Recency)
- 消费频率(Frequency)
- 消费金额(Monetary)
本数据集中不包括M数据,本次不考虑该指标。
3.6.1 消费频率(Frequency)
select max(购买),min(购买),avg(购买)as 平均购买次数
from user_behavior_data
where `购买`>0;
用户购买次数,最多达到12次,最少的是1次,平均每人购买了3次。
3.6.2 最近一次消费(Recency)
select MAX(购买间隔), Min(购买间隔), avg(购买间隔) as 平均购买间隔
from(
select userid,datediff('2017-12-04',max(dates)) as 购买间隔
from userbehavior
where behaviortype='buy'
group by userid) as a
用户的最近一次购买时间,间隔最多的是在2017-12-04的9天之前,最少是在一天前,平均是在3.6天前有购买记录。
3.6.3 根据R、F分类
我们根据R、F的高低将用户分成四类,每一类采取不同的运营策略,实现精细化运营。
注:R、F的高低是相对于平均值而言
我们查看一下以上四类各有多少人
先对客户分好类
select u.*,
(case when 购买间隔<=3.6 and 购买次数 >= 3 then '重要价值客户'
when 购买间隔 <=3.6 and 购买次数 < 3 then '重要发展客户'
when 购买间隔 >=3.6 and 购买次数 < 3 then '重要挽留客户'
when 购买间隔 >=3.6 and 购买次数 >= 3 then '重要保持客户'
else '一般客户' end)as 类型
from (select userid,datediff('2017-12-04',max(dates)) as 购买间隔,count(behaviortype)as 购买次数
from userbehavior
where behaviortype='buy'
group by userid) as u
order by 购买次数 desc,购买间隔 asc
再看一下每一类有多少人
select 类型,count(*) as 人数
from (select u.*,
(case when 购买间隔<=3.6 and 购买次数 >= 3 then '重要价值客户'
when 购买间隔 <=3.6 and 购买次数 < 3 then '重要发展客户'
when 购买间隔 >=3.6 and 购买次数 < 3 then '重要挽留客户'
when 购买间隔 >=3.6 and 购买次数 >= 3 then '重要保持客户'
else '一般客户' end)as 类型
from (select userid,datediff('2017-12-04',max(dates)) as 购买间隔,count(behaviortype)as 购买次数
from userbehavior
where behaviortype='buy'
group by userid) as u
order by 购买次数 desc,购买间隔 asc) as uu
group by 类型
order by 人数 DESC;
针对每一类人,采取不一样的策略
- 对于重要价值用户,关注并保持, 继续提升这部分客群满意度,提供VIP服务,增加留存;
- 对于重要发展客户,用会员权益或者发放优惠券的形式提高消费次数;
- 对于重要保持用户,及时通过邮件、短信或者客户端提醒,召回客户;
- 对于重要挽留客户,一方面应该优化推荐算法,分析其购物习性和商品偏好,精准投放广告,让用户看到喜欢的商品;另一方面,应该提升广告创意和吸引力,以唤醒他们的购买意愿。
四、结论
根据以上分析,我们可以得出结论:
- 用户活跃时段是19-22点,下班休息的时间
- 用户对categoryid为1620537、835895、965809的类目较感兴趣
- 在监控的9天内,用户的次日留存率都超过40%,复购率为65.45%,跳失率为0
- 在所有购买的用户中,将近60%的人喜欢加购不收藏,23.6%的人喜欢加购并收藏
- 加购或收藏行为发生之后,购买的转化率会大大提升,只有极少数人会在点击之后直接购买。
- 无论是浏览量还是销售量,主要依靠商品的长尾效应。
- 利用RFM模型对用户进行分群,我们找出有价值的用户
一些建议:
- 在19点以后开展营销活动,活动比较容易触达用户,可以提高网站流量
- 某些类目复购率较高,可以多推荐这些类目给目标客群
- 用户留存率、复购率、跳失率的数据都很好,要继续保持提升淘宝的广告创意和吸引力、商品质量、售后服务等等
- 建议卖家主动引导用户收藏加购,比如在商品主图或者详情页推出“收藏加购有小礼品赠送或 收藏加购会提前发货”等吸引新用户,还可以让客服人员主动告知顾客。
- 长尾效应的确能带来一部分收益,但是,繁多的种类对于商家来说其实是一种经营负担。二八定律告诉我们,商家其实可以通过打造爆款商品来获利。
-
使用RFM模型对客户群进行划分,对不同的客群采用差异化策略管理,达到精准营销:
- 对于重要价值用户,关注并保持, 继续提升这部分客群满意度,提供VIP服务,增加留存;
- 对于重要发展客户,用会员权益或者发放优惠券的形式提高消费次数;
- 对于重要保持用户,及时通过邮件、短信或者客户端提醒,召回客户;
- 对于重要挽留客户,一方面应该优化推荐算法,分析其购物习性和商品偏好,精准投放广告,让用户看到喜欢的商品;另一方面,应该提升广告创意和吸引力,以唤醒他们的购买意愿。
参考资料: