從0到1建設智慧灰度資料體系:以vivo遊戲中心為例
作者:
vivo 網際網路資料分析團隊-Dong Chenwei
vivo 網際網路大資料團隊-Qin Cancan、Zeng Kun
本文介紹了vivo遊戲中心在灰度資料分析體系上的實踐經驗,從“實驗思想-數學方法-資料模型-產品方案”四個層面提供了一套較為完整的智慧灰度資料解決方案,以保障版本評估的科學性、專案進度以及灰度驗證環節的快速閉環。該方案的亮點在於,指標異動根因分析方法的引入和全流程自動化產品方案的設計。
一、引言
遊戲業務的使用者規模體量大,業務鏈路長,資料邏輯繁雜。遊戲中心作為遊戲業務平臺端的核心使用者產品,版本迭代非常頻繁,每次版本上線前都必須進行小量級的灰度驗證。2021年以來,平均每1~2周都會有重要版本開始灰度,而且線上有時會同時有多個版本在灰度測試。
灰度的整個過程在資料層面主要涉及3個問題:
-
如何確保版本灰度評估的科學性?
-
如何提升灰度資料的產出效率,保障專案進度?
-
當灰度版本出現指標異常問題時,如何快速定位問題完成閉環?
近兩年來,我們逐步將灰度評估方法體系化地落地到敏捷BI等資料產品上,目前灰度資料體系已經較好地解決了這3個問題。本文首先以版本灰度資料體系的基本概念和發展歷程為鋪墊,接著以“ 方法論+解決方案 ”為主線闡述遊戲中心在灰度資料體系上的實踐,並展望未來。
二、灰度資料體系的發展
2.1 什麼是灰度發版
當遊戲中心開發了全新的首頁介面,應該如何驗證新的首頁是否被使用者所接受,並且功能是否完善、效能是否穩定?
答: 灰度發版 。就是在新版本推送給全量使用者使用之前,按照一定策略選取部分使用者,讓他們先行體驗新版首頁,以獲得他們關於“新的首頁好用或不好用”以及“如果不好用,是哪裡出了問題”的使用反饋。如果出現重大問題,則及時回滾舊版本;反之則根據反饋結果進行查漏補缺,並適時繼續放大新版本投放範圍直至全量升級。
2.2 灰度評估方案發展階段
判斷灰度發版是否科學的關鍵在於控制變數,這一問題的解決過程,也是灰度評估方案迭代和發展的過程。
階段一:確保了對比的時間相同,但升級速度差異意味著優先升級的使用者和未升級的使用者非同質使用者,未能規避樣本差異對資料結果差異的影響。
階段二:確保了對比的人群相同,但使用者行為可能隨時間而變化,無法剔除前後時間因素的差異。
階段三:同時確保了時間和人群相同,有以下三方面優勢:
-
將舊版本打包為對比包,與新版本的灰度包一起,分別對兩批同質使用者釋出,保證了灰度包和對比包的樣本屬性、時間因素一致;
-
依據產品目標計算合理的樣本量,避免樣本過少導致結果不可信、過多導致資源浪費;
-
依託靜默安裝功能快速升級,縮短灰度驗證階段的時間。
2.3 灰度資料體系內容
灰度資料體系通常涉及 前期流量策略 和 後期資料檢驗 2個部分。
前者包括樣本量計算和灰度時長控制,後者包括新老版本核心指標對比、產品優化處的指標變化或新增功能的資料表現。在常規的灰度評估之外,引入根因分析的方法可以提升灰度結果的解釋性。
2.4 vivo遊戲中心的做法
我們搭建了“ 遊戲中心智慧灰度資料體系 ”,並通過三版迭代逐步解決了本文開頭提到的3個問題。資料體系由指標檢驗結果、維度下鑽解讀、使用者屬性校驗、指標異常診斷等主題看板以及自動化推送的灰度結論報告組成。
完整方案部署上線後,基本實現了灰度評估階段的自動化資料生產、效果檢驗、資料解讀和決策建議的閉環,極大地釋放了人力。
三、灰度資料體系中的方法論
在介紹資料方案設計前,先介紹一下灰度資料體系中涉及的背景知識和方法論,幫助大家更好地理解本文。
3.1 灰度實驗
灰度實驗包括 抽樣 和 效果檢驗 兩個部分,對應的是假設檢驗的思想以及樣本歷史差異性驗證。
3.1.1 假設檢驗
假設檢驗是先對總體引數提出一個假設值,然後利用樣本表現判斷這一假設是否成立。
3.1.2 樣本歷史差異性驗證
雖然灰度前事先已通過hash演算法進行抽樣,但由於抽樣的隨機性,一般會在統計檢驗和效果檢驗的同時,對樣本的歷史差異性進行驗證,剔除樣本本身差異帶來的指標波動。灰度週期通常為7天,我們採用了7天滑動視窗取樣的方法。
3.2 根因分析
灰度指標往往與多維屬性(如使用者屬性、渠道來源、頁面模組等)存在關聯,當指標的檢驗結果發生異常的顯著差異時,想要解除異常,定位出其根因所在是關鍵一步。然而,這一步常常是充滿挑戰的,尤其當根因是多個維度屬性值的組合時。
為了解決這一問題,我們引入了根因分析的方法, 以彌補了灰度檢驗結果解釋性不足的問題 。我們結合了指標邏輯分析法和Adtributor演算法2種方法,以確保分析結果的可靠性。
3.2.1 指標邏輯分析法
由於灰度實驗中構建的指標體系基本都是率值類指標或均值類指標,這兩類指標都可以通過指標公式拆解為分子和分母兩個因子,而指標的分子和分母均是由各個維度下的維度值相加得到。因此提出了 指標邏輯分析法 ,基於一定的拆解方法,從指標因子和指標維度2個層次對指標值進行邏輯拆解。
3.2.2 Adtributor演算法
除了根因分析比較常見的維度下鑽方法以外,我們引入了Adtributor演算法,以更好地應對多維度組合影響指標的情況,並通過兩種方法的交叉驗證來確保分析結果的可靠性。
Adtributor演算法是微軟研究院於2014年提出的一種多維時間序列異常根因分析方法,在多維度複雜根因的場景下具有良好的可靠性。演算法完整過程包括資料預處理、異常檢測、根因分析和模擬視覺化4個步驟,我們主要借鑑了根因分析環節的方法。
四、灰度智慧解決方案
4.1 整體框架
版本灰度可以分為灰度前-灰度中-灰度後3個階段,產品化整體框架如下:
4.2 流程設計
基於以上框架,我們是如何設計實現的?
以下是描述整個過程的流程圖:
4.3 方案核心內容
4.3.1 樣本量預估方案
看板提供:在多套置信水平跟檢驗效能標準下(預設顯示95%置信度、80%檢驗效能),根據指標最近表現,預估出指標在不同預期變化幅度下能被檢測出顯著與否的最低樣本量。
該方案具有3大特點:
-
輸出多套標準,靈活調整預期幅度;
-
自動選取最近一個全量版本的資料作為資料輸入;
-
均值類指標和率值類指標採用差異化的計算邏輯。
4.3.2 效果指標顯著性檢驗方案
指標顯著性檢驗模型需要回答的問題是:灰度版本相較對比版本,指標變化在統計意義上是置信的還是不置信的。
目前,實現了三種置信水平下灰度版本與對比版本在20個業務指標上的顯著性判斷。
實現過程如下:
率值類指標
... ...
# 已得以下指標資料
variation_visitors # 灰度版本指標分母
control_visitors # 對比版本指標分母
variation_p # 灰度版本指標值
control_p # 對比版本指標值
z # 不同置信水平(90%/95%/99%)下的z值,業務上主要關注95%置信水平下的顯著檢驗結果
# 計算指標標準差
variation_se = math.sqrt(variation_p * (1 - variation_p))
control_se = math.sqrt(control_p * (1 - control_p))
# 計算指標變化值和變化率
gap = variation_p - control_p
rate = variation_p / control_p - 1
# 計算置信區間
gap_interval_sdown = gap - z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區間下界
gap_interval_sup = gap + z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區間上界
confidence_interval_sdown = gap_interval_sdown / control_p # 變化率置信區間下界
confidence_interval_sup = gap_interval_sup / control_p # 變化值置信區間上界
# 顯著性判斷
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("不顯著")
... ...
均值類指標
... ...
# 已得以下指標資料
variation_visitors # 灰度版本指標分母
control_visitors # 對比版本指標分母
variation_p # 灰度版本指標值
control_p # 對比版本指標值
variation_x # 灰度版本單使用者指標值
control_x # 對比版本單使用者指標值
z # 不同置信水平(90%/95%/99%)下的z值,業務上主要關注95%置信水平下的顯著檢驗結果
# 計算指標標準差
variation_se = np.std(variation_x, ddof = 1)
control_se = np.std(control_x, ddof = 1)
# 計算指標變化值和變化率
gap = variation_p - control_p
rate = variation_p / control_p - 1
# 計算置信區間
gap_interval_sdown = gap - z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區間下界
gap_interval_sup = gap + z * math.sqrt(math.pow(control_se, 2) / control_visitors + math.pow(variation_se, 2) / variation_visitors) # 變化值置信區間上界
confidence_interval_sdown = gap_interval_sdown / control_p # 變化率置信區間下界
confidence_interval_sup = gap_interval_sup / control_p # 變化值置信區間上界
# 顯著性判斷
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 負向指標自動根因分析方案
灰度場景的負向指標自動化根因分析方案包括異動檢測、樣本歷史差異性驗證、指標邏輯拆解和Adtributor自動根因分析4個步驟。
其中,Adtributor自動根因分析能計算出同一層級的維度中對指標異動貢獻最大的那個因素,我們通過對指標維度進行分層和設定相互關係來適應具體的指標業務場景,構建起多層級歸因演算法邏輯模型,從而實現業務層面根因結論的自動化輸出。
看板展示如下:
4.3.4 灰度報告智慧拼接推送方案
版本資訊內容的自動獲取:
通過打通發版平臺獲取版本號、實際在裝量、發版累計天數以及版本相關內容,作為灰度報告的開頭。
結論呈現:
根據指標是否全正向/部分負向/全負向、是否樣本不均勻等各種統計結果自動組合對應到預設的結論文案中,一共預設了10多種結論模版。
核心指標顯著性檢驗解讀(根據灰度階段不同,解讀不同型別指標):
-
T+1~T+2:效能類指標、活躍率指標
-
T+3~T+6:活躍表現指標、分發表現指標、下載安裝過程轉化指標
-
T+7:活躍表現指標、分發表現指標、下載安裝過程轉化指標、後項轉化類指標
下鑽一級模組維度歸因解讀:
如果灰度版本前期已明確輸入具體到某個一級模組的改動點,會自動進行該模組的解讀,以及輸出其他有指標差異的模組的資料;如果灰度版本沒有輸入模組層面的改動點,就輸出指標效果顯著(正向顯著、負向顯著)的一級模組的解讀結論。
樣本量均勻性解讀:
業務類指標,通過顯著性檢驗判斷是否分佈均勻;非業務類指標,通過分佈差異來判斷。
負向診斷解讀:
根據多層級自動化根因模型輸出的結果,按照不同維度型別對映的修飾詞、維度數量定位(單維度/多維度)以及樣本歷史差異性驗證結論,對應不同的模版,最終拼接出負向診斷文案。
五、寫在最後
對於業務灰度發版中科學評估和快速決策的要求,我們結合了多種方法,從“實驗思想-數學方法-資料模型-產品方案”四個層面提供了一套較為完整的智慧灰度資料體系解決方案。
本文希望能為業務中的灰度資料體系建設提供參考,但仍應結合各業務自身的特點進行合理設計。方案中涉及的資料模型設計在這裡不詳細介紹,感興趣的同學歡迎和筆者一起探討學習。
此外,灰度資料體系仍有待改進之處,這裡先丟擲來,有一些也已經在研究解決中:
-
在灰度流量分組的時候,通常採用隨機分組的方式。但是由於完全隨機的不確定性,分完組後,2組樣本在某些指標特性上可能天然就分佈不均。相較於後置的樣本均勻性驗證的方法,也可考慮分層抽樣的方式來避免這一問題;
-
在灰度指標分析的流程中,自動多維根因分析模型還存在提升的空間,目前模型非常依賴於本身資料來源中維度的全面性,且只能檢測出定量部分的原因。後續希望把定量的根因模型,結合定性因素進行更全面更準確的解讀;
-
遊戲中心目前整個灰度的解決方案本質上還是基於2 sample-test的檢驗模型,但該模型需要根據灰度版本相較於對比版本在核心指標上的預期提升,來提前估算最小樣本量,實際灰度過程中可能會出現核心指標未達如預期的情況。未來可嘗試mSPRT等檢驗方法,削弱最小樣本量對顯著性結果的限制。
參考文獻:
-
茆詩松, 王靜龍, 濮曉龍. 《高等數理統計(第二版)》
-
是老李沒錯了. 《五分鐘掌握AB實驗和樣本量計算原理》. CSDN部落格
-
Ranjita Bhagwan, Rahul Kumar, Ramachandran Ramjee, et al. 《Adtributor: Revenue Debugging in Advertising Systems》
- HttpClient 在vivo內銷瀏覽器的高併發實踐優化
- electron 應用開發優秀實踐
- Kotlin協程解析系列(上):協程排程與掛起
- Redis 定長佇列的探索和實踐
- 從RabbitMQ平滑遷移到RocketMQ技術實戰
- 基於微前端qiankun的多頁籤快取方案實踐
- 推薦系統-協同過濾在Spark中的實現
- 伺服器記憶體故障預測居然可以這樣做!
- 工作流引擎在vivo營銷自動化中的應用實踐 | 引擎篇03
- vivo官網APP全機型UI適配方案
- RocketMQ之消費者啟動與消費流程
- vivo官網APP全機型UI適配方案
- 工作流引擎在vivo營銷自動化中的應用實踐 | 引擎篇03
- RocketMQ之消費者啟動與消費流程
- CSS Houdini:用瀏覽器引擎實現高階CSS效果
- 初探 Redis 客戶端 Lettuce:真香!
- Lepton 無失真壓縮原理及效能分析
- 從0到1建設智慧灰度資料體系:以vivo遊戲中心為例
- Lepton 無失真壓縮原理及效能分析
- 從0到1建設智慧灰度資料體系:以vivo遊戲中心為例