电商平台的用户行为分析,能一定程度的推动运营、产品等迭代,提供决策支持。
数据集来源: 阿里云池
样本量: 3835331
方法工具:
本文用2017年11月至12月的淘宝用户行为,AARRR模型及RMF模型利用进行分析。数据虽有点旧,但重在锻炼分析框架。
本文使用的分析工具以MySQL为主,涉及分组汇总,引用变量,视图,关联查询等内容。
第一,基于AARRR漏斗模型,使用常见电商分析指标pv uv,从新增用户数量、各环节转化率、新用户留存率三个方面进行分析,确定影响新增用户数量的因素,找到需要改进的转化环节,发现留存现存问题。
第二,将颗粒度逐渐细化,探寻用户的商品偏好,哪类商品销量最好,最坏,复购率、回购率最好的商品是什么
第三:研究用户在不同时间尺度下的行为规律,找到用户在不同时间周期下的活跃规律
第三,根据用户画像及价值分类,选择合适的推广方式。用户什么时段最活跃。
第四:利用RFM模型,进行客户分类评分,找出对应策略。
(1)数据导入
因为数据量比较大,一共383万,具体怎么导我之前的文章介绍有过。
以下是代码,等待一段时间才可载入
D:\> cd change\mysql-8.0.19-winx64\bin
D:\change\mysql-8.0.19-winx64\bin>mysql --local-infile -u root -p
mysql> load data local infile'D:/xcw/work/数据面试/电商平台用户分析/UserBehavior.csv' into table taobao.xwfx
-> fields terminated by ',';
数据清洗的一般步骤
desc xwfx
看看大概数据类型和数据是否含null值,最后两行是我后加的,下文会讲到。
我们发现最后一列是时间戳,查过之后发现是一种以秒来记录的,与格林威治标准时间的相差秒数,因此,我们把他换算成日期和时间
先插入两列
ALTER TABLE xwfx ADD date_ymd VARCHAR(255);
# 日期列
ALTER TABLE xwfx ADD date_time VARCHAR(255);
#时间列
接着进行转化,记得要加where,不然有的版本会报错
因为我暂时还没设置主键,想先看看时间转换结果,
SET SQL_SAFE_UPDATES = 0 #没有主键更新或删除时会报错,我得先设置安全模式关闭。
UPDATE xwfx
SET date_ymd = FROM_UNIXTIME(timestamp,'%Y-%m-%d') where userid >0
SET SQL_SAFE_UPDATES = 0
UPDATE xwfx
SET date_time = FROM_UNIXTIME(timestamp,'%H:%i:%s') where userid >0;
上面可能会出现失去与服务器连接,因为数据量有点大,需要自己先设置一下DBMS connection read time out(in seconds)适当调大。(不过还是建议大家设个主键)
最后得到下图,日期转换结束
SELECT
MAX(date_ymd),
MIN(date_ymd)
FROM xwfx;
发现有脏数据
且数据量比较大,导致我每次操作都要等很久,简单看了一下数据集,
SELECT
MAX(date_ymd),
MIN(date_ymd),
count( distinct userid),count(1)
FROM xwfx
WHERE date_ymd >='2017-11-25 '
and date_ymd <='2017-11-31 '
选择2017.11.25至2017.11.31号这7天的数据
同样的就得删去这7天之外的数据
SET SQL_SAFE_UPDATES = 0
Delete
FROM xwfx
WHERE date_ymd <'2017-11-25 '
or date_ymd > '2017-11-31 '
最终剩下2353708 row(s) ,正式开始分析啦…
(1)获客:每日新增用户数
定义首次购买的用户为新增客户,每天都有新增用户,但是新增用户在递减。并未出现回升现象,发现问题应及时采取一定拉新策略。
select count(distinct t.userid)as 新增用户数,t.日期 from
(SELECT
userid,min(date_ymd)as'日期'
FROM taobao.xwfx
where behavior='buy'
group by userid)t
group by t.日期
(2)激活:用户数、商品数、类目数
SELECT COUNT(DISTINCT userid) AS num_user,
COUNT(DISTINCT itemid) AS num_item,
COUNT(DISTINCT categoryid) AS num_category
FROM taobao.xwfx
整体上看本次分析共涉及37367名用户,近70万商品,近7000个品类。
(2)pv、uv、日均pv
分析pv(总体访问量)及uv(独立访客数)
总体访问量2107723人次,但独立访客数37367人次。
SELECT count(1) as 总体访问量 FROM taobao.xwfx
where behavior = 'pv'
日均访问量维持在33万~36万人次左右,流量还是很大且比较稳定的
而11月25-26数据量大原因是碰到周末啦!!!!,果然周末还是量比较大的
而11月28号这天是周二哦,来个狂欢星期二吧,开个玩笑哈哈
SELECT date_ymd as 日期,count(behavior) as 日均访问人数 FROM taobao.xwfx
where behavior = 'pv' and date_ymd >='2017-11-25'
group by date_ymd
order by date_ymd
SELECT behavior as 阶段,count(1) as 人数,count(distinct userid) as 用户ID FROM taobao.xwfx
group by behavior
order by count(1) desc
将收藏和加入购物车但没有买的整合成第二阶段
漏斗图
(4)流量转化率、成交转化率、跳出率
流量转化率=购买订单数量/浏览页面次数=48892/2107723=2.32%
平均每次访问会带来2.32%的购买订单数量,
成交转化率=购买订单数量/UV=48892/37095=1.32%
平均每一访问用户购买1.32商品。
跳出率 看出仅浏览,但不去加购也不去收藏的用户比例.
跳出率=5447/110017=4.95%
约有4.95%的用户浏览了一次页面就跳出了。相对来说我觉得表现的很不错了,基本大部分还是有选择加购和收藏的。
SELECT COUNT(*) AS pv_quit,
count(DISTINCT userid) AS user_quit
FROM xwfx
WHERE
userid IN
(SELECT DISTINCT userid FROM xwfx
WHERE behavior='pv')
AND
userid NOT IN
(SELECT DISTINCT userid FROM xwfx
WHERE behavior IN ('fav','cart','buy'));
select t1.date_ymd,count(t1.date_ymd),count(t2.date_ymd),
count(t2.date_ymd)/count(t1.date_ymd) as 留存率 from
(SELECT userid,date_ymd FROM taobao.xwfx
where behavior='buy'
group by date_ymd,userid)t1
left join
(SELECT userid,date_ymd FROM taobao.xwfx
where behavior='buy'
group by date_ymd,userid)t2
on t1.userid=t2.userid
and t1.date_ymd=date_sub(t2.date_ymd,interval 1 day)
group by t1.date_ymd
当日购买后,3天后再次购买的人数
select t1.date_ymd,count(t1.date_ymd),count(t2.date_ymd),
count(t2.date_ymd)/count(t1.date_ymd) as 留存率 from
(SELECT userid,date_ymd FROM taobao.xwfx
where behavior='buy'
group by date_ymd,userid)t1
left join
(SELECT userid,date_ymd FROM taobao.xwfx
where behavior='buy'
group by date_ymd,userid)t2
on t1.userid=t2.userid
and t1.date_ymd=date_sub(t2.date_ymd,interval 2 day)
group by t1.date_ymd
整体上看,次日留存率在23-24%间,3日留存率在22-23%,起码在数据集时间范围内回购率还是很高的。
(6)复购率
用户中购买1次以上的占总购买数的比例
select count(t.购买次数),count(if(t.购买次数>1,1,null)),
count(if(t.购买次数>1,1,null))/count(t.购买次数) as 复购率 from
(select userid ,count(userid) as 购买次数 from xwfx
where behavior='buy'
group by userid )t
(一)热销商品、热销类别
标签为3122135这个商品销量最好,共有34个用户购买了,我很好奇是什么
select itemid,count(distinct userid) from xwfx
where behavior='buy'
group by itemid
order by count(distinct userid) desc
从类别上看,1464116标签号类别销量最好,有808个用户购买这一类商品,生活用品类吧感觉是
select categoryid,count(distinct userid) from xwfx
where behavior='buy'
group by categoryid
order by count(distinct userid) desc
(1)一天中用户活跃时段分布
select hour(date_time), count(behavior),
sum(case when behavior='pv' then 1 else 0 end) as '点击次数',
sum(case when behavior='cart' then 1 else 0 end) as '加购次数',
sum(case when behavior='fav' then 1 else 0 end) as '收藏次数',
sum(case when behavior='buy' then 1 else 0 end) as '购买次数'
from xwfx
group by hour(date_time)
order by hour(date_time)
我们可以看出:
(1)每日1点到5点用户活跃度快速降低,降到一天中的活跃量最低值,6点到10点用户活跃度逐渐上升
(2)下午整体时段的用户活跃度较平稳,下午5点至7点有所回落,应该还是符合用户生活习惯,该时间段大多数处于下班、接放学、煮吃这样一个生活状态,相对在电商时间较少
(3)用户整体在晚上活跃度高,在10点-11点见达到流量峰值,是下午时段的2倍左右,
(2)一周中用户行为分析
select date_format(date_ymd,'%w') +1 as '星期',count(behavior)as 用户行为总量,
sum(case when behavior ='pv' then 1 else 0 end) as '浏览量',
sum(case when behavior ='cart' then 1 else 0 end) as '加购物车',
sum(case when behavior ='fav' then 1 else 0 end) as '收藏量',
sum(case when behavior ='buy' then 1 else 0 end) as '购买量' from xwfx
group by date_ymd
order by date_format(date_ymd,'%w')
漏了一天是因为我之前最开始就只选了其中6天的数据,不过先试着分析看看
(1)说明在选取的11.25-11.30这个时段,商家及平台并未做太多活动,用户的各阶段表现相对平稳。
(2)周天的浏览量相对高,但此时购买量并未有显著上升,相反表现不如周一。
使用RFM模型对所有的客户进行客户价值分类,可以使推广方式更有针对性。
RFM模型:
R(Recency):是指最近一次消费
F(Frequency):是指消费频率
M(Monetary):是指消费金额
(1)计算最近一次消费时间和消费频率
select userid,
datediff(‘2017-12-01’,max(date_ymd))as ‘最后一次交易距今时间’,
count(behavior)as ‘交易次数’
from xwfx
where behavior =‘buy’
group by userid
看一看最大值值
select max(t.最后一次交易距今时间),max(t.交易次数) from(
select userid,
datediff(‘2017-12-01’,max(date_ymd))as ‘最后一次交易距今时间’,
count(behavior)as ‘交易次数’
from xwfx
where behavior =‘buy’
group by userid)t
因为数据集中没含消费金额,我们假设他们的M值普遍较高,都为高消费金额的客户。
重点看R与F值的分析。
(2)对客户进行评分
select userid,
(case when t.最后一次交易距今时间 in(0,1) then 4
when t.最后一次交易距今时间 in(2,3) then 3
when t.最后一次交易距今时间 in(4,5) then 2
when t.最后一次交易距今时间 in(6,7) then 1
when t.最后一次交易距今时间 >7 then 0
else null
end) as Recent,
(case when t.交易次数 >=16 then 4
when t.交易次数 between 11 and 15 then 3
when t.交易次数 between 6 and 10 then 2
when t.交易次数 between 1 and 5 then 1
when t.交易次数 =0 then 0
else null
end) as Frequent
from
(select userid,
datediff('2017-12-01',max(date_ymd))as '最后一次交易距今时间',
count(behavior)as '交易次数'
from xwfx
where behavior ='buy'
group by userid)as t
group by userid
order by Recent desc
导出计算得R的均值为2.85,F的均值为1.10
下图是以分值来划分客户类型,因为看了一下整体F均值才1.1,
故我想用均值来划分四个客户层次,新建了一个RMF表:
注:如果有M,参考一下底下的图片及对应策略
(3)客户分层绘图
SELECT userid, Recent, Frequent,
(CASE WHEN Recent>=2.85 AND Frequent>=1.10 THEN '重要价值客户'
WHEN Recent<2.85 AND Frequent>=1.10 THEN '重要唤回客户'
WHEN Recent>=2.85 AND Frequent<1.10 THEN '重要推广客户'
WHEN Recent<2.85 AND Frequent<1.10 THEN '重要挽留客户'
END) '客户分类' FROM taobao.rmf
ORDER BY Recent DESC,Frequent DESC
select t.客户分类,count(t.userid) from
(SELECT userid, Recent, Frequent,
(CASE WHEN Recent>=2.85 AND Frequent>=1.10 THEN '重要价值客户'
WHEN Recent<2.85 AND Frequent>=1.10 THEN '重要唤回客户'
WHEN Recent>=2.85 AND Frequent<1.10 THEN '重要推广客户'
WHEN Recent<2.85 AND Frequent<1.10 THEN '重要挽留客户'
END) '客户分类' FROM taobao.rmf
ORDER BY Recent DESC,Frequent DESC)t
group by t.客户分类
(1)本次数据集6天总计200多万流量,70万种商品,7000条类目,37000的独立访客,日均访问量在35-36万间。
(2)近6日逐日新增用户数递减,最终成交转化率在2.32%,从浏览到有购买意向只有2.32%的转化率,除去有一部分用户是直接购买,但也说明大多数用户以浏览页面为主而购买转化较少,此处为转化漏斗中需要改善和提高的环节。
针对这一环节改善转化率的建议有:
①优化电商平台的搜索匹配度和推荐策略,主动根据用户喜好推荐相关的商品,优化商品搜索的准确度和聚合能力,对搜索结果排序优先级进行优化;
②给客户提供同类产品比较的功能,让用户不需要多次返回搜索结果反复查看,便于用户确定心怡产品;
③在商品详情页的展示上突出用户关注的重点信息,精简信息流的呈现方式,减少用户寻找信息的成本;
(3)复购、回购
次日回购及3日回购,均保持较高水平,达到22%,复购率在55%。虽然成交转化率不高,但用户多次购买及回购的频率还是不错的,买过都说好哈哈。
1、营销活动能为提升留存带来一定正向的影响,可以多推出一些营销活动,让用户提高使用淘宝电商平台的频率。
2、高复购次数的用户少,商家可以从商品质量、服务质量、物流体验三方面寻找原因,定位所在问题点,寻求高复购率。
(3)3122135为6日内最热销商品,1464116为最热销类目,也可以分析一下最不受欢迎的商品,提供改进措施
根据购买环节的前十品类,app的展现页面对这些品类首要进行展现,便于满足用户购买需求。
(4)活跃时段集中在夜晚,22-23点达到单时段近12000的流量峰值,一周来看,用户行为并未在周末有显著的变化。
(5)
重要推广客户数(R大F小):11769
重要价值客户数(R大F大):1323
重要唤回客户(R小F小):137
重要挽留客户(R小F大):6626
重要价值用户:需要重点关注。并且活动投放时需谨慎对待,不要引起用户反感。
重要推广客户:运营活动可以重点针对这部分用户,提高用户的产品使用频率,通过拼团打折、积分兑换等活动唤起用户注意力。
重要挽留客户:可以通过推送提醒,短信召回等方式,含促销活动等字眼,进行吸引唤回