从和鲸上看到了一个滴滴数据集,看介绍说的是数据来自滴滴出行内部,也有小道消息说是面试题?那我们来试一下。
上图为两个数据集的数据字典,可以看出来维度比较少,进行AB test的test数据集是58行,运营情况分析的city数据集是90行。两者皆无空值。
数据量虽少,但好在没有缺失值。先将数据拆分为参照组和实验组,这边我用group_A代替参照组,group_B代替实验组。
group_A = test.query("group == 'control'")
group_B = test.query("group == 'experiment'")
简单的看一下group_A几个维度随着日期变化的趋势。
这么看起来,好像有点牛逼?每天的指标都是上升的,或者说数据集里面储存的是累计数据?我们将他清洗一下成为每日数据。
for col in ['trips','requests','canceled requests','gmv']:
group_A[f"c_{col}"]=group_A[col].diff().fillna(group_A[col].min())
# 计算每天的每单优惠券金额
group_A['coupon_consum'] = (group_A['coupon per trip']*group_A['trips'])
group_A['c_coupon'] = group_A['coupon_consum'].diff().fillna(
group_A['coupon_consum'].min())
group_A['c_coupon per trip'] = group_A['c_coupon']/group_A['c_trips']
# 新增ROI,由于缺少具体的盈利数据,所以这边就用每日gmv和每日优惠券金额做个简易的ROI指标
group_A['ROI'] = group_A['c_gmv']/group_A['c_coupon']
# 删除累计使用优惠券金额
group_A.drop('coupon_consum', axis=1, inplace=True)
diff()函数可以计算两行之间的偏差,默认情况下间隔是1行,所以第一行会变为NaN,因此我在后面使用fillna填充第一天的数据
这么看起来好像才像正常的运营数据,那把group_B也一并清洗一下。
# 因篇幅原因,略去group_B清洗代码,详情见文末
for i in [group_A,group_B]:
i['cancel rate']=i['c_canceled requests']/i['c_requests']
i['accept rate']=i['c_trips']/(i['c_requests']-i['c_canceled requests'])
test总共58条记录,两个独立样本,每个样本是29条记录,总体标准差未知,使用双样本T检验。
原假设:AB两组均值相等
备择假设:AB两组均值不等
显著性水平:0.05
from scipy import stats
ttest = []
for i in ['c_trips', 'c_requests', 'c_canceled requests', 'c_gmv', 'c_coupon per trip', 'ROI', 'accept rate', 'cancel rate']:
t, p = stats.ttest_rel(group_B[i], group_A[i])
ttest.append([i, t, p])
pd.DataFrame(ttest, columns=['col', 't', 'p'])
仅有每日GMV的P值小于0.05,所以本次ABtest仅对每日GMV有显著性差异。
但每日GMV的T值小于0,即实验组的每日GMV均值小于控制组,由于未知案例中GMV的统计口径,无法对指标拆解,定位背后原因,所以只能笼统地给出方案:“需优化运营策略,再次进行ABtest”。
在AB test和统计学入门的门槛边缘不断徘徊,如果有问题恳请各位大佬在评论区批评!
可以看出实验组和控制组的GMV分布几乎无差,实验组略低于控制组。
实验组每日ROI均值低于控制组。
两组的接单率相差不大,但是实验组的振幅较小。
两组的订单取消率无显著差异。
这个嘛,为什么ROI会和每日均单优惠券金额呈现反比关系呢,合着意思是不花钱ROI能最高?
根据上面几个角度,暂且提出以下问题:
初步认为在11-13点这个时间段内运力是明显不足的,如果有地理信息的话,可以确定这个时段在哪一个区域急需增加运力。
可以认为是12、13点司机在忙率较高,所以导致了12、13点的接单率下降,顾客实际等待时间增加。
city['rate']=city.trips/city.requests
city.corr().style.background_gradient('OrRd')
因为滴滴有防疲劳驾驶的限制,所以这两个维度的正相关性是很容易理解的。
参考链接:和鲸
数据及代码:百度云 提取码avbp
wx关注“林胖学Python”第一时间获取最新内容哦!