從0到1建設(shè)智能灰度數(shù)據(jù)體系:以vivo游戲中心為例
作者 | vivo 互聯(lián)網(wǎng)數(shù)據(jù)分析團(tuán)隊-Dong Chenwei,vivo 互聯(lián)網(wǎng)大數(shù)據(jù)團(tuán)隊-Qin Cancan、Zeng Kun
本文介紹了vivo游戲中心在灰度數(shù)據(jù)分析體系上的實(shí)踐經(jīng)驗,從“實(shí)驗思想-數(shù)學(xué)方法-數(shù)據(jù)模型-產(chǎn)品方案”四個層面提供了一套較為完整的智能灰度數(shù)據(jù)解決方案,以保障版本評估的科學(xué)性、項目進(jìn)度以及灰度驗證環(huán)節(jié)的快速閉環(huán)。該方案的亮點(diǎn)在于,指標(biāo)異動根因分析方法的引入和全流程自動化產(chǎn)品方案的設(shè)計。
一、引言
游戲業(yè)務(wù)的用戶規(guī)模體量大,業(yè)務(wù)鏈路長,數(shù)據(jù)邏輯繁雜。游戲中心作為游戲業(yè)務(wù)平臺端的核心用戶產(chǎn)品,版本迭代非常頻繁,每次版本上線前都必須進(jìn)行小量級的灰度驗證。2021年以來,平均每1~2周都會有重要版本開始灰度,而且線上有時會同時有多個版本在灰度測試。
灰度的整個過程在數(shù)據(jù)層面主要涉及3個問題:
- 如何確保版本灰度評估的科學(xué)性?
- 如何提升灰度數(shù)據(jù)的產(chǎn)出效率,保障項目進(jìn)度?
- 當(dāng)灰度版本出現(xiàn)指標(biāo)異常問題時,如何快速定位問題完成閉環(huán)?
近兩年來,我們逐步將灰度評估方法體系化地落地到敏捷BI等數(shù)據(jù)產(chǎn)品上,目前灰度數(shù)據(jù)體系已經(jīng)較好地解決了這3個問題。本文首先以版本灰度數(shù)據(jù)體系的基本概念和發(fā)展歷程為鋪墊,接著以“方法論+解決方案”為主線闡述游戲中心在灰度數(shù)據(jù)體系上的實(shí)踐,并展望未來。
二、灰度數(shù)據(jù)體系的發(fā)展
2.1 什么是灰度發(fā)版
當(dāng)游戲中心開發(fā)了全新的首頁界面,應(yīng)該如何驗證新的首頁是否被用戶所接受,并且功能是否完善、性能是否穩(wěn)定?
答:灰度發(fā)版。就是在新版本推送給全量用戶使用之前,按照一定策略選取部分用戶,讓他們先行體驗新版首頁,以獲得他們關(guān)于“新的首頁好用或不好用”以及“如果不好用,是哪里出了問題”的使用反饋。如果出現(xiàn)重大問題,則及時回滾舊版本;反之則根據(jù)反饋結(jié)果進(jìn)行查漏補(bǔ)缺,并適時繼續(xù)放大新版本投放范圍直至全量升級。
2.2 灰度評估方案發(fā)展階段
判斷灰度發(fā)版是否科學(xué)的關(guān)鍵在于控制變量,這一問題的解決過程,也是灰度評估方案迭代和發(fā)展的過程。
階段一:確保了對比的時間相同,但升級速度差異意味著優(yōu)先升級的用戶和未升級的用戶非同質(zhì)用戶,未能規(guī)避樣本差異對數(shù)據(jù)結(jié)果差異的影響。
階段二:確保了對比的人群相同,但用戶行為可能隨時間而變化,無法剔除前后時間因素的差異。
階段三:同時確保了時間和人群相同,有以下三方面優(yōu)勢:
- 將舊版本打包為對比包,與新版本的灰度包一起,分別對兩批同質(zhì)用戶發(fā)布,保證了灰度包和對比包的樣本屬性、時間因素一致;
- 依據(jù)產(chǎn)品目標(biāo)計算合理的樣本量,避免樣本過少導(dǎo)致結(jié)果不可信、過多導(dǎo)致資源浪費(fèi);
- 依托靜默安裝功能快速升級,縮短灰度驗證階段的時間。
2.3 灰度數(shù)據(jù)體系內(nèi)容
灰度數(shù)據(jù)體系通常涉及前期流量策略和后期數(shù)據(jù)檢驗2個部分。
前者包括樣本量計算和灰度時長控制,后者包括新老版本核心指標(biāo)對比、產(chǎn)品優(yōu)化處的指標(biāo)變化或新增功能的數(shù)據(jù)表現(xiàn)。在常規(guī)的灰度評估之外,引入根因分析的方法可以提升灰度結(jié)果的解釋性。
2.4 vivo游戲中心的做法
我們搭建了“游戲中心智能灰度數(shù)據(jù)體系”,并通過三版迭代逐步解決了本文開頭提到的3個問題。數(shù)據(jù)體系由指標(biāo)檢驗結(jié)果、維度下鉆解讀、用戶屬性校驗、指標(biāo)異常診斷等主題看板以及自動化推送的灰度結(jié)論報告組成。
完整方案部署上線后,基本實(shí)現(xiàn)了灰度評估階段的自動化數(shù)據(jù)生產(chǎn)、效果檢驗、數(shù)據(jù)解讀和決策建議的閉環(huán),極大地釋放了人力。
三、灰度數(shù)據(jù)體系中的方法論
在介紹數(shù)據(jù)方案設(shè)計前,先介紹一下灰度數(shù)據(jù)體系中涉及的背景知識和方法論,幫助大家更好地理解本文。
3.1 灰度實(shí)驗
灰度實(shí)驗包括抽樣和效果檢驗兩個部分,對應(yīng)的是假設(shè)檢驗的思想以及樣本歷史差異性驗證。
3.1.1 假設(shè)檢驗
假設(shè)檢驗是先對總體參數(shù)提出一個假設(shè)值,然后利用樣本表現(xiàn)判斷這一假設(shè)是否成立。
3.1.2 樣本歷史差異性驗證
雖然灰度前事先已通過hash算法進(jìn)行抽樣,但由于抽樣的隨機(jī)性,一般會在統(tǒng)計檢驗和效果檢驗的同時,對樣本的歷史差異性進(jìn)行驗證,剔除樣本本身差異帶來的指標(biāo)波動?;叶戎芷谕ǔ?天,我們采用了7天滑動窗口取樣的方法。
3.2 根因分析
灰度指標(biāo)往往與多維屬性(如用戶屬性、渠道來源、頁面模塊等)存在關(guān)聯(lián),當(dāng)指標(biāo)的檢驗結(jié)果發(fā)生異常的顯著差異時,想要解除異常,定位出其根因所在是關(guān)鍵一步。然而,這一步常常是充滿挑戰(zhàn)的,尤其當(dāng)根因是多個維度屬性值的組合時。
為了解決這一問題,我們引入了根因分析的方法,以彌補(bǔ)了灰度檢驗結(jié)果解釋性不足的問題。我們結(jié)合了指標(biāo)邏輯分析法和Adtributor算法2種方法,以確保分析結(jié)果的可靠性。
3.2.1 指標(biāo)邏輯分析法
由于灰度實(shí)驗中構(gòu)建的指標(biāo)體系基本都是率值類指標(biāo)或均值類指標(biāo),這兩類指標(biāo)都可以通過指標(biāo)公式拆解為分子和分母兩個因子,而指標(biāo)的分子和分母均是由各個維度下的維度值相加得到。因此提出了指標(biāo)邏輯分析法,基于一定的拆解方法,從指標(biāo)因子和指標(biāo)維度2個層次對指標(biāo)值進(jìn)行邏輯拆解。
3.2.2 Adtributor算法
除了根因分析比較常見的維度下鉆方法以外,我們引入了Adtributor算法,以更好地應(yīng)對多維度組合影響指標(biāo)的情況,并通過兩種方法的交叉驗證來確保分析結(jié)果的可靠性。
Adtributor算法是微軟研究院于2014年提出的一種多維時間序列異常根因分析方法,在多維度復(fù)雜根因的場景下具有良好的可靠性。算法完整過程包括數(shù)據(jù)預(yù)處理、異常檢測、根因分析和仿真可視化4個步驟,我們主要借鑒了根因分析環(huán)節(jié)的方法。
四、灰度智能解決方案
4.1 整體框架
版本灰度可以分為灰度前-灰度中-灰度后3個階段,產(chǎn)品化整體框架如下:
4.2 流程設(shè)計
基于以上框架,我們是如何設(shè)計實(shí)現(xiàn)的?
以下是描述整個過程的流程圖:
4.3 方案核心內(nèi)容
4.3.1 樣本量預(yù)估方案
看板提供:在多套置信水平跟檢驗效能標(biāo)準(zhǔn)下(默認(rèn)顯示95%置信度、80%檢驗效能),根據(jù)指標(biāo)最近表現(xiàn),預(yù)估出指標(biāo)在不同預(yù)期變化幅度下能被檢測出顯著與否的最低樣本量。
該方案具有3大特點(diǎn):
- 輸出多套標(biāo)準(zhǔn),靈活調(diào)整預(yù)期幅度;
- 自動選取最近一個全量版本的數(shù)據(jù)作為數(shù)據(jù)輸入;
- 均值類指標(biāo)和率值類指標(biāo)采用差異化的計算邏輯。
4.3.2 效果指標(biāo)顯著性檢驗方案
指標(biāo)顯著性檢驗?zāi)P托枰卮鸬膯栴}是:灰度版本相較對比版本,指標(biāo)變化在統(tǒng)計意義上是置信的還是不置信的。
目前,實(shí)現(xiàn)了三種置信水平下灰度版本與對比版本在20個業(yè)務(wù)指標(biāo)上的顯著性判斷。
實(shí)現(xiàn)過程如下:
率值類指標(biāo)
... ...
# 已得以下指標(biāo)數(shù)據(jù)
variation_visitors # 灰度版本指標(biāo)分母
control_visitors # 對比版本指標(biāo)分母
variation_p # 灰度版本指標(biāo)值
control_p # 對比版本指標(biāo)值
z # 不同置信水平(90%/95%/99%)下的z值,業(yè)務(wù)上主要關(guān)注95%置信水平下的顯著檢驗結(jié)果
# 計算指標(biāo)標(biāo)準(zhǔn)差
variation_se = math.sqrt(variation_p * (1 - variation_p))
control_se = math.sqrt(control_p * (1 - control_p))
# 計算指標(biāo)變化值和變化率
gap = variation_p - control_p
rate = variation_p / control_p - 1
# 計算置信區(qū)間
gap_interval_sdown = gap - z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區(qū)間下界
gap_interval_sup = gap + z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區(qū)間上界
confidence_interval_sdown = gap_interval_sdown / control_p # 變化率置信區(qū)間下界
confidence_interval_sup = gap_interval_sup / control_p # 變化值置信區(qū)間上界
# 顯著性判斷
if (confidence_interval_sdown > 0 and confidence_interval_sup > 0) or (confidence_interval_sdown < 0 and confidence_interval_sup < 0):
print("顯著")
elif (confidence_interval_sdown > 0 and confidence_interval_sup < 0) or (confidence_interval_sdown < 0 and confidence_interval_sup > 0):
print("不顯著")
... ...
均值類指標(biāo)
... ...
# 已得以下指標(biāo)數(shù)據(jù)
variation_visitors # 灰度版本指標(biāo)分母
control_visitors # 對比版本指標(biāo)分母
variation_p # 灰度版本指標(biāo)值
control_p # 對比版本指標(biāo)值
variation_x # 灰度版本單用戶指標(biāo)值
control_x # 對比版本單用戶指標(biāo)值
z # 不同置信水平(90%/95%/99%)下的z值,業(yè)務(wù)上主要關(guān)注95%置信水平下的顯著檢驗結(jié)果
# 計算指標(biāo)標(biāo)準(zhǔn)差
variation_se = np.std(variation_x, ddof = 1)
control_se = np.std(control_x, ddof = 1)
# 計算指標(biāo)變化值和變化率
gap = variation_p - control_p
rate = variation_p / control_p - 1
# 計算置信區(qū)間
gap_interval_sdown = gap - z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區(qū)間下界
gap_interval_sup = gap + z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區(qū)間上界
confidence_interval_sdown = gap_interval_sdown / control_p # 變化率置信區(qū)間下界
confidence_interval_sup = gap_interval_sup / control_p # 變化值置信區(qū)間上界
# 顯著性判斷
if (confidence_interval_sdown > 0 and confidence_interval_sup > 0) or (confidence_interval_sdown < 0 and confidence_interval_sup < 0):
print("顯著")
elif (confidence_interval_sdown > 0 and confidence_interval_sup < 0) or (confidence_interval_sdown < 0 and confidence_interval_sup > 0):
print("不顯著")
... ...
看板展示如下:
4.3.3 負(fù)向指標(biāo)自動根因分析方案
灰度場景的負(fù)向指標(biāo)自動化根因分析方案包括異動檢測、樣本歷史差異性驗證、指標(biāo)邏輯拆解和Adtributor自動根因分析4個步驟。
其中,Adtributor自動根因分析能計算出同一層級的維度中對指標(biāo)異動貢獻(xiàn)最大的那個因素,我們通過對指標(biāo)維度進(jìn)行分層和設(shè)置相互關(guān)系來適應(yīng)具體的指標(biāo)業(yè)務(wù)場景,構(gòu)建起多層級歸因算法邏輯模型,從而實(shí)現(xiàn)業(yè)務(wù)層面根因結(jié)論的自動化輸出。
看板展示如下:
4.3.4 灰度報告智能拼接推送方案
版本信息內(nèi)容的自動獲取:
通過打通發(fā)版平臺獲取版本號、實(shí)際在裝量、發(fā)版累計天數(shù)以及版本相關(guān)內(nèi)容,作為灰度報告的開頭。
結(jié)論呈現(xiàn):
根據(jù)指標(biāo)是否全正向/部分負(fù)向/全負(fù)向、是否樣本不均勻等各種統(tǒng)計結(jié)果自動組合對應(yīng)到預(yù)設(shè)的結(jié)論文案中,一共預(yù)設(shè)了10多種結(jié)論模版。
核心指標(biāo)顯著性檢驗解讀(根據(jù)灰度階段不同,解讀不同類型指標(biāo)):
T+1~T+2:性能類指標(biāo)、活躍率指標(biāo)
- T+3~T+6:活躍表現(xiàn)指標(biāo)、分發(fā)表現(xiàn)指標(biāo)、下載安裝過程轉(zhuǎn)化指標(biāo)
- T+7:活躍表現(xiàn)指標(biāo)、分發(fā)表現(xiàn)指標(biāo)、下載安裝過程轉(zhuǎn)化指標(biāo)、后項轉(zhuǎn)化類指標(biāo)
下鉆一級模塊維度歸因解讀:
如果灰度版本前期已明確輸入具體到某個一級模塊的改動點(diǎn),會自動進(jìn)行該模塊的解讀,以及輸出其他有指標(biāo)差異的模塊的數(shù)據(jù);如果灰度版本沒有輸入模塊層面的改動點(diǎn),就輸出指標(biāo)效果顯著(正向顯著、負(fù)向顯著)的一級模塊的解讀結(jié)論。
樣本量均勻性解讀:
業(yè)務(wù)類指標(biāo),通過顯著性檢驗判斷是否分布均勻;非業(yè)務(wù)類指標(biāo),通過分布差異來判斷。
負(fù)向診斷解讀:
根據(jù)多層級自動化根因模型輸出的結(jié)果,按照不同維度類型映射的修飾詞、維度數(shù)量定位(單維度/多維度)以及樣本歷史差異性驗證結(jié)論,對應(yīng)不同的模版,最終拼接出負(fù)向診斷文案。
五、寫在最后
對于業(yè)務(wù)灰度發(fā)版中科學(xué)評估和快速決策的要求,我們結(jié)合了多種方法,從“實(shí)驗思想-數(shù)學(xué)方法-數(shù)據(jù)模型-產(chǎn)品方案”四個層面提供了一套較為完整的智能灰度數(shù)據(jù)體系解決方案。
本文希望能為業(yè)務(wù)中的灰度數(shù)據(jù)體系建設(shè)提供參考,但仍應(yīng)結(jié)合各業(yè)務(wù)自身的特點(diǎn)進(jìn)行合理設(shè)計。方案中涉及的數(shù)據(jù)模型設(shè)計在這里不詳細(xì)介紹,感興趣的同學(xué)歡迎和筆者一起探討學(xué)習(xí)。
此外,灰度數(shù)據(jù)體系仍有待改進(jìn)之處,這里先拋出來,有一些也已經(jīng)在研究解決中:
- 在灰度流量分組的時候,通常采用隨機(jī)分組的方式。但是由于完全隨機(jī)的不確定性,分完組后,2組樣本在某些指標(biāo)特性上可能天然就分布不均。相較于后置的樣本均勻性驗證的方法,也可考慮分層抽樣的方式來避免這一問題;
- 在灰度指標(biāo)分析的流程中,自動多維根因分析模型還存在提升的空間,目前模型非常依賴于本身數(shù)據(jù)源中維度的全面性,且只能檢測出定量部分的原因。后續(xù)希望把定量的根因模型,結(jié)合定性因素進(jìn)行更全面更準(zhǔn)確的解讀;
- 游戲中心目前整個灰度的解決方案本質(zhì)上還是基于2 sample-test的檢驗?zāi)P?,但該模型需要根?jù)灰度版本相較于對比版本在核心指標(biāo)上的預(yù)期提升,來提前估算最小樣本量,實(shí)際灰度過程中可能會出現(xiàn)核心指標(biāo)未達(dá)如預(yù)期的情況。未來可嘗試mSPRT等檢驗方法,削弱最小樣本量對顯著性結(jié)果的限制。
參考文獻(xiàn):
- 茆詩松, 王靜龍, 濮曉龍. 《高等數(shù)理統(tǒng)計(第二版)》
- 是老李沒錯了. 《五分鐘掌握AB實(shí)驗和樣本量計算原理》. CSDN博客
- Ranjita Bhagwan, Rahul Kumar, Ramachandran Ramjee, et al. 《Adtributor: Revenue Debugging in Advertising Systems》