真實 | 滴滴 數(shù)據(jù)分析原來是這樣做的!

來源 |?凹凸數(shù)據(jù)
隨著企業(yè)日常經(jīng)營活動的進行,企業(yè)內(nèi)部必然產(chǎn)生了各式各樣的數(shù)據(jù),如何利用這些數(shù)據(jù)得出有益的見解,并支持我們下一步的產(chǎn)品迭代以及領(lǐng)導(dǎo)決策就顯得尤為重要。
A/B測試是互聯(lián)網(wǎng)企業(yè)常用的一種基于數(shù)據(jù)的產(chǎn)品迭代方法,它的主要思想是在控制其他條件不變的前提下對不同(或同一、同質(zhì))樣本設(shè)計不同實驗水平(方案),并根據(jù)最終的數(shù)據(jù)變現(xiàn)來判斷自變量對因變量的影響;A/B測試的理論基礎(chǔ)主要源于數(shù)理統(tǒng)計中的假設(shè)檢驗部分,此部分統(tǒng)計學(xué)知識讀者可自行探索。
長話短說,本次實戰(zhàn)用到的數(shù)據(jù)集分為兩個Excel文件,其中test.xlsx為滴滴出行某次A/B測試結(jié)果數(shù)據(jù),city.xlsx為某城市運營數(shù)據(jù)。
數(shù)據(jù)說明
| test.xlsx | city.xlsx |
|---|---|
| date:日期 | date:日期 |
| group:組別(控制組/實驗組) | hour:時點 |
| requests:訂單請求數(shù) | requests:請求數(shù) |
| gmv:成交總額 | trips:訂單數(shù) |
| coupon per trip:每單優(yōu)惠券金額 | supply hours:可服務(wù)時長 |
| trips:訂單數(shù) | average minutes of trips:平均訂單時長(分鐘) |
| canceled requests:取消請求數(shù) | pETA:顧客預(yù)計等待時長 |
| aETA:顧客實際等待時長 | |
| utiliz:司機在忙率 |
test.xlsx 數(shù)據(jù)可以用來判斷實驗條件對此次A/B測試的結(jié)果影響是否顯著;city.xlsx 數(shù)據(jù)可以用來探索該城市運營中出現(xiàn)的問題,根據(jù)關(guān)鍵結(jié)論輔助決策。
在本文中,我們將使用該數(shù)據(jù)來做A/B測試效果分析與城市運營分析。
一、A/B測試效果分析
1、數(shù)據(jù)導(dǎo)入
#A/B測試結(jié)果數(shù)據(jù)導(dǎo)入
import?pandas?as?pd
test?=?pd.read_excel('/home/kesci/input/didi4010/test.xlsx')
test.head()

2、計算ROI
#計算優(yōu)惠券投入相對gmv的ROI
test['ROI']=test['gmv']/(test['coupon?per?trip']*test['trips'])
test.head()

3、requests檢驗
數(shù)據(jù)共58條,對照組與實驗組各29條,樣本量<30。
3.1 requests方差檢驗
記兩組requests方差分別為從c1,c2 零假設(shè)H0:c1=c2;備選假設(shè):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,不拒絕原假設(shè),因此可認(rèn)為兩組實驗requests齊方差。
3.2 requests均值檢驗
該數(shù)據(jù)為同一樣本實驗前后的不同水平,因此選用配對樣本t檢驗。 記兩組requests均值分別為從u1,u2 零假設(shè)H0:u1=u2;備選假設(shè):H1:u1≠u2 顯著性水平取0.05
#配對樣本t檢驗(兩獨立樣本t檢驗之前需檢驗是否齊方差,此處不需要)
st.ttest_rel(requests_A,requests_B)

p值大于0.05,不拒絕原假設(shè),因此可認(rèn)為實驗條件對requests影響不顯著。
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)

p值大于0.05,不拒絕原假設(shè),因此可認(rèn)為兩組實驗gmv齊方差。
4.2 gmv均值檢驗
#配對樣本t檢驗(兩獨立樣本t檢驗之前需檢驗是否齊方差,此處不需要)
st.ttest_rel(gmv_A,gmv_B)

p值小于0.05,拒絕原假設(shè),因此可認(rèn)為實驗條件對gmv有顯著影響。
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)
p值大于0.05,不拒絕原假設(shè),因此可認(rèn)為兩組實驗ROI齊方差。
5.2 ROI均值檢驗
#配對樣本t檢驗(兩獨立樣本t檢驗之前需檢驗是否齊方差,此處不需要)
st.ttest_rel(ROI_A,ROI_B)

p值小于0.05,拒絕原假設(shè),因此可認(rèn)為實驗條件對ROI有顯著影響。

二、城市運營分析
1、數(shù)據(jù)導(dǎo)入
#導(dǎo)入該城市運營相關(guān)數(shù)據(jù)
city?=?pd.read_excel('/home/kesci/input/didi4010/city.xlsx')
city.head()

#查看數(shù)據(jù)有無缺失值
city.info()

2、數(shù)據(jù)探索
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()

可見,在11、12、13這三個時間點內(nèi),12點用戶發(fā)起訂單的需求是最大的,其次是13點,11點。
司機運營平臺應(yīng)考慮加大該時點車輛供應(yīng)。
2.2 單量最多的日期
req_date?=?city.groupby(['date'],as_index=True).agg({'requests':sum},inplace=True)
req_date.sort_values('date').head()

#繪制訂單請求數(shù)隨日期變化的折線圖
req_date.plot(kind='line')
plt.show()

單月訂單請求數(shù)隨日期的變化呈周期性變化,我們猜測4個峰值分別對應(yīng)4個周末,周末用戶出行需求較大。
經(jīng)驗證發(fā)現(xiàn)猜想與數(shù)據(jù)吻合,因此司機運營平臺應(yīng)考慮加大周末、節(jié)假日的車輛供給。
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

13點訂單需求較多,但訂單完成率僅47%,說明較多訂單沒有得到及時相應(yīng)。
客運部應(yīng)重點關(guān)注13點訂單相應(yīng)時長,排查具體原因。
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()

單月每日訂單完成率規(guī)律不太明顯,但幾個谷值基本都出現(xiàn)在周末附近,說明客戶出行需求的提升可能導(dǎo)致響應(yīng)率的降低。
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

#繪制顧客等待時長復(fù)合柱狀圖
eta_hour.plot(kind='bar')

以上可見,無論哪個時點,用戶實際等待時長均明顯大于用戶預(yù)計等待時長。
各時點用戶等待時長差異不明顯,但13點最高。
客運部一方面應(yīng)提升用戶預(yù)計等待時長的準(zhǔn)確性,另一方面優(yōu)化平臺派單邏輯等。
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

12點司機在忙總時長最長,在忙率也最高,用戶訂單請求也最多,說明車輛總數(shù)偏少。
2.7 訂單時長
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點訂單量也較大,此時點司機服務(wù)時長較短。
為優(yōu)化用戶出行體驗,司機運營平臺可聯(lián)合客運部可考慮此時段盡量分配總服務(wù)時長較長的司機來接單(經(jīng)驗較為豐富)。
3、后續(xù)思考方向:
提升顧客預(yù)計等待時長預(yù)測準(zhǔn)確度(需要歷史數(shù)據(jù)進行預(yù)測) 加大車輛投入(分車輛不同等級來看,因此可能需要車輛相關(guān)信息表) 優(yōu)化用戶體驗(需要客訴相關(guān)數(shù)據(jù)) 優(yōu)化平臺派單邏輯(需要訂單的位置相關(guān)數(shù)據(jù)) 個性化需求(需要用戶屬性、及其他行為數(shù)據(jù))
