作者:
vivo 網際網路資料分析團隊-Dong Chenwei vivo
網際網路巨量資料團隊-Qin Cancan、Zeng Kun
本文介紹了vivo遊戲中心在灰度資料分析體系上的實踐經驗,從「實驗思想-數學方法-資料模型-產品方案」四個層面提供了一套較為完整的智慧灰度資料解決方案,以保障版本評估的科學性、專案進度以及灰度驗證環節的快速閉環。該方案的亮點在於,指標異動根因分析方法的引入和全流程自動化產品方案的設計。
遊戲業務的使用者規模體量大,業務鏈路長,資料邏輯繁雜。遊戲中心作為遊戲業務平臺端的核心使用者產品,版本迭代非常頻繁,每次版本上線前都必須進行小量級的灰度驗證。2021年以來,平均每1~2周都會有重要版本開始灰度,而且線上有時會同時有多個版本在灰度測試。
灰度的整個過程在資料層面主要涉及3個問題:
近兩年來,我們逐步將灰度評估方法體系化地落地到敏捷BI等資料產品上,目前灰度資料體系已經較好地解決了這3個問題。本文首先以版本灰度資料體系的基本概念和發展歷程為鋪墊,接著以「方法論+解決方案」為主線闡述遊戲中心在灰度資料體系上的實踐,並展望未來。
當遊戲中心開發了全新的首頁介面,應該如何驗證新的首頁是否被使用者所接受,並且功能是否完善、效能是否穩定?
答:灰度發版。就是在新版本推播給全量使用者使用之前,按照一定策略選取部分使用者,讓他們先行體驗新版首頁,以獲得他們關於「新的首頁好用或不好用」以及「如果不好用,是哪裡出了問題」的使用反饋。如果出現重大問題,則及時回滾舊版本;反之則根據反饋結果進行查漏補缺,並適時繼續放大新版本投放範圍直至全量升級。
判斷灰度發版是否科學的關鍵在於控制變數,這一問題的解決過程,也是灰度評估方案迭代和發展的過程。
階段一:確保了對比的時間相同,但升級速度差異意味著優先升級的使用者和未升級的使用者非同質使用者,未能規避樣本差異對資料結果差異的影響。
階段二:確保了對比的人群相同,但使用者行為可能隨時間而變化,無法剔除前後時間因素的差異。
階段三:同時確保了時間和人群相同,有以下三方面優勢:
灰度資料體系通常涉及前期流量策略和後期資料檢驗2個部分。
前者包括樣本量計算和灰度時長控制,後者包括新老版本核心指標對比、產品優化處的指標變化或新增功能的資料表現。在常規的灰度評估之外,引入根因分析的方法可以提升灰度結果的解釋性。
我們搭建了「遊戲中心智慧灰度資料體系」,並通過三版迭代逐步解決了本文開頭提到的3個問題。資料體系由指標檢驗結果、維度下鑽解讀、使用者屬性校驗、指標異常診斷等主題看板以及自動化推播的灰度結論報告組成。
完整方案部署上線後,基本實現了灰度評估階段的自動化資料生產、效果檢驗、資料解讀和決策建議的閉環,極大地釋放了人力。
在介紹資料方案設計前,先介紹一下灰度資料體系中涉及的背景知識和方法論,幫助大家更好地理解本文。
灰度實驗包括抽樣和效果檢驗兩個部分,對應的是假設檢驗的思想以及樣本歷史差異性驗證。
假設檢驗是先對總體引數提出一個假設值,然後利用樣本表現判斷這一假設是否成立。
雖然灰度前事先已通過hash演演算法進行抽樣,但由於抽樣的隨機性,一般會在統計檢驗和效果檢驗的同時,對樣本的歷史差異性進行驗證,剔除樣本本身差異帶來的指標波動。灰度週期通常為7天,我們採用了7天滑動視窗取樣的方法。
灰度指標往往與多維屬性(如使用者屬性、渠道來源、頁面模組等)存在關聯,當指標的檢驗結果發生異常的顯著差異時,想要解除異常,定位出其根因所在是關鍵一步。然而,這一步常常是充滿挑戰的,尤其當根因是多個維度屬性值的組合時。
為了解決這一問題,我們引入了根因分析的方法,以彌補了灰度檢驗結果解釋性不足的問題。我們結合了指標邏輯分析法和Adtributor演演算法2種方法,以確保分析結果的可靠性。
由於灰度實驗中構建的指標體系基本都是率值類指標或均值類指標,這兩類指標都可以通過指標公式拆解為分子和分母兩個因子,而指標的分子和分母均是由各個維度下的維度值相加得到。因此提出了指標邏輯分析法,基於一定的拆解方法,從指標因子和指標維度2個層次對指標值進行邏輯拆解。
除了根因分析比較常見的維度下鑽方法以外,我們引入了Adtributor演演算法,以更好地應對多維度組合影響指標的情況,並通過兩種方法的交叉驗證來確保分析結果的可靠性。
Adtributor演演算法是微軟研究院於2014年提出的一種多維時間序列異常根因分析方法,在多維度複雜根因的場景下具有良好的可靠性。演演算法完整過程包括資料預處理、異常檢測、根因分析和模擬視覺化4個步驟,我們主要借鑑了根因分析環節的方法。
版本灰度可以分為灰度前-灰度中-灰度後3個階段,產品化整體框架如下:
基於以上框架,我們是如何設計實現的?
以下是描述整個過程的流程圖:
看板提供:在多套置信水平跟檢驗效能標準下(預設顯示95%置信度、80%檢驗效能),根據指標最近表現,預估出指標在不同預期變化幅度下能被檢測出顯著與否的最低樣本量。
該方案具有3大特點:
指標顯著性檢驗模型需要回答的問題是:灰度版本相較對比版本,指標變化在統計意義上是置信的還是不置信的。
目前,實現了三種置信水平下灰度版本與對比版本在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("不顯著")
... ...
看板展示如下:
灰度場景的負向指標自動化根因分析方案包括異動檢測、樣本歷史差異性驗證、指標邏輯拆解和Adtributor自動根因分析4個步驟。
其中,Adtributor自動根因分析能計算出同一層級的維度中對指標異動貢獻最大的那個因素,我們通過對指標維度進行分層和設定相互關係來適應具體的指標業務場景,構建起多層級歸因演演算法邏輯模型,從而實現業務層面根因結論的自動化輸出。
看板展示如下:
版本資訊內容的自動獲取:
通過打通發版平臺獲取版本號、實際在裝量、發版累計天數以及版本相關內容,作為灰度報告的開頭。
結論呈現:
根據指標是否全正向/部分負向/全負向、是否樣本不均勻等各種統計結果自動組合對應到預設的結論文案中,一共預設了10多種結論模版。
核心指標顯著性檢驗解讀(根據灰度階段不同,解讀不同型別指標):
- T+1~T+2:效能類指標、活躍率指標
- T+3~T+6:活躍表現指標、分發表現指標、下載安裝過程轉化指標
- T+7:活躍表現指標、分發表現指標、下載安裝過程轉化指標、後項轉化類指標
下鑽一級模組維度歸因解讀:
如果灰度版本前期已明確輸入具體到某個一級模組的改動點,會自動進行該模組的解讀,以及輸出其他有指標差異的模組的資料;如果灰度版本沒有輸入模組層面的改動點,就輸出指標效果顯著(正向顯著、負向顯著)的一級模組的解讀結論。
樣本量均勻性解讀:
業務類指標,通過顯著性檢驗判斷是否分佈均勻;非業務類指標,通過分佈差異來判斷。
負向診斷解讀:
根據多層級自動化根因模型輸出的結果,按照不同維度型別對映的修飾詞、維度數量定位(單維度/多維度)以及樣本歷史差異性驗證結論,對應不同的模版,最終拼接出負向診斷文案。
對於業務灰度發版中科學評估和快速決策的要求,我們結合了多種方法,從「實驗思想-數學方法-資料模型-產品方案」四個層面提供了一套較為完整的智慧灰度資料體系解決方案。
本文希望能為業務中的灰度資料體系建設提供參考,但仍應結合各業務自身的特點進行合理設計。方案中涉及的資料模型設計在這裡不詳細介紹,感興趣的同學歡迎和筆者一起探討學習。
此外,灰度資料體系仍有待改進之處,這裡先丟擲來,有一些也已經在研究解決中:
- 在灰度流量分組的時候,通常採用隨機分組的方式。但是由於完全隨機的不確定性,分完組後,2組樣本在某些指標特性上可能天然就分佈不均。相較於後置的樣本均勻性驗證的方法,也可考慮分層抽樣的方式來避免這一問題;
- 在灰度指標分析的流程中,自動多維根因分析模型還存在提升的空間,目前模型非常依賴於本身資料來源中維度的全面性,且只能檢測出定量部分的原因。後續希望把定量的根因模型,結合定性因素進行更全面更準確的解讀;
- 遊戲中心目前整個灰度的解決方案本質上還是基於2 sample-test的檢驗模型,但該模型需要根據灰度版本相較於對比版本在核心指標上的預期提升,來提前估算最小樣本量,實際灰度過程中可能會出現核心指標未達如預期的情況。未來可嘗試mSPRT等檢驗方法,削弱最小樣本量對顯著性結果的限制。
參考文獻: