其他
干货 | 滴滴 数据分析原来是这样做的!
The following article is from 凹凸数据 Author Rilke Yang
数据说明
test.xlsx | city.xlsx |
---|---|
date:日期 | date:日期 |
group:组别(控制组/实验组) | hour:时点 |
requests:订单请求数 | requests:请求数 |
gmv:成交总额 | trips:订单数 |
coupon per trip:每单优惠券金额 | supply hours:可服务时长 |
trips:订单数 | average minutes of trips:平均订单时长(分钟) |
canceled requests:取消请求数 | pETA:顾客预计等待时长 |
aETA:顾客实际等待时长 | |
utiliz:司机在忙率 |
一、A/B测试效果分析
1、数据导入
#A/B测试结果数据导入
import pandas as pd
test = pd.read_excel('/home/kesci/input/didi4010/test.xlsx')
test.head()
2、计算ROI
#计算优惠券投入相对gmv的ROI
test['ROI']=test['gmv']/(test['coupon per trip']*test['trips'])
test.head()
3、requests检验
数据共58条,对照组与实验组各29条,样本量<30。
3.1 requests方差检验
记两组requests方差分别为从c1,c2
零假设H0:c1=c2;备选假设:H1:c1≠c2
显著性水平取0.05
#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)
p值大于0.05,不拒绝原假设,因此可认为两组实验requests齐方差。
3.2 requests均值检验
该数据为同一样本实验前后的不同水平,因此选用配对样本t检验。 记两组requests均值分别为从u1,u2 零假设H0:u1=u2;备选假设:H1:u1≠u2 显著性水平取0.05
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)
st.ttest_rel(requests_A,requests_B)
4、gmv检验
4.1 gmv方差检验
#levene检验gmv是否齐方差
gmv_A=test[test.group=='control'].gmv
gmv_B=test[test.group=='experiment'].gmv
st.levene(gmv_A,gmv_B)
4.2 gmv均值检验
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)
st.ttest_rel(gmv_A,gmv_B)
5、ROI检验
5.1 ROI方差检验
#levene检验ROI是否齐方差
ROI_A=test[test.group=='control'].ROI
ROI_B=test[test.group=='experiment'].ROI
st.levene(ROI_A,ROI_B)
5.2 ROI均值检验
#配对样本t检验(两独立样本t检验之前需检验是否齐方差,此处不需要)
st.ttest_rel(ROI_A,ROI_B)
二、城市运营分析
1、数据导入
#导入该城市运营相关数据
city = pd.read_excel('/home/kesci/input/didi4010/city.xlsx')
city.head()
#查看数据有无缺失值
city.info()
2、数据探索
2.1 单量最多的时间点
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.xticks(rotation=0)
plt.show()
2.2 单量最多的日期
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()
2.3 各时段订单完成率
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
2.4 单月每日订单完成率
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()
2.5 顾客等待时间
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')
2.6 司机在忙率
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
2.7 订单时长
trip_min = city.groupby(['hour'],as_index=False).agg({'average minutes of trips':np.mean})
trip_min
supply_hour = city.groupby(['hour'],as_index=False).agg({'supply hours':np.mean})
supply_hour
3、后续思考方向:
提升顾客预计等待时长预测准确度(需要历史数据进行预测) 加大车辆投入(分车辆不同等级来看,因此可能需要车辆相关信息表) 优化用户体验(需要客诉相关数据) 优化平台派单逻辑(需要订单的位置相关数据) 个性化需求(需要用户属性、及其他行为数据)
本文相关代码下载:
https://alltodata.cowtransfer.com/s/9bb9acdc15ae40
全网最详尽的负载均衡原理图解
2021-03-10
你还在手撕微服务?快来用go-zero自动生成
2021-03-09
CNN一定需要池化层吗?
2021-03-08