在游戏里,我们可以借助实验完成哪些方面的科学决策?每款游戏,乃至每款 C 端产品,用户生命周期都可以简化为潜在用户、新手用户、有效活跃、活跃下降、即将流失、流失 6 个阶段,每一个生命周期阶段会有不同的研发、运营侧重点:① 潜在用户阶段,运营重点是高效拉新。决策点包括:拉新广告的投放渠道选择、广告触达用户选择、广告素材选择、广告出价策略制定、APP icon 设计等。② 新手阶段侧重对安装、注册、体验等转化漏斗的优化、对新手系统的优化等。③ 活跃阶段侧重对游戏内的玩法设计,如战斗、成就、社交、奖励及商业化系统等的优化。④ 流失阶段侧重对回流广告投放及玩家回流后的任务、奖励系统的优化。可以看到,游戏里的决策点很庞杂,其中不乏许多决策点非常细节且微观。如果都依靠专家经验或传统数据分析,将会面临科学性和效率的瓶颈。因此依靠实验来驱动高效的游戏增长决策,是一个必然的发展过程。本文将分别就广告投放和用户运营两个场景的具体案例展开分享。
这张趋势图是一个市场上典型的 ARPG 游戏上线 8 周的情况。游戏上线 8 周后,累计流失玩家已经占总注册玩家的 78%。而随着游戏上线时间推移,潜在用户不断进入,拉新成本越来越高。盘活已经流失的玩家,必定会成为游戏运营重点。海外广告投放面临着高昂的渠道触达成本,因此需要在触达用户的选择、出价策略上做得非常精准。首个挑战是如何在全量的流失玩家里,找到真正值得投放广告的用户?
典型的思路是训练响应模型,给回流概率高的流失玩家投广告,这是很多团队长期采用的思路。但通过 A/B test 会发现,该策略筛选出的精准包的用户投广告和不投广告的回流概率都很高,他们本就会自然回流,与看不看广告关系不大。我们观测不同预测概率区间的玩家在投广告与不投广告的情况下的真实回流曲线,会发现:预测回流概率最高的玩家对广告不敏感,而预测回流概率的中高段(0.5 -0.9) 的玩家,投广告可以带来一定的正向收益。因此,直接得出一个优化:给预测回概率中高段的玩家投广告。从效果看,这个优化确实让干预效果变得显著了,但它的科学性不够,因为所谓“中高概率回流的玩家对投广告略有敏感”这一假设并没有逻辑上的必然性。
我们真正想知道的是广告对每一个用户的回流概率到底能提升多少。因此不如调整问题的定义:直接预测投放广告对于用户的回流概率的增益,即在四象限里找到投放广告会回流,但不投放广告不会回流的 persuadable 用户。这是因果推荐领域中典型的 uplift model 的问题。uplift model 主要有 4 个流派:① 基于传统机器学习的源分类器的组装形成的 Meta-learner② 以树模型调整分裂方式作为基础的 Tree Based Model④ 对 Label 做数值变化进行拟合的 Transform Model我们基于uplift model预测出了三种用户:① sleeping dog,游戏里面占比 4%,对这些玩家投放广告后反而产生副作用。分析他们的特征发现,他们在游戏里面比普通用户花的时间更长,但进展不足。也就是说,这批用户在新手阶段非常努力地尝试过,但是受挫比较厉害,给这群用户投放广告,出现负面效果的可能性很大。② sure thing 和 lost cost ,占比 69%,给这些玩家投不投放广告没有差异。③ 我们真正需要的 persuadable 用户占比 27%。三类用户的分布也比较符合直观感受,这个方案比基于自然回流概率预测的方案,人均增益从 1.4% 提升到 2%。
前文分享了通过 uplift model 寻找广告投放用户的必要性。但是,建立 uplift model 有一个前提:训练样本需要包括用户在曝光广告和不曝光广告的情况下的回流 Label。于是要通过随机对照实验的方式,把流失用户切分成无偏的对照组跟干预组。但在海外场景的另外一个挑战:海外广告媒体有非常严格的隐私政策,对广告主来说,哪些用户被曝光了广告是个黑盒。如果广告曝光有偏,uplift model 预测出的广告对用户的增益就不准确了。我们首先要在广告媒体的黑盒隐私政策下,验证广告曝光是否有偏。我研究了 Google、 Facebook 的隐私政策。以 Google 为例,一是绝对不会告诉广告主单个用户有没有被曝光,二是不会告诉广告主曝光人数低于 50 人的群体的曝光率。基于这这两条隐私政策,我把用户按游戏里的特征进行聚类,同时使得每一类的曝光人数在 50 人以上,以 cohort 为粒度向广告媒体请求每个 cohort 的曝光率。如果不同类之间曝光率的差异很大,则可证明曝光事件有偏(反之不成立)。
① 图 1:预期被全量曝光广告的干预组的样本中只有 13% 的用户实际被曝光了广告。② 图 2:广告曝光跟用户特征之间不独立。部分 cohort 的曝光率可高达 30%,另一些 cohort 曝光率只有 9%,所以曝光事件有偏。③ 图 3:广告曝光率跟自然回流概率基本呈正比。即广告媒体倾向于给原本就会回流的用户投广告,这对于广告主来说是个很坏的现象。影响:曝光有偏会让 uplift model 向曝光率高的群体倾斜,而曝光率又与自然回流率成正比。因此我们的 uplift model 本质上还是没有逃离自然回流模型的藩篱。
于是我引入了样本的曝光概率对样本调权,使曝光事件与玩家特征独立。去偏之后,干预增益从 0.74 提升到了 1.5。到这里就完成了 audience targeting 部分的模型优化,本质上识别出了更多的广告曝光率低、但对广告敏感的用户。这些广告曝光率低、但对广告敏感的用户在目前的竞价策略下,竞价能力差。如果不优化竞价策略,他们依然看不到广告。
广告是依据每一次广告曝光预期给广告媒体侧带来的收入(即 eCPM)做竞价排序的。eCPM 的公式由两部分相乘:广告主设置的愿意为单次转化支付的 target CPA、媒体侧预测的用户看到广告后的转化概率。其中 target CPA 由投放人员的业务经验决定,例如某个时期的 ARPG 游戏在日韩地区的 target CPA 固定为 4 美元。这就造成我们前文讲到的广告媒体倾向于给原本回流概率高(转化率高)的人投广告。为了解决这个问题,我们从 eCPM 等式的右边入手,把其改写成广告能带来多少个增量用户(看广告之后回流的人数 - 原本就会自然回流的人数),再把增量用户再乘以我愿意为每个增量用户支付的单价。这两个式子联立,就是优化后的出价。直观理解出价优化就是,为对广告敏感但自然回流率低的用户提高 target CPA;为对广告不敏感但自然回流率高的用户降低 target CPA。游戏用户运营最常见的落地方案就是给用户推送运营活动。决策点包括:给哪些用户推、推哪些任务、发什么礼包、活动页面如何设计。
这张流程图是一个典型的实验设计:先把所有用户做随机分流,每一股流量采用不一样的待决策变量,最后评估每一个策略相对于对照组是否有显著增益。
虽然原理听起来非常简单,但事实上实验的坑非常深。在上述流程里,每个环节稍有差池都可能导致实验的结论错误。下面展开介绍 4 个比较常踩的坑:③ 游戏里面很多场景不能做实验,应该如何科学决策?④ 如果运营活动可以分享,实验组的用户把活动或分享给对照组,造成组间的污染怎么办?
很多同学会有疑问:账号分流有什么难的吗?每个用户都有一个账号尾号,根据尾号分流不就好了?但细想就会发现,按尾号分流会造成多个实验之间相互污染的问题。例如图中展示的两次实验,效果产生了重叠。整体看,实验组与对照组没有差异,得到结论实验 1 与实验 2 均没有效果。但真相是,实验 1 产生了负向效果,实验 2 产生了正向效果。进一步,是否可以用 random 函数生成随机数,作为账号分流的依据?这种方式相比按尾号分流会好很多,但依然不建议。为了回溯分析,需要存储随机数与用户 ID 的映射关系,存储和管理成本都很高,一旦存储错误或丢失,整个实验都白做了。
因此建议采用哈希加种子的方式做分流,它既能满足不同实验之间的正交(只需要给不同实验传递不同的种子),也非常容易管理(不需要存储用户粒度的分流结果表,只需要存储每次实验的种子)。
第二个问题,实验做完之后指标不显著怎么办?指标不显著存在两个可能性:一是策略本身确实没有提升;但还存在一种可能性,即策略本身是有提升的,但实验的灵敏度太低了,检测不到提升。上图中的公式是样本量、方差、一类错误、power、指标敏感度之间的关系。根据这个公式,在不改变一二类错误率的情况下,有两个方式可以提升灵敏度:一是增加样本量,二是缩小指标方差。缩小方差的方法也有很多,比如微软提的引入协变量进行方差缩减的 CUPED 方法、更换指标(从偏度很大的数值类指标换成比例类指标)、对指标做 log 变换,减小取值范围等。
第三个问题,如果有一些策略探索不适合做实验怎么办?比如想在游戏里测试新的装备、新的战斗数值、或类似 MOBA 游戏里防御塔的血量等数值调整。如果在部分用户或者部分对局上做测试,会造成系统的平衡性出问题。与此类似的,还有商业化测试,比如测试某个道具更高或者更低的定价,也可能导致公平性失衡带来的舆论危机。对于这些无法对用户做 A/B test 的场景,该如何科学决策呢?我们的解决方式是,不以用户作为测试单元,而是以国家、服务器作为测试单元,找到特征相似的两组国家/服务器分别作为实验组对照组。但很多时候找不到非常相似的国家/服务器,这时候可以用合成控制的方法,把多个国家通过加权拟合成一个虚拟国家。下一个问题是,实验组和对照组之间的用户互相影响对方的行为怎么办?
如图中最左边的图,理想的 A/B 实验中,我们希望对照组和实验组的用户在面对不一样的产品策略的时候,独立地做出决策。但事实上,用户之间会互相影响。比如,在一个活动中,实验组的用户可以把活动分享给对照组的朋友。如果用户的分享意愿足够强,就可能出现,每个对照组的用户都和实验组的用户一样看到了这个活动(因为他们被实验组用户分享了活动链接),这种时候 A/B TEST 就失效了。这种用户决策不独立的现象叫做网络效应。事实上,除了很少的场景,比如像搜索场景中,用户之间很难互相影响外,网络效应是广泛存在的,在实验里面一定要考虑这一点。
不同的业务中,网络效应产生的影响也不一样。比如 Facebook 用户之间更容易发生正向的影响。一个用户活跃了,会带动他的社交圈一起活跃。这种情况下,实验组和对照组的对比结果往往要比它真实的差别小。而像 Uber 这种场景,在司机数量一定的情况下,用户跟用户之间更容易发生逆向影响。实验组的用户搭车多了,会造成对照组的用户搭车少。这就导致了实验组与对照组的对比结果比真实的影响要大。
首先,在处理网络效应之前,要先识别实验中是否存在网络效应。首先介绍一个比较简单的识别方法:可以先做一个小流量实验,这时即使有网络效应,影响也很小。然后再上线一个大流量的实验,对比两次实验的结论,假设两次结论的差异不大,说明这网络效应较小,可以忽略的。如果两次实验差别很大,就需要处理网络效应。处理网络效应的方法是从按用户切分实验组跟对照组,改成按 cluster 切分实验组跟对照组:先把用户按照社交关系链构建网络,再根据网络结构进行用户的聚类,切分cluster。其方法比较多,比如像 LPA、fast unfolding 等社区识别算法。继而按 cluster 进行流量切分,同一个 cluster 里面的用户要么都是对照组,要么都是实验组。最后把策略增益推导到大盘,估计大盘的策略效果。
大家都听过很多实验的价值,在此我不再赘述。它作为黄金准则,其科学性,以及在挤水分方面对行业做出的贡献大家有目共睹。我从踩过很多坑的一个数据科学人员的角度,给出几点提醒:① 首先今天分享的内容,实验的原理性内容比较少,更多是在讲实验过程当中发现的坑和避坑的实践。而实验的任何环节中稍有不慎都会掉进坑里,带来系统性的偏差。掉坑的伴生成本,包括错误决策的成本、排查解决问题的人力成本非常的高。成本和收益的 balance 是我们需要永远注意的。② 第二个提醒是,我们的业务很复杂,业务策略的解空间是无限大的,很多业务为了在有限的流量上用实验指导决策,硬是把决策空间坍缩成 n 选 1 的这种简单决策。这就成了削足适履。③ 第三个提醒是实验的介入时间。我们都知道实验特别适合增长曲线到达中后期的产品,业务进入存量时期后需要像抹腻子一样一点一点增长。但如果业务是在起步阶段或者是成长初期,建议多把资源投入在创意上,让飞轮先自己转起来。问答环节
Q1:实验组样本大小如何决定?如何平衡实验潜在收益和成本之间的关系?A1:我们是有公式或者在线工具决定实验组的样本大小,如上文提到的计算公式。实验潜在的收益和成本,是一个非常好并且复杂的问题。需要我们做一个算总账的事情,在这里不能快速回答。希望大家去算成本的时候可以看得更多一些,不能光看对当前这一小撮用户的影响,或者是对当前比如影响了几个 DAU 这种小成本。Q2:这里延伸的一个问题,你们做实验的时候有多少是失败的实验?A2:这个和成本不一定有特别大的关系。我们并不认为实验的失败率高是一件坏事,我们反而害怕失败率低。但是很多时候我们甚至意识不到失败了,里面有一些坑,甚至不知道我们踩了坑。这个是一件非常普遍的存在,但是容易被大家忽视的成本。Q3:当 uplift 找出的用户量级较小的时候,怎么评估最终收益?A3:它其实也是一个阈值选择的问题,可以把它的阈值调低一些,如果量级小,也是量级和效果之间的 trade off,还是看我们愿意花多少成本算 ROI。Q4:使用合成控制法评估效果时,如果合成组发生一些极端事件,导致和实验组差异较大,该怎么刨除这些极端事件的影响,做出一个合理的评估?A4:建议重新合成一个组。实际这种情况下,再做一次实验的 cost 成本很高,但是大概率是,很难有一种方法是完全排除这种极端事件,因为毕竟是 offline 的,没有办法 replay。我觉得从成本的角度最节省就是再做一遍。Q5:AA 实验效果不平可能有哪些原因?
A5:原因其实挺多的,任何环节都可能发生。比如两组下发的策略不一样,可能跟下发的时序都会有关系。比如 a 组下发的早一些, b 组延迟了一些,可能一个在业务的高峰期上下发,一个在相当于相对低谷的时间下发,这两组用户就会不一样等等。像刚刚有提到,比如像我们用一些 random 或者是用尾号分割流量的方法,这两组用户因为一些尾随机或者是账号生成的方式,或者是受前一个实验的影响造成的两组用户本身就不一样等等,还是具体问题具体分析。这也是为什么说它的成本高,因为排查的难度大。