基于游戏cookie cats数据的A/B测试

一、A/B测试背景介绍:

① 数据来源于kaggle
② cookie cats游戏:类似国服的开心消消乐,三消游戏
③ 较难关卡作用:驱动应用内购买,使玩家强制休息从而增加和延长玩家对游戏的享受
④ 任务:采用A/B测试分析较难关卡的位置(第30关或第40关)设置对于玩家留存的影响以及是否有显著差异

二、字段解释:

userid: 用户唯一标识
version: 第一个较难级别关卡的设置(第30关或者第40关)
sum_gamerounds: 玩家在安装后的第一周内玩的游戏回合数
retention_1:玩家在安装1天后是否玩游戏(次日是否留存)
retention_7:玩家在安装7天后是否玩游戏(第七日是否留存)

这是游戏cookie cats做A/B测试的原始数据(来自kaggle)

三、下面是关于游戏A/B测试结果的数据分析代码(基于jupyter notebook)和过程展示:

# 调用所需要的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
def ignore_warn(*args, **kwargs):
    pass
warnings.warn = ignore_warn 

from scipy import stats
# 导入数据,展示前5行如下
data = pd.read_csv('C:/Users/少年呀/Desktop/cookie_cats_AB_testing/cookie_cats.csv')
data.head()

在这里插入图片描述

# 对玩家游戏所玩轮数情况做一个初步的了解
data['sum_gamerounds'].describe()

在这里插入图片描述

# 按照所玩游戏轮数分组画图
plot_data = data.groupby('sum_gamerounds')['userid'].count()
plot_data
ax = plot_data[:100].plot()
ax.set_xlabel('game rounds')
ax.set_ylabel('number of players')
plot_data.head()

在这里插入图片描述

在这里插入图片描述

3.1 采用卡方检验的方法去比较两种关卡设置在留存上是否有明显差异

3.1.1 对于次日留存
选择显著水平:采用显著水平α为0.05
原假设H0:两种关卡设置(gate_30与gate_40)在次日留存上无明显差异
备择假设H1:两种关卡设置(gate_30与gate_40)在次日留存上有明显差异
# 计算gate_30的次日上线人数与未上线人数,并整理成DataFrame

data.groupby('version')['retention_1'].value_counts()

在这里插入图片描述
在这里插入图片描述

# 导入卡方检验模块并计算p-value
from scipy.stats import chi2_contingency
chi_data_1 = np.array([[20034, 24666], [20119, 25370]])
kf_1 = chi2_contingency(chi_data_1)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf_1)
# 输出 chisq-statistic=3.1591, p-value=0.0755, df=1 expected_frep=[[19900.86485048 24799.13514952] [20252.13514952 25236.86485048]]
  • 小结:由于p-value=0.0755>0.05,所以接受原假设,两种方法在次日留存上无明显差异
3.1.2 对于七日留存
(与次日留存同理)
选择显著水平:采用显著水平α为0.05
原假设H0:两种关卡设置(gate_30与gate_40)在七日留存上无明显差异
备择假设H1:两种关卡设置(gate_30与gate_40)在七日留存上有明显差异
data.groupby('version')['retention_7'].value_counts()
from scipy.stats import chi2_contingency
chi_data_7 = np.array([[8502, 36198], [8279, 37210]])
kf_7 = chi2_contingency(chi_data_7)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf_7)
# 输出 chisq-statistic=9.9591, p-value=0.0016, df=1 expected_frep=[[ 8317.09742873 36382.90257127] [ 8463.90257127 37025.09742873]]
  • 小结:由于p-value=0.0016< 0.05,所以可以果断拒绝原假设,两种方法在七日留存上有明显差异,且gate_30在七日留存上表现更好

3.2 采用重抽样方法(Bootstrapping)进行比较两种策略是否存在明显差异(参考其他选手的方法)

# 根据中心极限定理,从样本中随机取80%的样,对gate_30与gate_40分别求均值,并重复1000次
# 定义一个函数,用于次日和七日的留存随机取值,并取均值
def get_sample(retention):
    list_d = []
    for i in range(1000):
        sample_mean = data.sample(frac=0.8, replace=True).groupby('version')[retention].mean()
        list_d.append(sample_mean)
    return list_d
3.2.1 对比次日留存
# 检验两者的次日留存率,并画密度图比较
list_1d = get_sample('retention_1')
df_1d = pd.DataFrame(list_1d)
gate_30_1d = df_1d['gate_30']
gate_40_1d = df_1d['gate_40']
df_1d.plot(kind='density')

在这里插入图片描述

# 添加一列字段作为两者之间的差异百分比项
df_1d['diff'] = (df_1d.gate_30 - df_1d.gate_40)/df_1d.gate_40*100

ax = df_1d['diff'].plot(kind='density')
ax.set_title('两个AB组之间次日留存的百分比差异')

# 计算当较难的关卡处于第30关时,次日留存更大的概率
print('当较难的关卡处于第30关时,次日留存更大的概率:',(df_1d['diff'] > 0).mean())
# 输出:当较难的关卡处于第30关时,次日留存更大的概率: 0.954

在这里插入图片描述

  • 小结:从这张图中,可以看到最有可能的百分比差异在1%-2%左右,有95.4%的可能是gate_30的留存更大,数据更偏向设置第30大关,对于在第30关设置较难关卡更有利
3.3.2 对比七日留存
tips:步骤和上述方法一致,代码如下
list_7d = get_sample('retention_7')
df_7d = pd.DataFrame(list_7d)
gate_30_7d = df_7d['gate_30']
gate_40_7d = df_7d['gate_40']
df_7d.plot(kind='density')

在这里插入图片描述

# 添加一列字段作为两者之间的差异百分比项
df_7d['diff'] = (df_7d.gate_30 - df_7d.gate_40)/df_7d.gate_40*100

# Ploting the bootstrap % difference
ax = df_7d['diff'].plot(kind='density')
ax.set_title('两个AB组之间次日留存的百分比差异')

# 计算当较难的关卡处于第30关时,次日留存更大的概率
print('当较难的关卡处于第30关时,次日留存更大的概率:',(df_7d['diff'] > 0).mean())
# 输出:当较难的关卡处于第30关时,次日留存更大的概率: 0.999

在这里插入图片描述

  • 小结: 在1000次重抽样的数据中,有99.9%的比率是gate_30的数据更优,更有利于玩家的七日留存

六、结论

  1. A/B测试的结果表明:
    ① 不论在次日留存率还是七日留存率上,当较难关卡处于第30关时,都更优于将较难关卡放置在第40关(假设检验结果表明)。
    ②且在七日留存上,两种方法(卡方检验与重抽样)都显示两种关卡设置存在明显差异,应当将第一个较难关卡设置在第30关

  2. 可能原因分析:
    ① 次日留存于七日留存差异分析:第2天大多数玩家还没有到达较难关卡,所以差异不明显;第7天大多数玩家都到达了较难关卡(第30关或者第40关),所以在数据上会更加有说服力
    ② 随着时间的推移,人们从一项活动中获得的乐趣越来越少的趋势,当人们遇到大关卡时,会强迫他们进入休息的状态,从而使他们对游戏的享受时间延长。
    ③ 40大关卡相对于30大关卡耗费时间更多,玩家可能会因为游戏关卡简单或者单一而失去兴趣

  3. 还能尝试去获取数据衡量A/B测试效果的指标:
    ① 付费率
    ② 玩家每天游戏平均时间

猜你喜欢

转载自blog.csdn.net/weixin_43195011/article/details/108457214