一.A/B测试效果分析
1. 数据导入
#数据导入
import pandas as pd
test = pd.read_excel("/home/kesci/input/didi4010/test.xlsx")test.head()
2. 计算ROI
#计算ROI
test["ROI"]=test["gmv"]/(test["coupon per trip"]*test["trips"])
test.head()
3. requests检验
requests方差检验
#levene检验requests是否齐方差
requests_A=test[test.group=="control"].requests
requests_B=test[test.group=="experiment"].requests
import scipy.stats as st
st.levene(requests_A,requests_B)
LeveneResult(statistic=0.014685075667736849, pvalue=0.903980667108546)
p值大于0.05,不拒绝原假设,因此可认为两组实验requests齐方差。
requests均值检验
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)
st.ttest_rel(requests_A,requests_B)
Ttest_relResult(statistic=1.6436140982479508, pvalue=0.11143970454099936)
p值大于0.05,不拒绝原假设,因此可认为实验条件对requests影响不显著。
4. gmv检验
gmv方差检验
#levene检验gmv是否齐方差
gmv_A=test[test.group=="control"].gmv
gmv_B=test[test.group=="experiment"].gmv
st.levene(gmv_A,gmv_B)
LeveneResult(statistic=0.02865341299111212, pvalue=0.8661917430097603)
p值大于0.05,不拒绝原假设,因此可认为两组实验gmv齐方差。
gmv均值检验
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)
st.ttest_rel(gmv_A,gmv_B)
Ttest_relResult(statistic=4.247583846321442, pvalue=0.00021564303983362577)
p值小于0.05,拒绝原假设,因此可认为实验条件对gmv有显著影响。
5. ROI检验
ROI方差检验
#levene检验ROI是否齐方差
ROI_A=test[test.group=="control"].ROI
ROI_B=test[test.group=="experiment"].ROI
st.levene(ROI_A,ROI_B)
LeveneResult(statistic=0.10363884745479335, pvalue=0.7487044961896305)
p值大于0.05,不拒绝原假设,因此可认为两组实验ROI齐方差。
ROI均值检验
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)
st.ttest_rel(ROI_A,ROI_B)
Ttest_relResult(statistic=10.305504459268173, pvalue=4.93261342734923e-11)
p值小于0.05,拒绝原假设,因此可认为实验条件对ROI有显著影响。
二.城市运营分析
1. 数据导入
city = pd.read_excel("/home/kesci/input/didi4010/city.xlsx")
city.head()
city.info()
2. 数据探索
单量最多的时间点
req_hour = city.groupby(["hour"],as_index=True).agg({"requests":sum},inplace=True)
req_hour
import matplotlib.pyplot as plt
req_hour.plot(kind="bar")
plt.show()
可见,在11、12、13这三个时间点内,12点用户发起订单的需求是最大的,其次是13点,11点。
司机运营平台应考虑加大该时点车辆供应。
单量最多的日期
req_date = city.groupby(["date"],as_index=True).agg({"requests":sum},inplace=True)
req_date.sort_values("date").head()
req_date.plot(kind="line")
plt.show()
单月订单请求数随日期的变化呈周期性变化,我们猜测4个峰值分别对应4个周末,周末用户出行需求较大。
经验证发现猜想与数据吻合,因此司机运营平台应考虑加大周末、节假日的车辆供给。
各时段订单完成率
com_hour = city.groupby(["hour"],as_index=False).agg({"requests":sum,"trips":sum},inplace=True)
com_hour["rate"]=com_hour["trips"]/com_hour["requests"]
com_hour
13点订单需求较多,但订单完成率仅47%,说明较多订单没有得到及时相应。
客运部应重点关注13点订单相应时长,排查具体原因。
单月每日订单完成率
com_date = city.groupby(["date"],as_index=True).agg({"requests":sum,"trips":sum},inplace=True)
com_date["rate"]=com_date["trips"]/com_date["requests"]
com_date.sort_values("date").head()
com_date.rate.plot(kind="line")
plt.show()
单月每日订单完成率规律不太明显,但几个谷值基本都出现在周末附近,说明客户出行需求的提升可能导致响应率的降低。
顾客等待时间
import numpy as np
eta_hour = city.groupby(["hour"],as_index=True).agg({"pETA":np.mean,"aETA":np.mean},inplace=True)
eta_hour
eta_hour.plot(kind="bar")
<matplotlib.axes._subplots.AxesSubplot at 0x7f3aaebb2c18>
以上可见,无论哪个时点,用户实际等待时长均明显大于用户预计等待时长。
各时点用户等待时长差异不明显,但13点最高。
客运部一方面应提升用户预计等待时长的准确性,另一方面优化平台派单逻辑等。
司机在忙率
city["busy"] = city["supply hours"]*city["utiliz"]
city.head()
busy_hour = city.groupby(["hour"],as_index=False).agg({"supply hours":sum,"busy":sum})
busy_hour["utiliz"] = busy_hour["busy"]/busy_hour["supply hours"]
busy_hour
12点司机在忙总时长最长,在忙率也最高,用户订单请求也最多,说明车辆总数偏少。
订单时长
trip_min = city.groupby(["hour"],as_index=False).agg({"average minutes of trips":np.mean})trip_min
12点用户订单需求较多,同时订单时长最长,说明这个时间点是一个非常重要的时间点。
supply_hour = city.groupby(["hour"],as_index=False).agg({"supply hours":np.mean})
supply_hour
13点订单量也较大,此时点司机服务时长较短。
为优化用户出行体验,司机运营平台可联合客运部可考虑此时段尽量分配总服务时长较长的司机来接单(经验较为丰富)。
后续思考方向:
提升顾客预计等待时长预测准确度(需要历史数据进行预测)
加大车辆投入(分车辆不同等级来看,因此可能需要车辆相关信息表)
优化用户体验(需要客诉相关数据)
优化平台派单逻辑(需要订单的位置相关数据)
个性化需求(需要用户属性、及其他行为数据)
End.
作者:Rilke Yang
来源:和鲸社区
本文为转载分享,如侵权请联系后台删除
- 我的微信公众号
- 微信扫一扫
- 我的微信公众号
- 微信扫一扫
评论