作者:

vivo 互联网数据分析团队-Dong Chenwei

vivo 互联网大数据团队-Qin Cancan、Zeng Kun

本文介绍了vivo游戏中心在灰度数据分析体系上的实践经验,从“实验思想-数学方法-数据模型-产品方案”四个层面提供了一套较为完整的智能灰度数据解决方案,以保障版本评估的科学性、项目进度以及灰度验证环节的快速闭环。该方案的亮点在于,指标异动根因分析方法的引入和全流程自动化产品方案的设计。

一、引言

游戏业务的用户规模体量大,业务链路长,数据逻辑繁杂。游戏中心作为游戏业务平台端的核心用户产品,版本迭代非常频繁,每次版本上线前都必须进行小量级的灰度验证。2021年以来,平均每1~2周都会有重要版本开始灰度,而且线上有时会同时有多个版本在灰度测试。

灰度的整个过程在数据层面主要涉及3个问题:

  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大特点:

  1. 输出多套标准,灵活调整预期幅度;
  2. 自动选取最近一个全量版本的数据作为数据输入;
  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_prate = 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_prate = 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:活跃表现指标、分发表现指标、下载安装过程转化指标、后项转化类指标

下钻一级模块维度归因解读:

如果灰度版本前期已明确输入具体到某个一级模块的改动点,会自动进行该模块的解读,以及输出其他有指标差异的模块的数据;如果灰度版本没有输入模块层面的改动点,就输出指标效果显著(正向显著、负向显著)的一级模块的解读结论。

样本量均匀性解读:

业务类指标,通过显著性检验判断是否分布均匀;非业务类指标,通过分布差异来判断。

负向诊断解读:

根据多层级自动化根因模型输出的结果,按照不同维度类型映射的修饰词、维度数量定位(单维度/多维度)以及样本历史差异性验证结论,对应不同的模版,最终拼接出负向诊断文案。

五、写在最后

对于业务灰度发版中科学评估和快速决策的要求,我们结合了多种方法,从“实验思想-数学方法-数据模型-产品方案”四个层面提供了一套较为完整的智能灰度数据体系解决方案。

本文希望能为业务中的灰度数据体系建设提供参考,但仍应结合各业务自身的特点进行合理设计。方案中涉及的数据模型设计在这里不详细介绍,感兴趣的同学欢迎和笔者一起探讨学习。

此外,灰度数据体系仍有待改进之处,这里先抛出来,有一些也已经在研究解决中:

  1. 在灰度流量分组的时候,通常采用随机分组的方式。但是由于完全随机的不确定性,分完组后,2组样本在某些指标特性上可能天然就分布不均。相较于后置的样本均匀性验证的方法,也可考虑分层抽样的方式来避免这一问题;
  2. 在灰度指标分析的流程中,自动多维根因分析模型还存在提升的空间,目前模型非常依赖于本身数据源中维度的全面性,且只能检测出定量部分的原因。后续希望把定量的根因模型,结合定性因素进行更全面更准确的解读;
  3. 游戏中心目前整个灰度的解决方案本质上还是基于2 sample-test的检验模型,但该模型需要根据灰度版本相较于对比版本在核心指标上的预期提升,来提前估算最小样本量,实际灰度过程中可能会出现核心指标未达如预期的情况。未来可尝试mSPRT等检验方法,削弱最小样本量对显著性结果的限制。

参考文献:

  1. 茆诗松, 王静龙, 濮晓龙. 《高等数理统计(第二版)》
  2. 是老李没错了. 《五分钟掌握AB实验和样本量计算原理》. CSDN博客
  3. Ranjita Bhagwan, Rahul Kumar, Ramachandran Ramjee, et al. 《Adtributor: Revenue Debugging in Advertising Systems》

从0到1建设智能灰度数据体系:以vivo游戏中心为例相关推荐

  1. 腾讯QQ大数据:BI方法论-数据体系建设之路

    当一个企业要建立数据体系,它需要什么样的流程?当一个新的产品上线,它需要怎样建设业务的数据体系?这两个问题是否一些方法论去遵循?笔者原以为能在网上搜一篇关于数据体系建设的文章,居然未能如愿,甚为遗憾. ...

  2. 数据中台 第7章 数据体系建设:数仓分层设计、数据建模

    数据中台数据体系是在全域原始数据的基础上,进行标准定义及分层建模,数据体系建设最终呈现的结果是一套完整.规范.准确的数据体系,可以方便支撑数据应用. 中台数据体系应具备以下特征: ·覆盖全域数据:数据 ...

  3. 【工业4.0系列谈之五】建设智能工厂 可从这6个方面着手

    一.简单回顾 通过前几讲的讲解,我们对工业4.0的认识趋于清晰. 第一讲告诉我们,德国实施工业4.0战略的根本目的是"确保德国制造业的未来",联想到中国制造2025的"实 ...

  4. 每日新闻:Win10违背用户选择向微软发送数据;百度将在山西建设智能车联网示范基地;18年第三季度企业存储系统收入增长19.4%...

    关注中国软件网 最新鲜的企业级干货聚集地 趋势洞察 钟志祥博士:企业数字化转型发展战略分析 钟博士表示:从数字化转型的全球发展来看,数字化转型分为单点实验.局部推广.优化创新等阶段,中国的数字化转型正 ...

  5. 工程建设智能综合管控平台、建筑工地、智慧工地、工程建筑、数据分析中心、地图总览、项目筹划、进度管理、安全管理、质量管理、风险管理、经济管理、人事管理、分包管理、设备管理、材料管理、报表审阅、视频监控

    工程建设智能综合管控平台.建筑工地.智慧工地.工程建筑.数据分析中心.地图总览.项目筹划.进度管理.安全管理.质量管理.风险管理.经济管理.人事管理.分包管理.设备管理.材料管理.报表审阅.视频监控 ...

  6. 数据智能时代:数据体系建设的实质、思路和方式

    二十一世纪,互联网新科技层出不穷.伴随着大数据.云技术以及整个算力的发展,人工智能技术的研究及应用也迅速壮大,在语音.图像和自然语言方面取得了卓越的成绩.更为重要的是,政府也在大力发展数字经济,包括党 ...

  7. 智慧城市新探索:摩拜京东联合利用智能单车数据检测违章停车

    来源:机器之心 本文共2045字,建议阅读5分钟. 本文为你分享智能单车数据检测违章停车,为城市的数据利用发起了一个新的方向. [ 导读 ]智慧城市是近年来非常热门的话题,基于 AI 技术的城市计算的 ...

  8. 广州市城市智能交通大数据体系研究与实践

    广州市城市智能交通大数据体系研究与实践 张孜1, 黄钦炎2, 冯川2 1 广州市交通运输局,广东 广州 510620 2 广州交通信息化建设投资营运有限公司,广东 广州 510620 摘要:为了构建现 ...

  9. 【智能制造】工信部:《国家智能制造标准体系建设指南(2018年版)》(征求意见稿)

    据工信部1月15日消息,为加快推进智能制造综合标准化工作,加强顶层设计,构建智能制造综合标准体系,发挥智能制造标准的规范和引领作用,工业和信息化部.国家标准化管理委员会组织开展智能制造综合标准化体系建 ...

最新文章

  1. 改变myeclipse北京颜色
  2. 详解@Builder用法
  3. Matlab的不同进制转换
  4. Spring vs Seam
  5. web框架和后台开发_Web开发框架–第1部分:选项和标准
  6. 给未来的自己一封信计算机,给未来的自己的一封信范文(精选5篇)
  7. 微信公众号开发 ssl connect error
  8. 深入理解java虚拟机 - jvm高级特性与最佳实践(第三版)_JVM虚拟机面试指南:年薪30W以上高薪岗位需求的JVM,你必须要懂!...
  9. git版本库--常用命令
  10. 读书笔记——Accelerated C++ Chapter 12 使类对象获得数值功能
  11. MySQL Hex函数使用详解
  12. 【CodeForces】700 D. Huffman Coding on Segment 哈夫曼树+莫队+分块
  13. Linux 命令汇总!【珍藏版】
  14. 腾讯云服务器ftp部署及文件上传
  15. 用java代码模拟鼠标双击事件
  16. java csv 换行_javacsv如何换行输入
  17. Unity URP/SRP可编程渲染管线
  18. 2.ISIS协议原理
  19. 头文件注释轻松搞—VS2013
  20. 将长表格图片转Excel表格

热门文章

  1. 最短时间搞定算法:字节跳动Android岗算法题考前突击宝典
  2. 聚来宝:APP带你玩转移动4G购物时代
  3. 【css】css优先级之 !important
  4. 国密算法 + MySQL
  5. ksh和bash区别、linux更改用户的默认登陆shell
  6. 企业联合体的形式_企业联合体
  7. mysql 乐观锁 时间戳_MySQL乐观锁
  8. 毕设模拟之母婴商城(实训总结报告)
  9. python中封装是什么意思_python封装是什么
  10. python封装方法有几种_python之封装