zoukankan      html  css  js  c++  java
  • SQL分析实战案例

    第一部分 分析背景及数据说明

    1.1 分析背景

    中国电商行业经过初期的粗狂式发展,从有货就能卖的模式逐渐转变到精细化运营的模式,通过对大量数据进行深入分析,发现数据背后的用户需求逐渐伴随在电商运营的工作中。随着电商行业发展日趋成熟,加上对于数据的重视,数据基础平台以及数据库的完善,所收集到的数据更加完整,对于分析提供了强有力的支持,同时通过数据分析来为企业经营提供决策变得越来越重要,本文在这个背景下,基于电商用户数据开展分析。

    1.2 数据说明

    本数据集来源于阿里云天池竞赛平台,包含了淘宝天猫2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。

    数据来源:

    图标

    数据说明:

    其中Behavior type ,用户行为类型共有四种,它们分别是

    ps: 数据量级达到一亿,考虑到电脑性能问题,故提取其中的100万左右数据作为本次分析的原始数据.

    第二部分 分析思路

    本次分析的目的是从多个维度分析用户数据、行为数据、商品数据,发现能够提升销售的建议。

    针对销售如何提升提出疑问:

    1.哪些商品是热搜商品?哪些是畅销商品?热搜商品是否就是畅销商品?

    2.用户各个行为类型的占比是多少?行为之间的转化率是怎样的?哪个环节流失比较严重?

    3.工作日或周末,每天不同时间段对于用户行为的影响

    4.使用RFM方法对用户进行分类

    针对分析目的,采用多维度拆解分析方法对问题进行拆解,并在分析过程中使用漏斗模型、对比分析法、RFM模型分析法、假设检验分析方法对流程级业务指标中的问题进行分析。

    分析思路如下:

    第三部分 数据清洗

    3.1 选择子集

    本数据集各字段均有分析价值,不需要进行本项操作

    3.2列名重命名

    通过Navicate 进行操作,不详细赘述,命名后字段

    3.3删除重复值

    根据字段内容进行分析后,将UserID,ItemID,TimeStamp设置成联合主键,经验证,不存在数据重复。

    select UserID,ItemID,TimeStamp from userbehavior 
    GROUP BY UserID,ItemID,TimeStamp having count(1)>1;

    3.4 缺失值处理

    select count(UserID),count(ItemID),count(CategoryID),count(BehaviorType),
    count(TimeStamp) from userbehavior;

    3.5 一致化处理

    考虑到要对日期进行详细分析,但是timestamp格式是时间戳,包含了日期和时间,因此要对该字段进行拆分并调整成日期和时间格式

    新增日期和时间字段

    alter table userbehavior add Date date not null,add Time varchar(10) not null;

    更新字段内容

    UPDATE userbehavior set Date = FROM_UNIXTIME(TimeStamp,'%Y-%m-%d'),
    Time = FROM_UNIXTIME(TimeStamp,'%k');

    经测试发现,时间只记录了小时,因此提取时间时只制定K

    结果如下:

    3.6 异常值处理

    检查日期是否在数据集规定范围内2017-11-25至2017-12-3

    SELECT max(Date),MIN(Date) from userbehavior;

     

    发现有异常值数据,对其进行删除

    select count(1) from userbehavior WHERE Date < '2017-11-25'; 

    共1099999条数据,异常数据520条

    DELETE from userbehavior WHERE Date < '2017-11-25';
    select count(1) from userbehavior;

    删除后剩余

    第四部分 数据分析

    4.1 用户行为路径分析

    SELECT BehaviorType,count(1) 行为类型计数 from userbehavior GROUP BY BehaviorType;

    发现用户点击量占据89.63%,而购买量仅占所有数据的2.03%,,用户从浏览到购买的转化率只有2.27%,那是什么原因导致的转化率低呢?

    用户来到网站,首先要经过浏览主页,查看推荐商品或者输入关键字找到自己喜欢的商品,然后加购车或者收藏,最后点击购买,支付等一系列操作,那我们只看到了从浏览到购物的转化率低,具体是哪个环节出了问题,还需要进一步的拆解,运用漏斗分析方法来分析哪个环节转化率低导致的整体转化率低。

    按照行为路径,用户在对每款商品总会有以下几种情况的操作

    分析每种情况下的转化率

    创建视图

    create view  user_P  
    AS
    select UserID, ItemID,
    sum(case when BehaviorType = 'pv' then 1 else 0 end) as '点击',
    sum(case when BehaviorType = 'cart' then 1 else 0 end) as '加购',
    sum(case when BehaviorType = 'fav' then 1 else 0 end) as '收藏',
    sum(case when BehaviorType = 'buy' then 1 else 0 end) as '购买'
    from userbehavior 
    GROUP BY UserID, ItemID;
    

    该表的意思是:用户在每个商品上的行为记录,分别包括点击次数,加购次数,收藏次数和购买次数

    -- 点击量
    SELECT sum(点击) from user_p;
    
    -- 点击--购买--10834
    
    SELECT sum(购买) from user_p
    where 点击>0 and 购买>0 and 收藏=0 and 加购=0;
    
    -- 点击--加购--29628
    SELECT sum(加购) from user_p
    where 点击>0  and 收藏=0 and 加购>0;
    
    -- 点击--加购--购买--3169
    SELECT sum(购买) from user_p
    where 点击>0 and 购买>0 and 收藏=0 and 加购>0;
    
    
    -- 点击--收藏--11957
    SELECT sum(收藏) from user_p
    where 点击>0  and 收藏>0 and 加购=0;
    
    -- 点击--收藏--购买--1044
    SELECT sum(购买) from user_p
    where 点击>0 and 购买>0 and 收藏>0 and 加购=0;
    
    
    -- 点击--收藏+加购-1847
    SELECT sum(收藏)+sum(加购) from user_p
    where 点击>0 and 收藏>0 and 加购>0;
    
    -- 点击--收藏+加购 -- 购买 -- 158
    SELECT sum(购买) from user_p
    where 点击>0 and 收藏>0 and 加购>0 and 购买>0;
    
    -- 点击--流失--867742
    SELECT sum(点击) from user_p
    where 点击>0 and 收藏=0 and 加购=0 and 购买=0 ;
    

    计算结果如下图:

    由此我们可以看出,从浏览量到直接购买转化率才1.1%,而浏览后有加购行为的购买转化率是10.7%,有收藏行为的转化率是8.7%,所以顾客有收藏或者加购的行为之后,会提升转化率,所以我们需要从产品交互界面、营销机制等方面让用户去多加购,多收藏。同时我们发现浏览后加购的转化率是3.1%,并且加购后到购买转化率为10.7%是最高的,所以引导加购行为更容易,效率更高。

    当然我们也从中发现了一个巨大的问题,就是用户从点击量到下一层操作中,转化率都很低,说明出用户花了大量的时间去浏览商品,而真正下单的却很少,我们也都知道淘宝天猫的大部分用户都是女性,那女性逛街是非常厉害的,一下午甚至是一天,为什么呢?是因为女性往往购物不是买自己需要什么,而是自己喜欢什么,也就是所谓的闲着没事瞎逛,所以对于淘宝天猫这种购物平台,商品的推荐功能显得尤为重要,如果能够推荐用户喜欢的商品,那自然会下单,如果不喜欢也就只能是看看而已。

    4.2 转化率低的原因分析

    这里只是针对平台问题,提出假设:推荐机制不合理,给用户推荐的都是不喜欢的商品,造成转化率低

    分析:这里可以通过分析高浏览量商品与高购买量商品之间是否存在高度重合,如果是的,那就说明推荐的商品是用户喜欢,假设就不成立,如果不是则证明假设成立。

    浏览量前10的商品类

    SELECT CategoryID,count(CategoryID) 点击次数 from userbehavior
    where BehaviorType = 'pv'
    GROUP BY CategoryID ORDER BY 点击次数 DESC limit 10;
    

    购买量前10的商品类

    SELECT CategoryID,count(CategoryID) 点击次数 from userbehavior
    where BehaviorType = 'buy'
    GROUP BY CategoryID ORDER BY 点击次数 DESC limit 10;

    从图中可以看出点击量高的购买量不一定高

    接下来我们细分到每个商品

    -- 浏览量前10的商品
    SELECT ItemID,count(ItemID) 点击次数 from userbehavior
    where BehaviorType = 'pv'
    GROUP BY ItemID ORDER BY 点击次数 DESC limit 10;
    
    -- 购买量前10的商品
    SELECT ItemID,count(ItemID) 点击次数 from userbehavior
    where BehaviorType = 'buy'
    GROUP BY ItemID ORDER BY 点击次数 DESC limit 10;
    
    -- 计算点击量前10的商品的购买量
    select * from 
    (SELECT itemid,count(BehaviorType) as 购买量
    from userbehavior
    where BehaviorType = 'buy'
    group by itemid ) as a
    where itemid in('812879','138964','3845720','3708121','2032668','2331370','2338453','1535294','3031354','4211339');
    
    
    -- 计算购买量前10的点击量
    select * from 
    (SELECT itemid,count(BehaviorType) as 浏览量
    from userbehavior
    where BehaviorType = 'pv'
    group by itemid ) as a
    where itemid in('3122135','3237415','2964774','2124040','1034594','4401268','1595279','1004046','1910706','11517');
    

    最终数据如下表,首先看浏览量TOP10的表格,前10浏览量的商品对应的购买量几乎没有,也就是说平台给予的流量顾客的点击是高的,但是这个产品所产生的销售没有,由于电商业务是以销售为导向的,所以这些商品并不适合冲量销售,不应当给予过多的流量支持。

    反观购买量这边,浏览量都是比较低的,并且和前面浏览量TOP10里没有一个重复的商品ID,也就是说高浏览和高购买是两类不同的商品。

    因此可以得出结论:推荐的商品顾客并不喜欢购买,由于高浏览量并没有带来购买,所以转化率低。

    我们发现2735466、1464116、4145813这三类商品购买量比较高,在高需求量的基础上我们考虑淘宝调整推送机制,增加对这几类商品的推送,以满足用户需求。

    总结:

    1.优化推荐机制,把更多流量给到顾客愿意购买的商品

    2.通过更好的商品推荐,页面交互,积分会员等功能等降低流失率

    3.引导加购,可以加强营销机制引导顾客加购,比如加购物车联系客服领优惠券

     

    接下来从时间维度分析,用户有何规律可循

    4.3 用户在什么时候会浏览商品

    提出假设:用户在周末购买行为会增加

    收集证据:

    select Date,count(BehaviorType) as '总数',
    sum(case when BehaviorType = 'pv' then 1 else 0 end) as '点击',
    sum(case when BehaviorType = 'cart' then 1 else 0 end) as '加购',
    sum(case when BehaviorType = 'fav' then 1 else 0 end) as '收藏',
    sum(case when BehaviorType = 'buy' then 1 else 0 end) as '购买'
    from userbehavior GROUP BY Date;

     

     

    假设不成立,数据一周内每天的波动也不一样,但是由于只有一周的数据,所以这样分析的结果也不具有参考价值。

    提出假设:用户在一天中晚上休息时间点击量会上升

    收集证据:

     

     

    经过对一天中用户行为分布的可视化,可以发现每日0点至3点用户活跃度快速降低,降到一天中活跃度最低值,4点至10点用户活跃度快速上升,10点至18点用户活跃度较平稳,但分别在12点及17点略有下降,18点后用户活跃度开始快速上升,并在20-22时达到一天中用户活跃度的最高值,这也符合大部分人的作息规律。所以,可以考虑在20-22点这个时间段进行一些促销活动和商品推荐以提高转化率。

    此外,可以看出晚上7点到凌晨一点的晚间时间段,用户的操作行为偏向于浏览。用户在白天特别是在商务10点和下午1点,购买行为比率达到最高,可见,在这一时间段的用户使用淘宝下单购买商品的意向是最高的。

    4.4 基于FRM分析模型的用户分层

    RFM是3个指标的缩写,最近一次消费时间间隔(Recency),消费频率(Frequency),消费金额(Monetary)。通过这3个指标对用户分类。

    接下来就需要利用SQL语句,计算每个用户的最近一次消费时间间隔和消费频率,消费金额由于数据缺失,暂且不予考虑。

    计算最近一次消费时间间隔(R)

    R = 数据统计时间 - 用户最新消费时间

    F = 用户购买次数总和

    由于我们使用的是历史数据,因此,这里把数据集中最新的时间定为数据统计时间2017-12-3

    select UserID,datediff('2017-12-3',max(Date))+1 as R ,count(BehaviorType) as F from userbehavior 
    where BehaviorType = 'buy'
    group by UserID

    给R和F按价值打分

    结果:

    select *,
    (case when R<=2 then 4
     when R between 3 and 4 then 3
    when R between 5 and 7 then 2
    when R between 8 and 9 then 1 end) as Rscore,
    (case when F between 1 and 6 then 1
    when F between 7 and 12 then 2
    when F between 13 and 18 then 3
    when F>=19 then 4 end)  as Fscore
    from 
    (select UserID,datediff('2017-12-3',max(Date))+1 as R ,count(BehaviorType) as F 
    from userbehavior 
    where BehaviorType = 'buy'
    group by UserID) m

    计算Rscore和Fscore均值

    用户分类

    select 用户分类,count(UserID) as '人数' from
    (select userid,
    (case when RScore>'3.0533' and FScore>'1.1043' then '重要价值用户'
          when RScore>'3.0533' and FScore<'1.1043' then '重要发展用户'
          when RScore<'3.0533' and FScore>'1.1043' then '重要保持用户'
          when RScore<'3.0533' and FScore<'1.1043' then '重要挽留用户'
     else 0 end) as '用户分类'
    from 
    
    (select *,
    (case when R<=2 then 4
    when R between 3 and 4 then 3
    when R between 5 and 7 then 2
    when R between 8 and 9 then 1 end) as Rscore,
    (case when F between 1 and 6 then 1
    when F between 7 and 12 then 2
    when F between 13 and 18 then 3
    when F>=19 then 4 end)  as Fscore
    from 
    (select UserID,datediff('2017-12-3',max(Date))+1 as R ,count(BehaviorType) as F 
    from userbehavior 
    where BehaviorType = 'buy'
    group by UserID) m) n)f
    group by 用户分类; 
    

    如下图:

    可以发现用户集中在重要发展用户和重要挽留用户上。

    对于占比较大的重要发展用户,其消费频率低,但最近消费距离现在时间较短,因此要想办法提高他的消费频率。

    对于重要挽留用户,最近消费时间距离现在较远、消费频率低。这种用户有即将流失的危险,需要主动联系用户,调查清楚哪里出了问题,并想办法挽回。

    对于重要价值用户,消费频率高且最近消费距离现在时间短,需要给其提供VIP服务。

    对于重要保持用户,最近消费距离现在时间较远,也就是R值低,但是消费频次高。这样的用户,是一段时间没来的忠实客户,可以采取邮件推送、APP推送提醒、促销活动时短信提醒等方式主动和他们保持联系,提高复购率。

    第五部分 结论与建议

    结论

    1.流量高的商品并不是购买量高的商品,高流量的商品购买量低导致了整体的流量转化率低,也就是推荐展示的逻辑并没有以销售为导向。

    2.从用户行为路径中发现,用户浏览后直接购买的转化率较低,而通过加购,收藏等行为后购买的转化率会提升,故需要引导顾客积极加购或者收藏,且对比转化率后发现加购物车所带来的转化是最好的。

    3.用户主要集中在重要发展用户和重要挽留用户,两者加总占用户数的91%

    建议

    1.建议算法部门优先展示购买量TOP10的商品类给顾客,例如2735466、1464116、4145813等,如果说浏览量高的商品是新品或者近期主推的商品,是否可以考虑和TOP10购买的商品按照类目合理搭配销售,提升转化率和连带率。

    2.需积极引导顾客加购物车或者收藏宝贝,对于界面设计部门是考虑如何交互能够让顾客更愿意点击,对于运营部门,可以设置机制引导,例如加购联系客服送5元无门槛优惠券,加购送小样赠品等的机制来引导。

    3. 淘宝的用户搜寻商品的时间段主要在下午6点至晚上11点,也就是大多数人下班后休息的时间。建议运营部门在这个时间段多策划一些营销活动,提高转换率。

    4.对于重要发展用户,其消费频率低,但最近消费距离现在时间较短,因此要想办法提高他的消费频率,通过CRM的红包发放、会员权益奖励、短信提醒优惠等方式提升消费频率。

    5.对于重要挽留用户,最近消费时间距离现在较远、消费频率低。这种用户有即将流失的危险。建议通过APP推送、短信和邮件等形式发放有偿问卷主动联系用户,调查清楚哪里出了问题,制定相应的挽回策略。

     

    小彩蛋,用户行为的流程

  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/bubu99/p/13651934.html
Copyright © 2011-2022 走看看