一、项目背景和目的
随着电商平台的高速发展,互联网行业的人口红利逐渐消失,各电商平台也把重心从注重增量的发展逐渐转向存量的运营。在这一背景下,对电商用户行为进行分析,理解用户需求,从而用户展开针对性的活动,提高电商的运营品质,成为了电商在发展中的一个重要环节。在这样一个背景下,通过此项目学习电商数据分析的基本方法与相关指标。
二、分析步骤
利用MySQL对淘宝用户行为进行数据分析,在Tableau中进行数据可视化。分析步骤:
分析维度——理解数据——数据清洗——构建模型——数据可视化
三、分析维度
基于淘宝用户行为数据,从以下四个维度进行分析和解释:
第一维度:用户消费行为习惯
统计数据集中的总用户数,商品数,商品类别数,用户行为数来评估用户整体购物情况。以PV、UV、平均访问量、跳失率等指标,通过对比分析方法,探索用户在不同时期下的活跃规律,了解用户消费行为习惯。
第二维度:商品购买情况分析
从成交量、人均购买次数、复购率等指标,探索用户对不同种类商品的偏好,了解商品的销售规律,找到针对不同商品的营销策略。
第三维度:用户行为转化分析
从商品和用户两个角度分析:
商品角度,运用对比分析方法,查看用户关注的商品和店铺推荐的商品是否吻合;
用户角度,运用AARRR漏斗模型拆解用户的行为路径,确定各个环节的流失率,找到需要改进的环节。
第四维度:用户分类
基于RFM模型,对用户进行分类,找出最具有价值的核心付费用户群,从而采取针对性的营销策略进行精细化运营。
四、相关模型介绍
- AARRR漏斗模型分析用户行为
- RFM模型进行用户分类
由于不同的用户对公司带来的收益差别很大,因此需要对用户进行价值评价,找到最优价值的用户群,并针对该部分用户进行差异化营销。
R-Recency(最近一次购买时间)
R指的是用户上一次消费时间,上一次购物时间距离现在最近的客户,该客户群体通常在近期响应营销活动的可能性也越大,而很久没有购物行为意味着放弃了使用app等,重新唤起用户也需要更多的成本。
F-Frequency(消费频率)
F指用户在某段时间内的购物次数,消费频率越高意味着这部分用户对产品的满意度最高,用户粘性最好,忠诚度也最高。
M-Monetary(消费金额)
M指用户在某段时间内的购物金额,这也是为公司带来价值的最直接体现,而消费金额较高的用户在用户总体中人数较少,却能创造出更多价值,是需要重点争取的对象。
这三个维度相互关联,反映了每个用户的现在价值和潜在价值,将每个维度分为若干区间进行评分,通过计算分数找到最有价值的用户,并对用户进行分类,可以针对性的对不同类型的用户采取不同的营销策略。
五、理解数据
数据来源阿里云天池:https://tianchi.aliyun.com/dataset/dataDetail?dataId=649。
数据集包含了2017年11月25日到2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。关于数据集中每一列的详细描述如下:
其中用户的行为类型共有四种,分别是:
六、数据清洗
1、 导入数据
数据记录达一亿条,为了提高分析效率,数据是按照用户ID排序好的,将源csv文件进行切分,取前五百万行在MySQL Workbench中导入数据。
LOAD DATA INFILE "D:\MySQL\MySQL DATA\Uploads\UserBehavior_0.csv" INTO TABLE users FIELDS TERMINATED BY "," LINES TERMINATED BY " ";
导入大体积csv文件时,由于数据量过大,会出现导入速度过慢以及UPDATE操作造成的锁问题,这里考虑利用工具将csv文件切分成子文件,再进行导入。关于MySQL导入大体积csv文件,可以参考如下链接:https://blog.csdn.net/weixin_46496223/article/details/105097630。
2、一致化处理
时间数据是int型的时间戳,日期和时间存在于同一列中,将其拆分为四列,用于研究每日的某个时间段的数据变化情况。
UPDATE users SET datetimes=from_unixtime(time_stamp); UPDATE users SET dates=from_unixtime(time_stamp,'%Y-%m-%d'); UPDATE users SET times=from_unixtime(time_stamp,'%H:%i:%S'); UPDATE users SET hours=from_unixtime(time_stamp,'%H');
处理过的数据形式:
3、异常值处理
本次分析针对的是2017年11月25日至2017年12月3日的数据,将不在此日期范围内的数据删除,共删除2632行数据。
-- 异常值处理 DELETE FROM users WHERE dates < '2017-11-25' OR dates > '2017-12-03';
七、构建模型和可视化分析
1、用户整体购物情况
1.1 统计数据集中的用户行为数,总用户数,商品数和商品类别数
SELECT count(*) AS 行为数, COUNT(DISTINCT user_id) AS 用户数, COUNT(DISTINCT item_id) AS 商品数, COUNT(DISTINCT item_category) AS 商品类别数 FROM users;
1.2 PV(浏览量):具体指网站的页面浏览量或者点击量,页面被刷新一次就计算一次;UV(用户数):访问网站的一台客户端为一个用户;平均访问量:PV/UV
SELECT COUNT(DISTINCT user_id) AS UV, (SELECT COUNT(behavior) FROM users WHERE behavior = 'pv') AS PV, (SELECT COUNT(behavior) FROM users WHERE behavior = 'pv')/COUNT(DISTINCT user_id) AS 'PV/UV' FROM users;
1.3 跳失率:只有点击行为的用户/总用户数
SELECT COUNT(DISTINCT user_id) AS 只浏览人数 FROM users WHERE user_id NOT IN (SELECT DISTINCT user_id FROM users WHERE behavior = 'buy') AND user_id NOT IN (SELECT DISTINCT user_id FROM users WHERE behavior = 'cart') AND user_id NOT IN (SELECT DISTINCT user_id FROM users WHERE behavior = 'fav');
只进行浏览的用户数量为2871,因此跳失率为2871/48984=5.86%,跳出率不高,说明店铺的商品详情页能吸引用户进行下一步的行为。
1.4 留存率
使用群组分析方法,按每天新增的用户进行分组,通过每天新增用户的留存率来判断平台对用户的吸引力。
SELECT b.first_day, COUNT(DISTINCT b.user_id) AS 日新增用户数, CONCAT(ROUND(100*COUNT(DISTINCT IF(DATEDIFF(a.dates,b.first_day)=1, a.user_id, NULL))/COUNT(DISTINCT b.user_id),2), '%') AS 次日留存率, CONCAT(ROUND(100*COUNT(DISTINCT IF(DATEDIFF(a.dates,b.first_day)=3, a.user_id, NULL))/COUNT(DISTINCT b.user_id),2), '%') AS 三日留存率, CONCAT(ROUND(100*COUNT(DISTINCT IF(DATEDIFF(a.dates,b.first_day)=5, a.user_id, NULL))/COUNT(DISTINCT b.user_id),2), '%') AS 五日留存率, CONCAT(ROUND(100*COUNT(DISTINCT IF(DATEDIFF(a.dates,b.first_day)=7, a.user_id, NULL))/COUNT(DISTINCT b.user_id),2), '%') AS 七日留存率 FROM users AS a JOIN (SELECT user_id, min(dates) AS first_day FROM users GROUP BY user_id) AS b ON a.user_id = b.user_id WHERE b.first_day <= '2017-11-30' GROUP BY b.first_day;
由于数据集的日期截止到2017年12月3日,因此五日留存率和七日留存率会出现为0的情况。从以上数据可以看出,每日的留存率都比较高。
2、用户消费行为习惯
2.1 总的用户在四个行为下的记录情况
使用查询语句分别输出用户点击,收藏,加入购物车以及购买用户数量。
SELECT COUNT(DISTINCT user_id) AS 点击用户数量 FROM users WHERE behavior = 'pv'; SELECT COUNT(DISTINCT user_id) AS 收藏用户数量 FROM users WHERE behavior = 'fav'; SELECT COUNT(DISTINCT user_id) AS 加购物车用户数量 FROM users WHERE behavior = 'cart'; SELECT COUNT(DISTINCT user_id) AS 购买用户数量 FROM users WHERE behavior = 'buy';
2.2 单个用户行为情况
CREATE VIEW 单个用户行为 AS SELECT user_id, COUNT(behavior) AS 用户行为, SUM(CASE WHEN behavior='pv' THEN 1 ELSE 0 END) AS 点击次数, SUM(CASE WHEN behavior='fav' THEN 1 ELSE 0 END) AS 收藏次数, SUM(CASE WHEN behavior='cart' THEN 1 ELSE 0 END) AS 加购物车次数, SUM(CASE WHEN behavior='buy' THEN 1 ELSE 0 END) AS 购买次数 FROM users GROUP BY user_id ORDER BY count(behavior) DESC; SELECT * FROM 单个用户行为;
2.3 每天的用户行为变化
SELECT dates, COUNT(DISTINCT user_id) AS 访客数, COUNT(behavior) AS 用户行为, SUM(CASE WHEN behavior='pv' THEN 1 ELSE 0 END) AS 访问, SUM(CASE WHEN behavior='fav' THEN 1 ELSE 0 END) AS 收藏, SUM(CASE WHEN behavior='cart' THEN 1 ELSE 0 END) AS 加购, SUM(CASE WHEN behavior='buy' THEN 1 ELSE 0 END) AS 购买 FROM users GROUP BY dates ORDER BY dates;
2.4 每小时的用户行为变化
SELECT hours, COUNT(DISTINCT user_id) AS 访客数, COUNT(behavior) AS 访问量, SUM(CASE WHEN behavior='pv' THEN 1 ELSE 0 END) AS 点击, SUM(CASE WHEN behavior='fav' THEN 1 ELSE 0 END) AS 收藏, SUM(CASE WHEN behavior='cart' THEN 1 ELSE 0 END) AS 加购, SUM(CASE WHEN behavior='buy' THEN 1 ELSE 0 END) AS 购买 FROM users GROUP BY hours ORDER BY hours;
可以看出访客数与点击量趋势大致一致,每日0点到5点用户活跃度快速降低,降到一天中的活跃量最低值,6点到10点用户活跃度快速上升,10点到18点用户活跃度较平稳,18点到22点用户活跃度快速上升,达到一天中的最高值。说明用户喜欢在晚上下班至睡前的这个时间段访问淘宝,商家需要在该时间段内增加促销等活动吸引用户。
3、商品购买情况
3.1 人均购买次数
SELECT COUNT(behavior) AS 订单量, COUNT(DISTINCT user_id) AS 用户数, COUNT(behavior)/COUNT(DISTINCT user_id) AS 人均购买次数 FROM users WHERE behavior = 'buy';
3.2 复购率:购买2次及以上用户数/总购买用户数
SELECT SUM(CASE WHEN 购买次数 >= 2 THEN 1 ELSE 0 END)/ SUM(CASE WHEN 购买次数 > 0 THEN 1 ELSE 0 END) AS 复购率 FROM 单个用户行为;
3.3 重复购买最多的用户
SELECT user_id, COUNT(behavior) AS 购买次数 FROM users WHERE behavior = 'buy' GROUP BY user_id ORDER BY COUNT(behavior) DESC LIMIT 30;
3.4 重复购买最多的商品
SELECT item_id, COUNT(behavior) AS 被购买次数 FROM users WHERE behavior = 'buy' GROUP BY item_id ORDER BY COUNT(behavior) DESC LIMIT 30;
4、用户行为转化
4.1 推荐量和购买量都在前十的商品种类
SELECT a.item_category, a.点击量, b.购买量 FROM (SELECT item_category, COUNT(DISTINCT user_id) AS 点击量 FROM users WHERE behavior = 'pv' GROUP BY item_category ORDER BY 点击量 DESC LIMIT 10) AS a INNER JOIN (SELECT item_category, COUNT(DISTINCT user_id) AS 购买量 FROM users WHERE behavior = 'buy' GROUP BY item_category ORDER BY 购买量 DESC LIMIT 10) AS b on a.item_category=b.item_category;
可以看出,用户购买的和点击的商品种类相似性很大。
4.2 推荐量和购买量都在前十的商品
SELECT a.item_id, a.点击量, b.购买量 FROM (SELECT item_id, COUNT(DISTINCT user_id) AS 点击量 FROM users WHERE behavior = 'pv' GROUP BY item_id ORDER BY 点击量 DESC LIMIT 10) AS a INNER JOIN (SELECT item_id, COUNT(DISTINCT user_id) AS 购买量 FROM users WHERE behavior = 'buy' GROUP BY item_id ORDER BY 购买量 DESC LIMIT 10) AS b on a.item_id=b.item_id;
虽然用户点击量最多的商品种类和购买的商品种类相似度很高,但购买量和点击量都在前十的商品为空,说明推荐系统不够好,导致给客户推荐的商品不是客户真正需要的,导致点击量很高但却没有促成交易。因此需要优化推荐系统,给用户推荐他们真正想要的商品。
4.3 用户行为转化率
从行为数量的角度分析:
SELECT behavior, COUNT(DISTINCT user_id) AS 用户数, COUNT(behavior) AS 行为数, COUNT(DISTINCT item_id) AS 商品数 FROM users GROUP BY behavior;
由于收藏和加入购物车都为浏览和购买阶段之间确定购买意向的用户行为,且不分先后顺序,因此将其算作一个阶段,可以看到从浏览到有购买意向只有9.5%的转化率,当然有一部分用户是直接购买而未通过收藏和加入购物车,但也说明大多数用户浏览页面次数较多,而使用购物车和收藏功能较少,而购买次数占使用购物车和收藏功能的23.6%,说明从浏览到进行收藏和加入购物车的阶段是指标提升的重点环节。
用户购买转化率:33286/48782=68.23%
点击支付转化率:100139/4472791=2.24%处于平均水平。
从用户数量的角度分析:
select sum(case when 点击次数>0 then 1 else 0 end) as 'pv', sum(case when 点击次数>0 and 购买次数>0 and 加购物车次数=0 and 收藏次数=0 then 1 else 0 end) as 'pv-buy', sum(case when 点击次数>0 and (加购物车次数>0 or 收藏次数>0) then 1 else 0 end) as 'pv-cart/fav', sum(case when 点击次数>0 and (加购物车次数>0 or 收藏次数>0) and 购买次数>0 then 1 else 0 end) as 'pv-cart/fav-buy', sum(case when 点击次数>0 and (加购物车次数>0 or 收藏次数>0) and 购买次数=0 then 1 else 0 end) as 'pv-cart/fav-lost', sum(case when 点击次数>0 and 加购物车次数=0 and 收藏次数=0 and 购买次数=0 then 1 else 0 end) as 'pv-lost' from 单个用户行为;
从以上结果可以看出:
(1)用户点击后的流失率仅为5.89%,说明平台对用户的吸引力还是较大的,用户点击后继续下一步行动的意愿较为强烈。
(2)用户点击后直接购买的转化率仅为6.72%,说明用户更喜欢把商品收藏或加入购物车后购买。这里是从用户数量层面看收藏/加购物车的转化率,但上面从行为数量上看时,用户点击过后收藏/加购物车的转化率仅为9.5%,说明用户收藏/加购物车的意愿还是较为强烈的,但是花费了大量时间去点击和寻找合适的商品,这也从侧面说明了推荐系统有待改进,不能给用户推送较为满意的商品,导致用户花费大量时间。
5、用户分类
基于RFM模型分析方法,对用户按价值进行分类,对于不同价值的用户进行精细化运营。由于数据中没有给出相关的金额信息,因此通过R和F的数据对客户价值进行打分。
数据集中包含的时间是从2017年11月25日到2017年12月3日,这里选取11月25日作为计算日期,统计用户最近交易的日期距离11月25日的间隔天数和交易的次数。
创建最近一次消费间隔和频率的视图:
CREATE VIEW RF AS SELECT user_id, DATEDIFF(MAX(dates), '2017-11-25') AS R, COUNT(behavior) AS F FROM users WHERE behavior = 'buy' GROUP BY user_id;
查看R和F的取值范围:
根据消费间隔R值的取值为0-8,将其分为3档,0-2,3-5,6-8分别对应的R评分1-3;
根据消费频率F值的取值,消费次数从低到高为1-84次,将其分为4档,1-21,22-42,43-63,64-84分别对应评分1-4;
计算R值和F值的平均值:
分级:
CREATE VIEW Score AS SELECT RF.*, (CASE WHEN R BETWEEN 0 AND 2 THEN 1 WHEN R BETWEEN 3 AND 5 THEN 2 WHEN R BETWEEN 6 AND 8 THEN 3 END) AS R_score, (CASE WHEN F BETWEEN 1 AND 21 THEN 1 WHEN F BETWEEN 22 AND 42 THEN 2 WHEN F BETWEEN 43 AND 63 THEN 3 WHEN F BETWEEN 64 AND 84 THEN 4 END) AS F_score FROM RF;
用户分类:
CREATE VIEW Classfy AS SELECT user_id, (CASE WHEN R_score > 2.4205 AND F_score > 1.0030 THEN '重要价值用户' WHEN R_score > 2.4205 AND F_score < 1.0030 THEN '重要发展用户' WHEN R_score < 2.4205 AND F_score > 1.0030 THEN '重要保持用户' WHEN R_score < 2.4205 AND F_score < 1.0030 THEN '一般价值用户' END) AS 用户类型 FROM Score;
对各类用户进行统计:
SELECT 用户类型, COUNT(user_id) AS 用户数 FROM Classfy GROUP BY 用户类型;
对于重要价值用户,极有可能发展成忠实用户,需要加强交流与互动,提高满意度,提供针对性服务;
对于重要保持用户,虽然最近没有购买,但以往消费频率较高,可根据以往的消费记录,主动与其保持联系,为其个性化推荐,以提高复购率;
对于重要发展用户,他们最近有购买,但消费频率不高,可以通过活动等刺激消费;
对于一般价值用户,他们最近没有购买,以往购买频率也不高,特别容易流失,可以主动联系客户,赠送优惠券或推送活动信息,唤醒购买意愿。
八、结论
1.日点击量,访问量在2017年11月25日至2017年12月1日基本平稳,而12月2日与12月3日,相对于其他日期,流量增长明显,由于2017年11月25日,11与26日,12月2日与12月3日均为周末,考虑可能是与12月2日到3日搞活动有关;
2.大部分用户在19时到23时会比较活跃,其中21到22时,是一天当中最活跃的时段,成交量也是这一时段最高。商家可以根据用户的活跃时间段精准推送商家的折扣优惠或促销活动,提高购买率;
3.人均购买次数为3,跳失率为5.86%,复购率65.77%,以上指标说明网页活跃度较好,商品对用户的吸引力较大,大多数用户浏览后会收藏,放进购物车或者直接购买;
4.用户购买转化率为68.23%,说明来浏览的用户很大概率会产生购买行为,但是从点击到收藏/加购物车的转化率只有9.5%,最后实际购买跌至2.24%,说明用户在浏览商品详情页后出现了大量的流失,可能出现的原因是用户花费大量时间寻找合适的产品。
5.通过用户点击最多的商品种类与购买最多的商品种类有较大的重合,但实际用户点击最多的商品与最后购买最多的商品重合度较小,考虑是否可以优化推荐系统,根据用户的偏好推荐更为合适的商品,减少用户挑选商品的时间,提高用户的购物体验,从而提高购买率;
6.利用RFM模型对用户进行分类后,可知重要价值用户比较少,用户类型主要还是集中于重要发展用户和一般价值用户,建议根据用户类型,进行有针对性的精准营销。
参考文献: