阅读之前看这里:博主是正在学习数据分析的一员,博客记录的是在学习过程中一些总结,也希望和大家一起进步,在记录之时,未免存在很多疏漏和不全,如有问题,还请私聊博主指正。
博客地址:天阑之蓝的博客,学习过程中不免有困难和迷茫,希望大家都能在这学习的过程中肯定自己,超越自己,最终创造自己。
随着互联网和电商的发展,人们习惯于网上购物。在国内,电商平台深受欢迎,每年的双11,双12活动,大量的用户在淘宝平台浏览商品,或收藏或加入购物车或直接购买。通过对用户的行为分析,探索用户购买的规律,了解商品的受欢迎程度,结合店铺的营销策略,实现更加精细和精准的运营,让业务获得更好的增长。
本数据来源:阿里天池数据集
数据集介绍:
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包含点击、购买、加购、喜欢),每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。原数据集总共1亿以上数据集,数据量太大,本次分析导入约3万条数据,并在导入的过程中5个字段联合设置主键,导入过程中已经剔除了重复值。
工具:Mysql数据库,Navicat Premium 12,Excel
首先明确我们的分析的目的,是要对电商用户行为进行一个分析。那么应该主要从用户维度、产品维度、用户行为的维度,如下图所示:
在用户维度我们想要知道什么问题呢?了解用户购买的行为习惯。
需要哪些指标呢:
PV、UV、平均访问量、跳失率等指标,分析用户最活跃的日期及活跃时段
从成交量、人均购买次数、复购率等指标,探索用户对商品的购买偏好,了解商品的销售规律
从收藏转化率、购物车转化率、成交转化率,对用户行为从浏览到购买进行漏斗分析
参照RFM模型,对用户进行分类,找出有价值的用户
分析步骤如下:
提出问题------理解数据------数据处理和清洗------构建模型------数据可视化
导入至Navicat的过程中将字段名更改为英文,方便编写SQL语言
字段 | 字段(中文名) |
---|---|
UserID | 用户ID |
ItemID | 商品ID |
Category | 商品类目ID |
Behavior | 行为类型(pv,buy,cart,fav) |
time | 时间戳 |
导入数据类型如下:
我们看到time的格式并不是标准的时间格式,所以需要对其进行处理。
alter table userbehavior add datetime datetime;
alter table userbehavior add time_date varchar(255);
alter table userbehavior add time_hour varchar(255);
update userbehavior set datetime=from_unixtime(time);
update userbehavior set time_date=mid(datetime,1,10);
update userbehavior set time_hour=right(datetime,8);
delete from userbehavior where time_date < '2017-11-25' or time_date >'2017-12-03';
select max(time_date),min(time_date) from userbehavior;
select count(UserID),count(ItemID),count(Category),count(Behavior),
count(datetime),count(time),count(time_date),count(time_hour)
from userbehavior;
可以看到一共有3833385条数据,并且无缺失字段和缺失值。
select count(distinct UserID) "访客数",
(select count(*) from userbehavior where Behavior = "pv") "点击数",
ROUND((select count(*) from userbehavior where Behavior = "pv")/
count(distinct UserID), 2) "人均访问数" from userbehavior;
我们可以看到这段时间内的访客数为37376,点击数为3431904,人均访问数为91.82次。可以看出:
在这9天中人均每天访问约9次,可见用户经常使用。
select 总用户数,只访问一次页面数,concat((只访问一次页面数 * 100) / (总用户数), "%") "跳出率"
from (select UserID,count(distinct UserID) "只访问一次页面数" from userbehavior
where UserID not in
(select distinct UserID from userbehavior where behavior ='fav')
and UserID not in
(select distinct UserID from userbehavior where behavior ='cart')
and UserID not in
(select distinct UserID from userbehavior where behavior ='buy')) as a
inner join (select UserID, count(distinct UserID) "总用户数" from userbehavior) as b
on a.UserID = b.UserID
结果跳出率只有5.8754%,跳出率比较低,说明大部分用户都转到下一个页面了,用户愿意在此上花费时间和精力,去挑选自己的商品,收藏或者加入购物车以及购买。
(1)每日用户的点击量,访客数,收藏次数,加入购物车次数,购买次数
select e.访客数,a.time_date,a.活跃点击量,b.收藏次数,c.加入购物车次数,d.购买次数 from
(select time_date, count(behavior) "活跃点击量"
from userbehavior
where behavior = "pv" group by time_date order by time_date) as a inner join
(select time_date, count(behavior) "收藏次数"
from userbehavior
where behavior = "fav" group by time_date order by time_date) as b inner join
(select time_date, count(behavior) "加入购物车次数"
from userbehavior
where behavior = "cart" group by time_date order by time_date) as c inner join
(select time_date, count(behavior) "购买次数"
from userbehavior
where behavior = "buy" group by time_date) as d join
(select time_date,count(distinct UserID) "访客数" from userbehavior
group by time_date order by time_date) as e
on a.time_date = b.time_date
and b.time_date = c.time_date
and c.time_date = d.time_date
and d.time_date = e.time_date;
此处还可以用case
语句
从图中可以看出所有的趋势随着日期变化基本一致。其中访客数在11月25日和12月2日有明显增加,同时点击量和其它指标也有所增加,分析知,这两天日期均为周六,说明在周六的用户使用频率和购物频率有所增加,可以针对周末多做一些运营或者商品推送和优化。
(2)各个时间段内用户的行为
select mid(time_hour,1,2) "时间",
sum(case when Behavior = "pv" then 1 else 0 end) "活跃点击量",
count(distinct UserID) "活跃用户数",
sum(case when Behavior = "fav" then 1 else 0 end) "收藏次数",
sum(case when Behavior = "cart" then 1 else 0 end) "加入购物车次数",
sum(case when Behavior = "buy" then 1 else 0 end) "购买次数"
from userbehavior group by mid(time_hour,1,2)
通过可视化图形观察其趋势和特征:
观察知,活跃点击量和访客数的趋势一致,在17-22时访客达到高峰,说明用户在下午和晚上经常访问APP,然后继续分析这些时间段内的购买情况:
可以观察到18-22时购买情况上升趋势明显,这个阶段人们倾向于做出购物决策,说明人们晚上做出购物决策的情况较多,这个时候人们有充足的时间进行商品挑选和加入购物车,也符合现代人们的生活作息。可以针对这个情况对晚上的商品进行更多的推送和其它运营策略。
(1)销量前十的商品和种类
select ItemID "商品编号",category "商品种类",count(behavior) "销量"
from userbehavior
where behavior = "buy" group by ItemID order by 销量 desc limit 10
通过对商品销量的分析,总销量最好的是商品3122135,所属种类为1516409。
销量最好的种类编号是1464116,销量为1432。
得到这些销量数据,我们可以针对性对销量好的商品和种类进行优化推广,权重提高等,当然还要分析销量好的种类是不是日常需求比较大的生活用品如米油等,还需要分析其销售额才能确定,部分商品虽然销量高但是销售额小,要综合判断。
(2)人均购买次数和复购率分析
select count(behavior) as 订单量,
count(distinct UserID) as 用户数,
count(behavior) / count(distinct UserID) as 人均购买次数
from userbehavior
where behavior = "buy"
可以看出人们的消费能力还是不错的,商品销售也不错,人均购买次数在3次左右。
select 用户数,购买两次及以上用户数,concat(购买两次及以上用户数 * 100 / 用户数, "%") as 复购率
from(
select count(distinct UserID) as 用户数,
(select count(*) as 购买两次及以上用户数
from (select count(UserID) as 重复购买数
from userbehavior
where behavior = "buy"
group by UserID
having count(UserID) > 1) as b) as 购买两次及以上用户数
from userbehavior
where behavior = "buy") as c
可以看出复购率较高,说明大多数人在消费以后还愿意继续购买。
(3)经常消费的重点客户(次数和金额)
select UserID,count(UserID) as 购买次数
from userbehavior
where behavior = "buy"
group by UserID
order by count(UserID) desc
limit 10
看出购买次数的前十客户,这部分客户需要重点关注,同时还要关注他们的消费金额和消费行为习惯等。
(1)用户行为转化漏洞分析
select behavior as 用户行为,count(behavior) as 用户行为次数
from userbehavior
group by behavior
order by count(behavior) desc
由以上漏斗图分析知:用户从进入APP浏览页面,在购买环节的最终转化率为2%,用户在点击页面后用户流失巨大,从浏览到购买转化率如何。用户购买的路径主要有以下两种:
select count(distinct a.UserID) "点击数",
count(distinct b.UserID) "收藏数",
count(distinct c.UserID) "购买数"
from
(select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "pv") as a
left join
(select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "fav") as b
on (a.UserID = b.UserID and a.ItemID = b.ItemID and a.Category = b.Category and a.time < b.time)
left join
(select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "buy") as c
on (b.UserID = c.UserID and b.ItemID = c.ItemID and b.Category = c.Category and b.time < c.time)
用户在浏览商品后,大约1/5的用户会进行收藏,然后收藏中的用户大约有13.26%的用户会进行购买。
select count(distinct a.UserID) "点击数",
count(distinct b.UserID) "加入购物车数",
count(distinct c.UserID) "购买数"
from
(select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "pv") as a
left join
(select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "cart") as b
on (a.UserID = b.UserID and a.ItemID = b.ItemID and a.Category = b.Category and a.time < b.time)
left join
(select distinct UserID,ItemID,Category,time from userbehavior where Behavior = "buy") as c
on (b.UserID = c.UserID and b.ItemID = c.ItemID and b.Category = c.Category and b.time < c.time)
从上图可以看出用户浏览商品后,大概会有41.13%的用户加入购物车,比进行收藏的用户高很多,但是加入购物车后,只有17%左右的用户最终进行了购买,80%多的用户并没有进行购买,这个环节是需要我们去分析的。推测原因可能是:
1.加入购物车是为了与不同店铺的同种产品进行比价;
2.为了凑单,进行满减;
3.先放着,过几天再购买;
4.等活动优惠
业务问题:在点击后用户流失率较高,那么用户流失的原因是什么?
淘宝推送是根据用户日常的浏览行为数据,比如日常搜索的关键词,收藏和加购的商品,已经关注的店铺,还有购买记录等,综合判断来给用户进行推送可能感兴趣的商品。如果淘宝的推送机制合理,那么推送的商品和用户需求的商品将会呈现较高的匹配度,从而用户最终的购买转化率也相应较高,从而推送的商品销量变高,变成热销商品;反之则较低,即表明用户流失严重。本次分析使用假设检验分析方法对用户流失原因进行分析。分析思路如下图所示:
提出假设:平台推送的商品和用户需求不匹配,导致用户在浏览过程中没有找到喜欢的商品,进而导致用户流失。
收集证据:统计用户数量、商品数量、商品类别数和用户行为类型数等。
select count(distinct UserID) as 用户数,
count(distinct ItemID) as 商品数,
count(distinct Category) as 商品类别,
count(distinct behavior) as 用户行为类型
from userbehavior
可以看到数据集中用户数有37376各,930317个商品,商品类型7106种,4种用户行为。
表明数据集中类别丰富,商品数量和种类充足。
在前面已经分析了用户对哪些商品有喜好,这里重点关注用户点击的商品和用户下单的商品之间的关系,是否支持我们的假设:平台推送的商品和用户需求不匹配。
select Category 商品种类,count(Category) as 点击次数
from userbehavior
where behavior = "pv"
group by Category
order by 点击次数 desc
limit 10;
select ItemID 商品ID,Category 商品所属种类, count(ItemID) as 点击次数
from userbehavior
where behavior = "pv"
group by ItemID
order by 点击次数 desc
limit 10;
我们看到点击量中前十的商品中最多的是4756105,符合商品点击品类。然后有4个商品都属于3607361,说明这两个品类的商品比较受欢迎。商品id主要集中在812879,3845720,2331370这几个商品上。
分析完点击量之后,分析一下热销的商品即可找出点击量与购买量之间的关系。
select distinct u3.ItemID 商品ID,
u3.点击次数,count(u1.ItemID) as 购买次数,
concat((count(u1.ItemID) * 100) / u3.点击次数, "%") as 购买率
from userbehavior u1,
(select ItemID,Category,count(ItemID) 点击次数
from userbehavior
where behavior = "pv"
group by ItemID
order by 点击次数 desc
limit 10) u3
where u1.ItemID = u3.ItemID
and behavior = "buy"
group by u3.ItemID
order by u3.点击次数 desc
由上图我们可以看到点击最高的商品812879的购买率只有0.43%,而点击量排第五的商品购买率达到了4.43%。
结论:假设成立
通过以上分析,可以得出结论淘宝的推送机制不合理,推送的商品无法和用户的需求不匹配,导致用户在浏览过程中没有找到想要的商品,从而用户实际购买的转化率非常低,即用户流失严重。
RFM模型是衡量客户价值和客户创利能力的重要工具。该模型通过客户的最近交易行为(Recency)、交易频率(Frequency)以及交易金额(Monetary)三项指标来描述该客户的价值状况。一般来说,会将这三项指标分成几个区间进行评分,通过计算评分找到有价值的用户,并对用户进行分类。
最近一次消费(Recency):是指最近一次消费距离上一次消费之间的时间长短。它反映了客户对产品的态度以及对品牌价值的信任度,它关乎消费者的存留状况。
消费频率(Frequency):是指某个特定时间内消费的次数。它直接反映了客户的忠诚度,消费频率越高,忠诚度就越高;忠诚度越高的客户数量越多,公司的竞争优势越强,市场份额越大。
消费金额(Monetary):是指一定时间内消费某产品金额。它反映的是客户的价值,价值越高,给公司创造的利益就更大。
因为数据源里没有金额相关的信息,所以只通过R和F来对客户价值进行评分。
R:用户最近一次的购买时间到12月3日的时间差表示用户最近一次消费间隔
F:用户在11月25日到12月3日之间购买的次数表示用户消费频率
M:本次数据集未包含相关字段,故不考虑
(1)建立打分规格
(2)用户分类步骤
1.计算R、F、M值
2.给R、F、M按价值打分
3.计算价值的平均值,得出R、F、M价值的高低,高于平均值打分为“高”,反之则“低”
4.对比用户分类规则表,得出用户分类
create view score_R as
select UserID,
(case when 购买天数 between 0 and 2 then 1
when 购买天数 between 3 and 4 then 2
when 购买天数 between 5 and 6 then 3
when 购买天数 between 7 and 8 then 4 else 0 end
)as 购买得分
from
(select UserID,datediff(max(time_date),'2017-11-25')as 购买天数
from userbehavior
where behavior='buy'
group by UserID)as a
order by 购买得分 desc;
create view score_F as
select UserID,
(case when 购买次数 between 0 and 18 then 1
when 购买次数 between 19 and 36 then 2
when 购买次数 between 37 and 54 then 3
when 购买次数 between 55 and 72 then 4 else 0 end
)as 购买频率得分
from
(select UserID,count(behavior)as 购买次数
from userbehavior
where behavior='buy'
group by UserID) b
order by 购买频率得分 desc;
通过上面两个步骤,从两个维度:最近购买时间及购买频率,分别给用户进行了评分。接下来用这两项的每一项平均值作为判断高于还是低于,比如重要价值用户,必须是两项的分值都比平均值要高,才能作为重要价值的用户。
求两项评分的均值:
将获得的两项评分分别和它们的均值进行比较,对客户进行分类:
create view users_classify as
select UserID,
(case when R>3 and F>1 then '重要价值用户'
when R>3 and F<=1 then '重要保持用户'
when R<=3 and F>1 then '重要发展用户'
when R<=3 and F<=1 then '一般价值用户' else 0 end
)as 用户类型
from
(select a.UserID,a.购买得分 as R,b.购买频率得分 as F
from score_R as a inner join score_F as b
on a.UserID=b.UserID) c;
select count(用户类型) from users_classify where 用户类型='重要价值用户';
select count(用户类型) from users_classify where 用户类型='重要保持用户';
select count(用户类型) from users_classify where 用户类型='重要发展用户';
select count(用户类型) from users_classify where 用户类型='一般价值用户';
对于重要价值用户,他们是最优质的用户,需要重点关注并保持, 应该提高满意度,增加留存;
对于重要保持用户,他们最近有购买,但购买频率不高,可以通过活动等提高其购买频率;
对于重要发展用户,他们虽然最近没有购买,但以往购买频率高,可以做触达,以防止流失;
对于一般价值用户,他们最近没有购买,以往购买频率也不高,特别容易流失,所以应该赠送优惠券或推送活动信息,唤醒购买意愿。
1、平台的人均访问数为91.82次,跳出率为5.8754%,可见用户经常使用,用户粘性较高。
2、访客数在11月25日和12月2日有明显增加,说明用户在周末比较活跃,应该在周末多进行一些促销活动促进销量。
3、淘宝用户活跃黄金时间段一般在晚上20点到22点,然而在9-16点用户更倾向于狼吞虎咽般点击后直接购买,19点-23点用户更愿意慢慢品尝,在点击浏览后加入购物车或收藏。可在20点到22点进行推广和宣传活动,推送促销活动可设置在9点-16点,刺激消费。
4、重点关注销量较高的商品和商品类别,如3122135,1464116这些品类,可推出爆款和个性化推荐。
5、用户加入购物车或收藏商品说明已心仪商品,然而变现的转化率仅仅只有16%和13%,转化率并不高,建议个性化推送购物车降价或优惠活动或满减活动,显示剩余库存刺激消费。
6、淘宝的推送机制不合理,推送的商品无法和用户的需求不匹配,导致用户在浏览过程中没有找到想要的商品,从而用户实际购买的转化率非常低,即用户流失严重。
建议:
建议通过发放优惠券、红包等形式,引导用户在点击浏览后将商品放入购物车或收藏,提高转化率;
建议优化搜索和筛选功能,提高推送的针对性,让用户能够快速准确地找到目标商品;
优化商品详情页和商品描述,增加类似商品比较功能,减少用户浏览选择时间。
7、利用RFM模型对用户进行分群,用户主要集中在重要发展客户和一般价值客户,利用有限的资源抓住重要发展客户(潜力用户),重要挖掘其潜在价值。
博主的其它数据分析实战项目看这里:
数据分析项目实战—信用卡客户违约概率预测
Kaggle数据分析入门之–酒店预订需求