第二题:
表的结构如下:
User_id createtime opration
cookie1,2015-04-10,A
cookie1,2015-04-11,B
cookie1,2015-04-12,C
cookie1,2015-04-13,A
cookie1,2015-04-14,B
cookie1,2015-04-15,A
cookie1,2015-04-16,A
cookie2,2015-04-10,G
cookie2,2015-04-11,A
cookie2,2015-04-12,A
cookie2,2015-04-13,A
cookie2,2015-04-14,A
cookie2,2015-04-15,A
cookie2,2015-04-16,C
cookie3,2015-04-10,A
cookie3,2015-04-11,B
cookie3,2015-04-12,C
cookie3,2015-04-13,D
cookie3,2015-04-14,D
cookie3,2015-04-15,E
cookie3,2015-04-16,F
题目要求:
把A操作后是B,AB必须相连的客户找出来
步骤一:hive 创建表
create table pddtest2(cookieid string,
createtime string,
opration string)
row format delimited fields terminated by ',';
步骤二:导入数据
load data local inpath "/opt/data_w/pddtest2.txt" into table pddtest2;
步骤三:中间表pddtest2m
hive> create table pddtest2m as
> select cookieid,createtime,opration,
> row_number() over (partition by cookieid order by createtime) as rn,
> LEAD(opration,1) over (partition by cookieid order by createtime) as nextop
> from pddtest2;
结果如图所示:
具体的开窗函数(lead,lag等用法详见:)
https://www.cnblogs.com/qingyunzong/p/8798606.html
步骤四:从中间表通过where筛选出来
hive> select distinct cookieid,
> opration,nextop from pddtest2m
> where opration="A" AND nextop="B";
表结构如下
一、求每日新增(感觉应该是按天输出) --比较简单,不放图了
方法:每日新增即用户第一次访问,这里的思路就是按照客户分组,将客户的最早登录时间找出来,作为中间表,再按时间来统计这一天是第一次访问的用户个数
select min_date,count(distinct user_id) as per_day_new
from (select user_id,min(log_date) as min_date from table group by user_id) t
group by t.min_date;
二、求新增的访客在第二天和第三十天的回访率
方法一(by 77)
count(distinct if(order_cnt>0,poi_id,null)) as 动销门店数
思路:
2/30日的回访率的意思:第1天是第一次访问本网站,在第2天/30天再次访问本网站,则称回访
count(null)=0
count(列名) 列名中有null,不对null进行计数
select to_date(a.min_time) as min_log,
count(distinct if(b.user_id is not null, b.user_id , null))
/count(distinct a.user_id) as second_ratio, -- 第二天的回访率
count(distinct if(c.user_id is not null , c_user_id , null))
/count(distinct a.user_id) as thirtieth_ratio -- 第三十天的回访率
from(
select user_id,min(log_time) as min_time
from tracking
group by user_id
) a -- 用户id和最小时间表
left join tracking_log as b
on a.user_id = b>user_id and
datediff(to_date(b.log_time),to_date(a.min_time)) = 1
left join tracking_log as c
on a.user_id = c.user_id and
datediff(to_date(c.log_time),to_date(a.min_time)) = 30
group by 1
在hivesql里
(1)日期时间转日期函数:
to_date语法: to_date(string timestamp)
说明: 返回日期时间字段中的日期部分。
举例:
select to_date('2011-12-08 10:03:01') from dual;
结果:2011-12-08
(2)日期比较函数
datediff语法: datediff(string enddate,string startdate)
说明: 返回结束日期减去开始日期的天数。
举例:
select datediff('2012-12-08','2012-05-09') from dual;
213
方法二:回访比例计算公式=二日回访用户数/总体用户数
这里我们可以根据这个访问时间去一下重,将这个log_time放在第一列,将其他列放在最后~因为一个用户可能在一天访问多次,整理后可以得到如下的表
建立表pddtest33如下:
create table pddtest33 as
> select a.user_id,a.sumdate,
> a.log_time,
> if(datediff(a.log_time,a.sumdate)=1,1,0) as diff1,
> if(datediff(a.log_time,a.sumdate)=30,1,0) as diff30
> from (select b.user_id,b.log_time,
> min(b.log_time) over (partition by b.user_id) as sumdate from (select distinct log_time,user_id from pddtest3) b) a;
Min_date 表示用户的最早登录的时间,count(min_date)就可以统计出每一天的新增用户
然后将每个用户的第一次登录的时间往后延长一天,如果存在,就标为1,最后sum(diffdate1)
就是第二天的回访客户的数量,所以回访率就是sum(diffdate1)/count(min_date),同理也可以计算出30天的回访率。
hive> select sum(diff1)/count(distinct user_id) as huifang1,
> sum(diff30)/count(distinct user_id) as huifang2,sumdate
> from pddtest33
> group by sumdate;
用excel人工计算得出的结果如下:
验证下:hive的查询结果:
注意:这里除法没有考虑分母是0的情况,感觉电商也不可能某一天的新增访问量为0hh。
以共享单车为例,由于单车锁可能遇到短信故障,导致用户无法开锁,特别是上下班高峰期,会影响用户体验,从而导致订单量急剧下降。这个时候如果能够启动蓝牙开锁方式,在配置开启后、强制用户用蓝牙开锁,那么会有效地避免短信故障的问题。但是,强制用户启动蓝牙开镇会让用户手动开启蓝牙,如何评估强制用户启动蓝牙开锁带来的影响呢?我们需要用AB实验平台对蓝牙开锁实验进行AB实验。
第一步,分析现状。确定当前最关键的改进点,明确测试目标。
本实验主要用于测试强制用户启动蓝牙开锁的影响,因此定义实验组和对照组如下:
实验组的操作流程为点击扫码按钮一弹出强制用户启动蓝牙开锁教育页面一弹出普通扫码页面一扫码成功。
对照组的操作流程为点击扫码按钮一弹出普通扫码页面一扫码成功
同时,明确如下测试目标
(1)评估强制用户启动蓝牙开锁教育和非强制用户启动蓝牙开锁教育两种项面的扫码转化率
(2)评估强制用户启动蓝牙开锁教育后引起的订单量流失情况。
(3)检验两组指标是否有差异,差异是否显著。
第二步,建立假设。根据现状分析做出优化改进的假设,提出优化建议。
(1)原假设H0:通过实验组方式进入扫码页面,扫码转化率、订单量、日骑行用户数不低于对照组的水平;
(2)备择假设H1:通过实验组方式进入扫码页面,扫码转化率、订单量、日骑行用户数低于对照组的水平。
这里简单介绍一下原假设和备择假设,原假设是指实验用户想收集证据予以反对的假设,用H0表示,备择假设是指实验用户想收集证据予以支持的假设用H1表示。
第三步,设定目标。设置主要目标,用来衡量各优化版本的优劣,设置辅助目标,用来评估优化版本对其他方面的影响。
根据实验目的,可以通过下面的数据指标评判实验效果。
(1)扫码转化率(实验组对比对照组)。
(2)人均订单数(实验组对比对照组,以及实验组在实验前后对比)。
(3)蓝牙教育页面的PV、UV数据。
第四步,设计送代方案。制作两个实验方案的原型,并完成相关功能的开发。
第五步,在AB实验平台创建实验,定实验测试的版本及每个线上版本流量比例。
首先,筛选实验的城市,通过AB实验平台抽取样本,对筛选的用户做样本独立性和一致性检验,并对实验结果指标做逐日性和周期性检验,详细流程如下
(1)筛选实验城市。由于每个区域中城市的订单数之间均有严重的右偏,因此在各个大区各选一个略高于大区平均订单数的城市作为实验对象。然后,抽取所选城市用户的10%流量分别作为实验组和对照组。
(2)筛选样本。在实验平台中选择流量,抽样样本。抽取方法:将一个城市的用户分成10个桶,实验组随机抽取1个桶,对照组随机抽取1个桶。固定好两个桶之后,进行定向追踪。
(3)样本独立性和一致性检验。基于用户画像(性别、年龄、平台等)和骑行頻次(过去一周、一个月的人均订单数)对实验组和对照组的用户做一致性检验,确保两组用户的独立性和一致性,避免样本本身差异帯来的影响。分桶后就可以得到用户的 userid,进行校验。
通过用户一致性检验,得出实验组和对照组在用户画像与骑行频次上没有显著差异
(4)逐日显著性校验。对于各个城市,以每天为一个统计周期,以每一个用户为独立样本,以每一个样本的扫码转化率(当日扫码数/当日打开App数)为因变量,检验两组用户群体在扫码转化率和人均订单数上差异的显著性,本次校验使用单边检验。
(5)周期显著性校验。在实验持续一段时间(如一周)之后,检验实验组样本在实验前和实验后的时间窗口的人均订单数差异,作独立样本配对T检验,检验实验是否会导致用户在一段时间内的骑行频次显著下降。
通过上面的准备,便可以在实验平台创建测试实验,具体步骤如下
(1)根据实验的设计方案梳理页面埋点文档,完成客户端埋点。
(2)前端和服务端会根据埋点文档进行前端代码埋点,同时增加实验开关的控制。
(3)在实验平台创建一个名为蓝牙强制开锁的应用,在应用下分别设置实验流量和用户标签,创建实验组和对照组两组实验。
(4)实验在线上生效,测试实验方案,追踪实验情况。
第六步 采集数据
针对实验结果获取实验组和对照组的结果
第七步 假设检验
看看结果是否显著,提出对策!