一、背景描述
随着移动互联网的飞速发展,网上购物成为了人们生活的一部分。淘宝作为电商交易平台,有着较大的用户流量,本文将对淘宝用户的行为数据进行分析,分析将从以下几点出发:
1、用户价值
2、各环节流失率
3、不同时间下的用户行为
4、用户对不同种类商品的喜好
二、数据说明
1.数据来源
阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1
数据集包含了 2017年11月25日 至 2017年12月3日 之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据总行数为 100,150,807 行,由于数据量巨大,暂时上传了1百万条进行处理,这部分数据中包含 9415 名用户的行为记录。
2.字段说明
数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
用户行为类型共有四种,它们分别是:
三、数据清洗
1、设置字段名称
由于默认的表头是:C1、C2、C3、C4、C5
原数据通过 datagrip 截取上传到了云端服务器,这里直接在上传数据时进行字段的修改,将默认的 C1~C5 修改成:user_id、item_id、category_id、behavior_type、timestamp
2、缺失值处理
通过 sql 查询数据是否存在缺失值
select *
from userbehavior
where user_id is null or item_id is null or category_id is null or behavior_type is null or timestamp is null ;
运行代码,不存在空值
3、重复值处理
查找数据中是否存在重复值
select user_id,item_id,timestamp,behavior_type, count(*)
from userbehavior
group by user_id, item_id, timestamp,behavior_type
having count(*)>1;
运行之后,发现存在重复值
这里需要将重复的数据删除,并保留一条原数据。因为原数据上传时,主键缺失了,这里新建 id 列,非空、自增长并命名为主键。通过 id 列,对重复数据进行区分。
alter table userbehavior
add id int not null auto_increment primary key;
通过分组的形式找到最大的 id ,然后再找到除了这些结果之外的 id,即为重复的多余数据了。但是直接将查询的结果作为条件进行删除会报错,这里要设置一个中间表过渡下,就可以删除了。
delete from userbehavior
where id not in(
select *
from(
select max(id)
from userbehavior
group by user_id,item_id,timestamp,behavior_type) a
);
这里其实也可以在数据上传的时候定义多个主键进行去重。
4、数据一致化处理
由于数据中的时间是以时间戳的形式展现的,不便于观看和分析,将其拆分成年月日,时分秒两列,存放日期和时间
# 增加日期列
alter table userbehavior add data varchar(255);
# 增加时间列
alter table userbehavior add time varchar(255);
# 从时间戳里提取日期
update userbehavior
set data=from_unixtime(timestamp ,'%Y-%m-%d');
# 从时间戳里提取时间
update userbehavior
set time=from_unixtime(timestamp ,'%H-%i-%s');
数据集的时间区间在 2017年11月25日 至 2017年12月3日 之间,查询是否有不符合条件的数据
select *
from userbehavior
where data<'2017-11-25' or data>'2017-12-3';
结果存在 459 行不符合条件的数据,进行删除
delete
from userbehavior
where data<'2017-11-25' or data>'2017-12-3';
四、数据分析
1、用户价值
用户之间存在着分层,不同的用户所能创造的价值也不同,因此通过 RFM模型 来衡量用户的价值,由于数据集中缺少订单金额数据,因此本次分析中不考虑 M 维度,只分析 R 和 F 两个维度。
R (最近购买时间):
数据集的时间范围在 2017年11月25日 至 2017年12月3日 之间,共 9 天,将其分为 4 档,0-1,2-3,4-5,6-8,分别对应评分 4 到 1 。
select user_id,
case
when d between 6 and 8 then 1
when d between 4 and 5 then 2
when d between 2 and 3 then 3
when d between 0 and 1 then 4
else null
end R
from(select user_id,datediff('2017-12-03',max(data)) d
from userbehavior
where behavior_type='buy'
group by user_id) t;
运行代码,可以看到已经成功计算出了各个用户 R 值所对应的评分
F(消费频率):
消费频率是用户在固定时间内的购买次数(一般是1年)。但是如果实操中实际店铺由于受品类宽度的原因,比如卖 3C 产品,耐用品等即使是忠实粉丝用户也很难在1年内购买多次。所以,一般店铺在运营 RFM 模型时,会把 F 值的时间范围去掉,替换成累计购买次数。
通过代码计算出用户在这段时间内的累计购买次数
select user_id,
sum(case behavior_type when 'buy' then 1 else 0 end) s
from userbehavior
group by user_id
order by s desc;
最大值为39
最小值为0
付费用户中消费次数从低到高为 0-39 次,将其分为4档,0-9,10-19,20-29,30-39 分别对应评分 1 到 4。
select user_id,
(case
when s between 0 and 9 then 1
when s between 10 and 19 then 2
when s between 20 and 29 then 3
when s between 30 and 39 then 4
else null
end) F
from (
select user_id,
sum(case behavior_type when 'buy' then 1 else 0 end) s
from userbehavior
group by user_id) t
order by F desc;
将 R 和 F 汇总到一起,并进行客户分层
select *,(
case
when R>2 and F>2 then '价值客户'
when R<=2 and F>2 then '保持客户'
when R>2 and F<=2 then '发展客户'
else '挽留客户'
end
) user_hierarchy
from (
select user_id,
(case
when d between 6 and 8 then 1
when d between 4 and 5 then 2
when d between 2 and 3 then 3
when d between 0 and 1 then 4
else null
end) R,
(case
when s between 0 and 9 then 1
when s between 10 and 19 then 2
when s between 20 and 29 then 3
when s between 30 and 39 then 4
else null
end) F
from(select user_id,datediff('2017-12-03',max(data)) d,count(behavior_type) s
from userbehavior
where behavior_type='buy'
group by user_id) t
) u
order by R desc,F desc;
将数据进行可视化,发现只存在价值客户、挽留客户和发展客户这三个分层,其中发展客户的占比最多,而价值客户的占比不到百分之一。
由于数据集里不存在金额的数据,不能对不同客户的所带来的价值进行评估。但是根据二八法则,只有少数的价值客户,才会带来更多的价值,所以这里我们着重对价值客户进行分析。以 id:42193 的用户为例。
通过数据,我们发现,这个客户每天都有购买行为,并且几乎不会使用收藏功能,因为加购量基本上都低于购买量,所以该客户存在直接浏览后购买和加入购物车后购买两种行为。购买量的三个最高值是11月26号、11月27号和12月1号,分别对应着周日、周一和周五,初步判断,该用户周中的购买行为较弱。
以上是该客户购买量前 5 的商品类目,可以根据该客户的活跃规律进行相关活动的推送。
2、各环节流失率
分析用户从浏览到最终购买整个过程的流失情况,包括浏览、收藏、加入购物车和购买等环节。
首先计算下用户总数(UV)、APP总访问量(PV),平均用户访问量(PV/UV)
select count(distinct user_id) UV,
sum(if(behavior_type='pv',1,0)) PV,
sum(if(behavior_type='pv',1,0))/count(distinct user_id) 'PV/UV'
from userbehavior
查询只点击一次浏览的用户数量,结果为 0,截取的这部分数据里没有人只浏览过一个页面就离开了 APP ,跳失率为 0,说明淘宝对于用户有着足够的吸引力。
select count(*)
from(
select user_id
from userbehavior
group by user_id
having count(behavior_type)=1
) t;
统计用户各个行为的总数量,进行漏斗分析
select behavior_type,count(*)
from userbehavior
group by behavior_type
将数据进行可视化,由于加入购物车和收藏都是浏览和购买之间的确定购买意向的行为,所以将它们算成一个阶段。可以看到从浏览到有购买意向只有 9% 的转化率,从浏览到购买只有 2% 的转化率,而购买次数占使用购物车和收藏功能的 23% ,说明从浏览到进行收藏和加入购物车的阶段是指标提升的重点环节。
统计每一个行为的独立用户数
select behavior_type,count(distinct user_id)
from userbehavior
group by behavior_type
order by count(distinct user_id) desc
下面是各个行为相对于浏览量的百分比,可以看到使用 APP 的用户中有 68% 的付费用户,用户付费转化率相当高。
3、不同时间下的用户行为
由于数据集的时间总共为 9 天,则只能以天和小时为单位分析用户的购买行为,找出用户活跃规律。
1、分析每一天的用户行为
select data,
sum(if(behavior_type='pv',1,0)) pv,
sum(if(behavior_type='cart',1,0)) cart,
sum(if(behavior_type='fav',1,0)) fav,
sum(if(behavior_type='buy',1,0)) buy
from userbehavior
group by data;
对数据进行可视化,11月25号、26号为周六,周日,用户的各项行为有一定的上升趋势,而随着周一的到来开始下降,从周四周五开始又开始上升,并在周六到达一个小高峰。推测是双十二即将到来,各种宣传活动吸引用户增加行为。用户周中的各项行为趋势都不是很高,周末更有精力去进行消费,所以可以将各类活动集中在周末进行。
2、分析每小时的用户行为
因为 12月2号 的指标最高,所以我们截取这天的数据进行24小时的分析。
我们发现,这一天内用户的购买量有三个峰值,分别是 10点、15点和 21点,且用户在晚上 7点到 10点间最为活跃,比较符合上班族的作息时间,更多人愿意在空闲的时候进行消费。因此可以选择在晚间进行营销投入,更有可能取得收益。
4、用户对不同种类商品的喜好
统计所有商品的购买次数,同时找到购买次数、浏览次数、收藏次数和加入购物车次数最多的商品。
select s,count(*)
from (select item_id,count(*) s
from userbehavior
where behavior_type='buy'
group by item_id) t
group by s
order by count(*) desc
在本次统计的数据中,只购买一次的产品有 14650 种,购买两次的产品有 1423 种,本次分析的商品中用户购买的共有 16483 种商品,却没有出现购买用户数量非常集中的商品,购买一次的商品占到 88.9%,说明商品售卖主要依靠长尾商品的累积效应,而非爆款商品的带动。
列出销量前 10 的商品,商品id为 3122135 的商品销量最高,为 12 次,接下来再来看下商品浏览量排行
浏览次数最多的商品id为 812879,有302次,而销量最高的商品却不在前 10 的排名里,说明这些吸引用户更多注意力的商品没有很好的转化为实际销量。
加购次数最多的商品id为 2560262 ,次数为 23 次,是销量次数排第二的商品,而浏览量第一的商品排在了第三位。
收藏次数最多商品id为 812879 ,次数为 16 次,是浏览量排第一的商品。
通过这些数据,我们发现浏览次数较多的商品被用户加入购物车或者收藏的概率更大,而购买量与加入购物车有着更强的关联。
五、结论汇总
本文对阿里云天池上的淘宝用户行为数据进行了分析,截取了100万条数据,从用户价值、各环节流失率,不同时间下的用户行为、用户对不同种类商品的喜好四个方面进行了分析,得到了以下结论:
1、通过 RFM 模型找出最具价值的核心付费用户群,对这部分用户的行为进行分析,R 和 F 评分都很高的用户是体系中的最有价值用户,需要重点关注,并且活动投放时需谨慎对待,不要引起用户反感。对于 R 值为 4 而 F 值为 1 的用户,用户粘性不强而消费时间间隔较短,运营活动可以重点针对这部分用户,提高用户使用产品的频率,可以通过拼团打折、积分兑换等活动唤起用户注意力。
2、分析用户行为各个阶段的流失率,由于加入购物车和收藏都是浏览和购买之间的确定购买意向的行为,所以将它们算成一个阶段。可以看到从浏览到有购买意向只有 9% 的转化率,从浏览到购买只有 2% 的转化率,而购买次数占使用购物车和收藏功能的 23% ,说明从浏览到进行收藏和加入购物车的阶段是指标提升的重点环节,针对这一环节改善转化率的建议有:
(1)优化电商平台的搜索匹配度和推荐策略,主动根据用户喜好推荐相关的商品,优化商品搜索的准确度和聚合能力,对搜索结果排序优先级进行优化。
(2)在商品详情页的展示上突出用户关注的重点信息,精简信息流的呈现方式,减少用户寻找信息的成本
(3)优化加入购物车和收藏按键的触达,用户在滑屏时也能方便触达,增加功能使用的次数。
3、研究用户在不同时间尺度下的行为规律,一周中的高峰期在周末,符合上班族作息时间中的空闲时期。而平时一天中有三个峰值,分别是 10点、15点和 21点,且用户在晚上 7点到 10点间最为活跃,针对高峰期进行营销活动收益最高,此时使用人数最多,活动容易触达用户,营销活动的形式可以通过促销、拼团等形式进行。
4、商品售卖主要依靠长尾商品的累积效应,而非爆款商品的带动。销量最高的商品的浏览量未进前 10,而浏览次数最高的商品未进销量前 10,说明这些吸引用户更多注意力的商品没有很好的转化为实际销量。
针对浏览量高而销量不高的这部分商品,需要提高的是用户从点击进入商品详情页到最终购买的体验。作为商家端可以从以下几个方面提高销售额:
(1) 商品详情页的实际价格是否相比展示价格偏差过大,有的商家为了吸引用户点击在商品展示页投放的价格具有较强吸引力,但实际价格偏高,在用户心中反而引起反感
(2)详情页的信息流展示是否合理,是否将用户最想看到的部分置于容易看到的位置,便于信息的获取
(3)优化商品展示的形式,利用视频等方式给用户更直观的感受,提高照片的美观程度
(4)评论区评价管理,尤其对于差评区的用户反馈进行认真对待,提高自身服务质量