作者:
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》