基于Python的 Cookie Cats 游戏门槛位置 A/B 测试分析

cb0601b77738d8c635c79b915bf81f7b

 

项目背景

Cookie Cats 是什么?

"Cookie Cats" 是一款移动游戏,由 Tactile Entertainment 开发和发布。在这款游戏中,玩家需要通过消除具有相同颜色的相邻方块来解谜,同时帮助一群可爱的猫咪吃到他们心爱的饼干。游戏的玩法类似于其他消除类游戏,但有着自己独特的故事背景和可爱的游戏角色。

当玩家玩游戏时,可能会碰到一些阻碍,比如需要等待一段时间才能继续游戏,或者需要花钱购买道具才能过关。比如,假设你在玩一款手机游戏,游戏中有一些关卡需要等待一段时间才能解锁,或者需要购买特殊道具才能过关。

在这个项目中,我们要分析的是一个A/B测试的结果。A/B测试是一种常用的实验设计方法,其中一组人(组A)会体验到一种情况,另一组人(组B)会体验到另一种情况。在这个例子中,我们将Cookie Cats游戏中的第一个门槛从30级移到40级,然后分析这个改变对玩家的影响。

我们主要关注两个方面:玩家的留存率和游戏轮次。

  1. 留存率指的是玩家在游戏中的持续参与程度,即他们是否会在一段时间后继续玩游戏。

  2. 游戏轮次指的是玩家在游戏中进行的游戏回合或关卡。通过分析这些数据,我们可以了解改变关卡位置对玩家的行为产生了什么影响。

完成这个项目需要一些基本技能:

数据描述

数据集是从某个正在运行 A/B 测试的游戏中收集的,共有 90,189 名玩家在进行 A/B 测试期间安装了游戏。

  1. userid:每个玩家的唯一标识号,用来区分不同的玩家。

    例子:假设有玩家A、玩家B和玩家C,他们的userid分别是123、456和789。

  2. version:玩家所属的实验组,控制组或测试组。

    • gate_30:表示玩家被分配到了实验组,他们在游戏中的第一个关卡在30级。

    • gate_40:表示玩家被分配到了测试组,他们在游戏中的第一个关卡在40级。

    例子:玩家A被分配到了gate_30组,而玩家B被分配到了gate_40组。

  3. sum_gamerounds:玩家在安装游戏后的第一个星期内玩了多少个游戏回合。

    例子:玩家A在第一个星期玩了10个游戏回合,而玩家B玩了20个游戏回合。

  4. retention_1:玩家在安装游戏后的第一天是否再次登陆游戏。

    • 1:表示玩家在第一天再次登陆游戏。

    • 0:表示玩家在第一天没有再次登陆游戏。

    例子:玩家A在第一天没有再次登陆游戏,而玩家B再次登陆了游戏。

  5. retention_7:玩家在安装游戏后的第七天是否再次登陆游戏。

    • 1:表示玩家在第七天再次登陆游戏。

    • 0:表示玩家在第七天没有再次登陆游戏。

    例子:玩家A在第七天再次登陆了游戏,而玩家B没有再次登陆游戏。

数据分析

数据清洗

 useridversionsum_gameroundsretention_1retention_7
0116gate_303FalseFalse
1337gate_3038TrueFalse
2377gate_40165TrueFalse
3483gate_401FalseFalse
4488gate_40179TrueTrue

1d0eff362cadd098b8d218d3840496ef

1df116dd90cfb1230a0a64d54c677025

db3f7cfbe843f78da02f1ce2c46abab7

345796bf7ea16eeae70f2f6436210cef

数据分布探索

b759f0c090a43879d0ad16f8d42ade94

dc22da493fbc9b6e094d58b48ed4d6ff

A/B实验设计&显著性验证

一个完整的A/B test主要包括如下几部分:

1、分析现状,建立假设:分析业务,确定最高优先级的改进点,作出假设,提出优化建议。

2、设定指标:设置主要指标来衡量版本的优劣;设置辅助指标来评估其他影响。

3、设计与开发:设计优化版本的原型并完成开发。

4、确定测试时长:确定测试进行的时长。

5、确定分流方案:确定每个测试版本的分流比例及其他分流细节。

6、采集并分析数据:收集实验数据,进行有效性和效果判断。

7、给出结论:①确定发布新版本;②调整分流比例继续测试;③优化迭代方案重新开发,回到步骤1。

e0f045d4837196fe208c10687b3258af

假设:

步骤:

8a077a667502e9e61287c92bef5b35c2.png

注意点:

  1. 测试时长:测试的时长不宜过短,否则参与试验的用户几乎都是产品的高频用户。

  2. 分流(或者说抽样):应该保证同时性、同质性、唯一性、均匀性。

①同时性:分流应该是同时的,测试的进行也应该是同时的。

②同质性:也可以说是相似性,是要求分出的用户群,在各维度的特征都相似。可以基于用户的设备特征(例如手机机型、操作系统版本号、手机语言等)和用户的其他标签(例如性别、年龄、新老用户、会员等级等)进行分群,每一个A/B测试试验都可以选定特定的用户群进行试验。

思考:如何判断是不是真的同质?可以采用AAB测试。抽出两份流量进行A版本的测试,进行AA测试,并分别与B版本进行AB测试。通过考察A1和A2组是否存在显著性差异,就可以确定试验的分流是否同质了。

③唯一性:即要求用户不被重复计入测试。

④均匀性:要求各组流量是均匀的。Hash算法。现在一般由专用的A/B测试工具负责。也有看到一篇文章写了python实现,大体的思路是对用户id添加Salt值,对其散列,并据此算出一个0-1之间的浮点数,同设定好的阈值比大小,从而分组。有兴趣的可以看看,该作者的思路很清晰: 随机分配里的Why and How。(统计学原理上,我没有找到均匀性这一要求的依据,其实双样本的假设检验并不要求两个样本的数量相等或相近。当然从直观上是可以理解,希望分出的用户组越相近越好,包括人数的相近。)

为什么判断是不是正态?

判断数据是否符合正态分布是因为很多统计方法(如t检验)在数据符合正态分布时具有更高的准确性和可靠性。正态性检验是为了确认所采用的统计方法是否适用于数据,以避免在假设检验中得出错误的结论。

如果数据符合正态分布,那么可以使用参数统计方法(如t检验)进行假设检验,这样可以更准确地估计总体参数(如总体均值)的差异。而如果数据不符合正态分布,使用参数统计方法可能会导致偏差或错误的结论。

在A/B测试中,我们通常希望使用正态性检验来验证我们所采用的统计方法是否适用于数据,以确保我们得出的结论是可靠和准确的。如果数据不符合正态分布,我们可以选择使用非参数统计方法(如Mann-Whitney U检验)来进行假设检验,这些方法对数据的分布情况不做任何假设,因此更加灵活和适用于不同类型的数据。

不是正态怎么办?

可以考虑使用非参数统计方法进行假设检验,这样可以避免假设数据符合正态分布的前提。非参数统计方法不依赖于数据的分布情况,因此更加灵活和适用于不同类型的数据。

常用的非参数统计方法包括:

  1. Mann-Whitney U检验:用于比较两个独立样本的中位数差异。

  2. Wilcoxon符号秩检验:用于比较两个相关样本的中位数差异。

  3. Kruskal-Wallis检验:用于比较多个独立样本的中位数差异。

  4. Friedmann检验:用于比较多个相关样本的中位数差异。

为什么要进行方差齐性检验?

确保在进行独立双样本t检验等参数统计方法时,所采用的假设检验结果的可靠性和准确性。方差齐性检验用于检验两个或多个组的样本方差是否相等,即各组数据的方差是否相似。如果各组数据的方差相似,则称为方差齐性。

如果数据符合正态分布且方差齐性检验通过,则使用独立双样本t检验(ttest_ind函数)进行参数检验,以检验两组之间的均值差异。如果数据不符合正态分布或方差齐性检验未通过,则使用Mann-Whitney U检验(mannwhitneyu函数)进行非参数检验。

f7a200208011eec69ba6000ec6e9dc9e

2e62588bb3ba2b6172db121577f684bf

实验结论

根据实验结果,我们进行了一项非参数测试,测试了Cookie Cats游戏中将第一个门槛从30级移到40级对玩家留存率和游戏轮次的影响。通过Levene检验,我们确认了两组数据的方差齐性,这表明了实验的可靠性。

在备择假设为双侧(Two-sided)的情况下,我们得到了一个p值为0.0509。根据通常的显著水平(α = 0.05),我们无法拒绝零假设,即我们没有足够的证据来表明A组和B组之间存在显著差异。

因此,综合考虑实验结果,我们得出结论:在我们的实验条件下,将第一个门槛从30级移到40级对玩家留存率和游戏轮次没有产生显著影响。也意味着玩家在游戏体验方面可能不会因为门槛的移动而受到影响。