项目数据有阿里天池提供,通过python、mysql 和 tableau进行数据分析,根据淘宝用户的行为,挖掘出行为背后的意义,最后提出针对性业务见解。
https://tianchi.aliyun.com/dataset/dataDetail?dataId=649
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
列名称 | 说明 |
---|---|
用户ID | 整数类型,序列化后的用户ID |
商品ID | 整数类型,序列化后的商品ID |
商品类目ID | 整数类型,序列化后的商品所属类目ID |
行为类型 | 字符串,枚举类型,包括(‘pv’, ‘buy’, ‘cart’, ‘fav’) |
时间戳 | 行为发生的时间戳 |
注意到,用户行为类型共有四种,它们分别是
行为类型 | 说明 |
---|---|
pv | 商品详情页pv,等价于点击 |
buy | 商品购买 |
cart | 将商品加入购物车 |
fav | 收藏商品 |
根据淘宝用户行为数据,首先从数据的整体情况进行分析,其中包括流量指标和转化情况;其次,从时间维度对用户的行为进行分析;再者,从商品维度来统计商品的浏览量、加购量、收藏量和销售量排行榜;最后,从用户维度构建AARRR模型和RFM模型进行分析。
数据集超过一亿数据,电脑读取超过一千万行数据时出现内存泄漏,因此截取500万数据进行分析
#读取数据
reader=pd.read_csv('UserBehavior.csv',iterator = True,header=None,
names=['UserID','ItemID','CategoryID','Behaviortype','Timestamp'])
try:
tb=reader.get_chunk(5000000)
except StopIteration:
print("Iteration is stopped.")
#查看数据信息
tb.info()
Int64Index: 4999995 entries, 0 to 4999999
Data columns (total 7 columns):
UserID int64
ItemID int64
CategoryID int64
Behaviortype object
Timestamp int64
date object
time object
dtypes: int64(4), object(3)
memory usage: 305.2+ MB
tb.describe()
UserID ItemID CategoryID Timestamp
count 5.000000e+06 5.000000e+06 5.000000e+06 5.000000e+06
mean 2.446809e+05 2.579267e+06 2.710101e+06 1.511963e+09
std 2.265588e+05 1.488103e+06 1.464218e+06 8.400232e+05
min 1.000000e+00 3.000000e+00 2.171000e+03 4.401600e+04
25% 1.388410e+05 1.294875e+06 1.349561e+06 1.511763e+09
50% 2.010450e+05 2.578621e+06 2.710853e+06 1.511966e+09
75% 2.637270e+05 3.862411e+06 4.145813e+06 1.512181e+09
max 1.018011e+06 5.163067e+06 5.161669e+06 2.122867e+09
查看数据可知,数据集没有缺失值。
#查看有多少个重复值
tb.duplicated().sum()
#删除重复值
tb.drop_duplicates(inplace=True)
#数据类型转换
tb["date"] = tb["Timestamp"].apply(lambda x: datetime.datetime.fromtimestamp(x).date())
tb["time"] = tb["Timestamp"].apply(lambda x: datetime.datetime.fromtimestamp(x).strftime('%H'))
tb.head()
UserID ItemID CategoryID Behaviortype Timestamp date time
0 1 2268318 2520377 pv 1511544070 2017-11-25 01
1 1 2333346 2520771 pv 1511561733 2017-11-25 06
2 1 2576651 149192 pv 1511572885 2017-11-25 09
3 1 3830808 4181361 pv 1511593493 2017-11-25 15
4 1 4365585 2520377 pv 1511596146 2017-11-25 15
#删除时间戳列
del tb['Timestamp']
根据数据集介绍,数据采集时间应该在2017年11月25日至2017年12月3日之间,检查是否存在超出时间范围的数据,作为异常值
tb['date'].value_counts()
print(tb.shape)
# 异常值处理
tb['date'] = tb['date'][(tb['date']>=datetime.date(2017,11,25)) & (tb['date']<=datetime.date(2017,12,3))]
#删除有空的数据行
tb = tb.dropna(axis=0, how='any')
print(tb.shape)
(4999995, 7)
(4997363, 7)
tb.to_csv('tb.csv')
分析工具:Python + Navicat + MySQL + Tableau
首先使用 Python 截取 500 万条淘宝用户行为数据,并进行重复值、异常值和一致化处理,接下来在 MySQL 环境中使用 SQL 语句进行数据查询,并结合 Tableau 绘制可视化图表。
日pv和日uv两者走势相类似 ,且均在12月2日突然升高至九日内最高水平。
11月25、26日以及12月2、3日是周末,但在11月25日-12月1日的日PV和UV基本保持平稳,没有太大变化,因此推断12月2日的访客量和访问量激增可能不是周末的原因,由于12月2日距离双十二较近且多数人会在双十二购买近期所需物品,因此初步推测12月2日~3日的突然升高是因为商家进行促销、宣传推广等活动。
我们可以利用这个巨大的流量优势,提升用户购买的几率。
分析用户在这九天里面各个时间段的四种行为,我们发现,凌晨1-6点是睡眠时间,活跃用户最少,而从6点之后活跃人数不断增多,10点到达一个小顶峰。10点-18点期间,用户人数基本平稳,推测是用户是在通勤时间或上班时间抽空购物 ,到了晚上19点,用户人数开始激增,成交量也增加,证明晚上用户下班、晚饭后有较多的空闲时间进行购物,21-22点是用户浏览、购物的顶峰 。22点之后活跃用户下降,是准备要休息了。
首先建立各用户行为表,统计每个用户的四种行为总数。
CREATE TABLE 各用户行为 AS
SELECT userid,count(behaviortype) as 用户行为总数,
sum(case when behaviortype = 'pv' then 1 else 0 end)as 点击量,
sum(case when behaviortype = 'buy' 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 加购数
from tb
group by UserID;
计算购买率:
select concat(round((sum(case when 购买量>0 then 1 else 0 end)/
count(userid))*100,2),'%') as 购买率
from 各用户行为;
平台中有67.95%的用户在这9天内有进行过购物。
复购率 = 购买次数两次及其以上的人数/有购买行为的用户总数
select concat(round((sum(case when 购买量>=2 then 1 else 0 end)/
sum(case when 购买量>0 then 1 else 0 end))*100,2),'%') as 复购率
from 各用户行为;
这九日内,在有进行过购物的用户中,用户再次购物的概率达到65.77%,65.77%的复购率是一个比较可观的数据。
这里以 2017-11-25作为第一天,计算次日、3日、7日留存率。
n日留存率=(第一日有点击且第n日还有点击的用户数)/第一天新增总用户数
create table Retention
as SELECT COUNT(DISTINCT UserID) AS 第一天新用户
from tb where date ='2017-11-25'
alter TABLE Retention add COLUMN 第二天留存用户 integer;
update Retention set 第二天留存用户=
(select count(distinct UserID) from tb
where date = '2017-11-26' and UserID in (select UserID from tb
where date = '2017-11-25'));
alter TABLE Retention add COLUMN 第三天留存用户 integer;
update Retention set 第三天留存用户=
(select count(distinct UserID) from tb
where date = '2017-11-27' and UserID in (select UserID from tb
where date = '2017-11-25'));
alter TABLE Retention add COLUMN 第五天留存用户 integer;
update Retention set 第五天留存用户=
(select count(distinct UserID) from tb
where date = '2017-11-29' and UserID in (select UserID from tb
where date = '2017-11-25'));
alter TABLE Retention add COLUMN 第七天留存用户 integer;
update Retention set 第七天留存用户=
(select count(distinct UserID) from tb
where date = '2017-12-01' and UserID in (select UserID from tb
where date = '2017-11-25'));
计算留存率
select
CONCAT(round(100*第二天留存用户/第一天新用户,2),'%')as 次日留存率,
CONCAT(round(100*第三天留存用户/第一天新用户,2),'%')as 三日留存率,
CONCAT(round(100*第五天留存用户/第一天新用户,2),'%')as 五日留存率,
CONCAT(round(100*第七天留存用户/第一天新用户,2),'%')as 七日留存率
from retention;
留存率相对稳定,并且七日留存率有回升,总体来说,用户粘性较高。
跳失率计算:仅有点击行为的用户数/总用户数
-- 跳失率
select concat(round((sum(case when 收藏数=0 and 加购数=0 then 1 else 0 end)/
count(userid))*100,2),'%') as 跳失率
from 各用户行为;
结果显示,仅仅有点击行为,而没有收藏和加购行为的用户数占总用户数的5.86%,跳失率不算高。
create table 转化率 as
select Behaviortype as '行为类型',count(Behaviortype) as '数量' from tb group by Behaviortype;
绘制漏斗图
从漏斗模型可以看到,用户收藏或加购的比例是9.49%,而最终购买率为2.24%。
绘制商品浏览量、销量、加购量、收藏量排行榜仪表板
在浏览量前十的商品中,有一半左右的商品也在加购量和收藏量前十排行榜里面,而仅有3031354一件商品在销量前十排行榜里面。说明商品的点击到加购收藏,点击到购买的转化率较低,用户浏览的商品和喜爱的商品,以及最终购买的商品存在着很大的误差,因此我们需要优化推荐系统,让用户真正找到自己想买的商品,将浏览量转换为购买量。
总共销售的商品有100126个。
我们可以看到有超过5.6万个商品只销售了一次,将近1万个商品销售了2次
在被购买的这部分产品中,80%的商品销量只有一次。超过90%的商品销量是1~2次。 说明商品的销售主要是靠长尾商品,并没有爆款商品的带动。 我们可以推测,平台的绝大部分商品销量偏低,无法对用户有效吸引,也使得用户在浏览后迅速流失 。
RFM 模型是衡量客户价值和客户创利能力的重要工具,是按照 R(Recency-近度)、F(Frequency-频度)、M(Monetary-额度)三个维度进行细分客户群体。
RFM:最近一次消费 (Recency),消费频率 (Frequency),消费金额 (Monetary)
SELECT userid,
DATEDIFF('2017-12-03',MAX(date)) AS 'R',
COUNT(behaviortype) AS 'F'
FROM tb
WHERE behaviortype='buy'
GROUP BY userid
ORDER BY userid
找到R值的范围是0 ~ 8,F值的范围是1~9
通过查询,R 的最小时间间隔为 0,最大时间间隔为 8;F 的最近一段时间购买频度最小为 1,最大的购买频度为 9,可以根据这两个指标指定一个打分表。
按价值打分 | 最近一次消费时间间隔(R) | 最近一段时间的消费频率(F) |
---|---|---|
0 | 6~8天 | 1~3次 |
1 | 3~5天 | 4~6次 |
2 | 0~2天 | 7~9次 |
根据打分表,给R、F值打分
CREATE VIEW RF_score AS
SELECT userid,
CASE WHEN R BETWEEN 0 AND 2 THEN 2
WHEN R BETWEEN 3 AND 5 THEN 1
WHEN R BETWEEN 6 AND 8 THEN 0
ELSE NULL END AS 'R_score',
CASE WHEN F BETWEEN 1 AND 3 THEN 0
WHEN F BETWEEN 4 AND 6 THEN 1
WHEN F BETWEEN 7 AND 9 THEN 1
ELSE NULL END AS 'F_score'
FROM rf
ORDER BY userid
CREATE VIEW RF_class AS
SELECT userid,
R_score AS 'R值分数',
F_score AS 'F值分数',
CASE WHEN R_score>(SELECT AVG(R_score) FROM RF_score) THEN '高' ELSE '低' END AS 'R_class',
CASE WHEN F_score>(SELECT AVG(F_score) FROM RF_score) THEN '高' ELSE '低' END AS 'F_class'
FROM RF_score
GROUP BY userid
CREATE VIEW RF_label AS
SELECT userid,
R值分数,
F值分数,
R_class,
F_class,
CASE WHEN R_class='高' AND F_class='高' THEN '价值用户'
WHEN R_class='高' AND F_class='低' THEN '发展用户'
WHEN R_class='低' AND F_class='高' THEN '保持用户'
WHEN R_class='低' AND F_class='低' THEN '挽留用户'
END AS 'label'
FROM RF_class
GROUP BY userid
根据 RFM 模型分层结果,计算各用户群所占的比例:
SELECT a.label AS '用户类别',
a.ct AS '用户数',
a.ct/(SELECT COUNT(DISTINCT userid) FROM RF_label) AS '用户占比'
FROM
(SELECT label,
COUNT(DISTINCT userid) AS 'ct'
FROM RF_label
GROUP BY label) AS a
GROUP BY a.label
可见,挽留用户占比最多,为47.57%,发展用户次之,为41.58%,而价值用户占比仅为9.84%,保持用户占比最低,仅为1.01%。
根据用户价值分析,我们可以得到用户分层结果,可以根据每个用户群的特性,实现差异化营销:
价值用户:这类用户的最近消费时间较近,且消费频次高,需要重点关注,对于这类用户可以考虑给其提供 VIP 服务,以防流失;
保持用户:这类用户的最近消费时间较远,但消费频次较高,说明这类型的用户已经有一段时间没来消费了,对于这类用户可以采用邮件推送、短信推送、APP 推送等方式来唤醒用户,提高用户的粘性;
发展用户:这类用户的特点是最近消费时间近,但消费频度低,对于这类用户可以适当的赠送优惠券或采取捆绑销售的方式来增加用户的消费频度;
挽留用户:这类用户的最近消费时间较远,最近一段时间的消费频度较低,这类用户面临流失或已经流失的情况,应当采取挽留措施,如优惠券等方式召唤回这部分用户。
此次项目运用python、mysql和Tableau, 从用户的整体购物情况、用户行为路径等方面分析了淘宝 2017 年 11 月 25 日至 2017 年 12 月 3 日之间的 500 万条用户行为数据。 下面结合AARRR模型,对应用户生命周期中的5个重要环节,对用户行为进行梳理和优化梳理。
1、Acquisition–用户获取
每天晚上19点到23点是活跃用户的黄金时段, 用户访问量和独立访客数都在这个时间段达到最大值,平台可以利用这个时间段投放广告,加大力度宣传产品,也可以通过小游戏邀请、拼团邀请、KOL 推广、热门社交或小视频平台合作推广、淘宝app卖家推送等形式吸引用户。
2、Activation–用户激活
找到产品和用户的切入点,找到用户的“啊哈”时刻,让用户再注册后有进行下一步的冲动。用户从挑选商品到完成购买之前是一个危险区,很多人中途会因为种种原因放弃购买,可以通过分析用户行为确定夹点(pinch point)位置,提出改善转化率的建议。
此次项目分析了用户的四种行为,包括点击、购买、加购、收藏;用户点击浏览商品,而把商品收藏或加入购物车的用户仅占9.49%,最终购买的用户只有2.24%,夹点在收藏和加入购物车这里,为什么用户浏览了那么多商品却只有9.49%的用户加入购物或收藏,可能这中间用户花了太多的时间而没有挑选到满意的商品,可以优化推荐算法,根据用户行为推送用户更可能感兴趣的商品,还可以优化购物界面使界面布局更加人性化等。
3、Retention–提高留存
让用户养成习惯,在一定程度上增加用户对产品的依赖性,导致无法离开该平台。让用户习惯打开淘宝:①可以每日给用户推送可能感兴趣的商品;②一些签到的小游戏或者签到领积分活动,增加用户登录的频率,进而增加用户浏览时长;③对于年购买量比较大的用户,为了增加这些用户的粘性,可以推出vip服务,让这些用户享受折扣和优惠券,进而提高高价值用户的留存率和对平台的忠诚度;④大力推广淘宝直播跟用户互动,计算亲密指数并进行排行,可以让用户与店主之间建立信任,进而增加客户的忠诚度。⑤
4、Revenue–增加收入
提高成交转化率、复购率以及加购或收藏产品的购买率。①提高成交转化率,优化用户推荐系统,或者邀请明星/KOL做测评推广;②淘宝购物用户的复购率为65.77%,说明这些用户对淘宝平台还算满意,可以通过奖励积分或者优惠券等方式鼓励用户撰写评论,或者鼓励用户去分享买到的宝贝,让用户主动去推荐商品;③通过分析找出价值用户的购买偏好,产品和类目等,给价值用户制定个性化的产品推荐,从而提高用户体验,进而提高购买率。④ 引导用户进行收藏和加入购物车,比如发放优惠券,满减活动,送礼品等给用户优惠的方式; ⑤ 对于点击量高的商品,要重点分析,优化商品的推荐机制,让用户做到点击即想购买 。⑥ 通过将畅销商品和非畅销商品进行捆绑销售,优化商品的展示,当然在做这些活动之前,可以先尝试做 A/B 测试,找到最适合的销售方式和最合适的商品类型捆绑,不断提升转化率。
5、Referral–传播推荐
首先,要让用户自发传播,那这个产品口碑一定是好得不得了,而且能够充分满足用户的需求,,甚至给用户带来期望的需求。所以,根本上来说,要好好打磨产品。其次,可以采用一些增长策略,像现在比较普遍的老带新裂变营销,把握用户心理策划一些噱头式的活动等。
对于淘宝平台,可以采用拼团、分享得优惠券、分享给好友额外送积分等方式,鼓励用户进行分享和传播。