目录
一、项目背景
UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,数据集包含了2017年11月25日-2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢),用以进行隐式反馈推荐问题的研究。
推荐系统中用户对物品的反馈分为显式和隐式反馈,显式反馈 (如评分、评级) 或单一的隐式反馈 (如浏览、点击、加入购物车)。 隐式反馈推荐是推荐系统通过对内容和用户行为的分析,建立适当的模型,帮助用户从海量的数据中找到自己感兴趣的内容。推荐系统中用户的行为反馈包括显式反馈和隐式反馈,隐式反馈信息在推荐系统算法中被广泛应用。隐式反馈体现着用户的兴趣爱好,对隐式反馈信息的挖掘有助于提高推荐系统的效果,以更好地设计推荐系统
二、项目目标
2.1分析目的
为客户提供更精准的隐式反馈推荐。
从用户角度:提高用户忠诚度,帮助用户快速找到商品;
从网站角度:提高网站交叉销售能力,提高成交转化率。
2.2分析思路
主要从以下五个维度进行分析和建议
整体行为数据分析:PV,UV,平均访客量,复购率和跳失率
用户消费行为分析:从总体行为(PV)和独立访客行为(UV)两方面进行从商品的点击、收藏、加购、购买各环节转化率分析,提出改善转化率的意见
时间维度分析:用户在哪些时间、时段活跃,包括用户行为时段分析和用户量(UV,交易用户数)时段分析
商品角度分析——用户对哪些产品感兴趣,查询浏览量top20以及销量top20商品,进行浏览量和销量相关性分析
三、数据读取与清洗
3.1数据来源
阿里巴巴天池:数据集-阿里云天池
3.2数据集介绍
本数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。关于数据集中每一列的详细描述如下:
列名称 | 说明 |
---|---|
用户ID | 整数类型,序列化后的用户ID |
商品ID | 整数类型,序列化后的商品ID |
商品类目ID | 整数类型,序列化后的商品所属类目ID |
行为类型 | 字符串,枚举类型,包括(‘pv’, ‘buy’, ‘cart’, ‘fav’) |
时间戳 | 行为发生的时间戳 |
四种用户类型包括:
行为类型 | 说明 |
---|---|
pv | 商品详情页pv,等价于点击 |
buy | 商品购买 |
cart | 将商品加入购物车 |
fav | 收藏商品 |
3.3数据清洗
将数据导入MySql,保留前100w条数据
3.3.1检查是否存在重复值
#检查是否存在重复值
SELECT * FROM userbehavior
GROUP BY User_ID, Item_ID, Cate_ID, Behav_type, Timestamp
HAVING COUNT(*)>1;
不存在重复值
3.3.2缺失值处理
#缺失值处理
SELECT
COUNT(User_ID),
COUNT(Item_ID),
COUNT(Cate_ID),
COUNT(Behav_type),
COUNT(Timestamp)
FROM userbehavior;
查询各列行数,都为1000000行,不存在缺失值
3.3.3一致化处理
将时间戳Timestamp列转化为三列,分别为时间,日期,小时
#添加新列Date,根据Timestamp返回日期
ALTER TABLE userbehavior ADD COLUMN Date char(10) NULL;
UPDATE userbehavior
SET Date = FROM_UNIXTIME(`Timestamp`,'%y-%m-%d');
#添加新列Date_time,根据Timestamp返回日期时间
ALTER TABLE userbehavior ADD COLUMN Date_time TIMESTAMP(0) NULL;
UPDATE userbehavior
SET Date_time = FROM_UNIXTIME(`Timestamp`);
#添加新列Time,根据Timestamp列返回时间
ALTER TABLE userbehavior ADD COLUMN Time char(10) null;
update userbehavior
set Time = SUBSTRING(Date_time FROM 12 FOR 2);
添加后表格
3.3.4异常值处理
由于项目背景是要通过对2017年11月25日至2017年12月3日之间的淘宝用户行为数据集进行隐式反馈推荐问题的研究,所以要对这个时间段外的数据进行删除处理。
#检查时间始末
SELECT MAX(Date_time),MIN(Date_time) FROM userbehavior
删去该异常值
DELETE FROM userbehavior where Date >'2017-12-03' or Date <'2017-11-25';
四、数据分析
数据集情况概览
SELECT count(DISTINCT User_ID) as 用户数,
count(DISTINCT Item_ID) as 商品数量,
count(DISTINCT Cate_ID) as 商品类目数量,
count(Behav_type) as 行为数量
FROM userbehavior;
4.1整体概况
4.1.1uv/pv,uv,pv
#整体数据
SELECT COUNT(DISTINCT user_id) AS 独立访客数,
SUM(CASE WHEN `Behav_type` = 'pv' THEN 1 ELSE 0 END) AS '点击',
SUM(CASE WHEN `Behav_type` = 'buy' THEN 1 ELSE 0 END) AS '购买',
SUM(CASE WHEN `Behav_type` = 'cart' THEN 1 ELSE 0 END) AS '加购',
SUM(CASE WHEN `Behav_type` = 'fav' THEN 1 ELSE 0 END) AS '收藏',
ROUND(
SUM(CASE WHEN `Behav_type` = 'pv' THEN 1 ELSE 0
END)/COUNT(DISTINCT user_id)) AS '人均浏览次数'
FROM userbehavior;
可以得到页面点击数(PV)为895636
独立访客数(UV)为9739
人均浏览次数(PV/UV)为92次
4.1.2复购率和跳失率
复购率定义:消费两次及以上的用户在总消费用户中占比
跳失率定义:仅仅访问了单个页面的用户占全部访问用户的百分比,或者指从首页离开网站的用户占所有访问用户的百分比。
首先创建视图,以user_id分组,得到用户行为数据
create view 用户行为数据 AS
select User_ID,COUNT(Behav_type) as '用户行为数',
sum(case when Behav_type ='pv' then 1 else 0 end ) as '点击',
sum(case when Behav_type ='fav' then 1 else 0 end) as '收藏',
sum(case when Behav_type ='cart' then 1 else 0 end) as '加购',
sum(case when Behav_type ='buy' then 1 else 0 end) as '购买'
from userbehavior
GROUP BY User_ID
ORDER BY 用户行为数 DESC;
计算复购率
复购率=购买2次及以上用户数/总购买用户数
-- 复购用户、复购率
SELECT
sum(case when 购买>1 then 1 else 0 end ) as 复购次数,
sum(case when 购买>0 then 1 else 0 end ) as 购买次数,
CONCAT(ROUND(sum(case when 购买>1 then 1 else 0 end)*100/ sum(case when 购买>0 then 1 else 0 end),2),'%') as 复购率
from 用户行为数据;
计算跳失率
跳失率=只有点击行为的用户/总用户数
(即该用户行为数=点击数)
select
* from 用户行为数据
where '用户行为数'='点击'