在这里插入图片描述

作者 l 萝卜

本文会将原理知识穿插于代码段中,相关代码和数据集可在公众号 “ 数据分析与商业实践 ” 后台回复 " AB测试 " 获取。

前言

在电商网站 AB 测试非常常见,是将统计学与程序代码结合的经典案例之一。尽管如此,里面还是有许多值得学习和注意的地方。

A/B 测试用于测试网页的修改效果(浏览量,注册率等),测试需进行一场实验,实验中控制组为网页旧版本,实验组为网页新版本,实验还需选出一个指标 来衡量每组用户的参与度,然后根据实验结果来判断哪个版本效果更好。

通过这些测试,我们可以观察什么样的改动能最大化指标,测试适用的改动类型十分广泛,上到增加元素的大改动,下到颜色小变动都可使用这些测试。

背景

在本次案例研究中,我们将为教育平台 “ 不吹牛分析网 ” 分析 A/B 测试的结果,以下是该公司网站的客户漏斗模型:浏览主页 > 浏览课程概述页面(课程首页) > 注册课程 > 付费并完成课程

图片来自网络

越深入漏斗模型,不吹牛分析网就会流失越多的用户(正常现象),能进入最后阶段的用户寥寥无几。为了提高参与度,提高每个阶段之间的转化率,萝卜试着做出一些改动,并对改动进行了 A/B 测试,我们将帮萝卜分析相关测试结果,并根据结果建议是否该实现页面改版。

因为利用 Python 进行 A/B 测试在每个数据集上的使用大同小异,所以我们这里只展示课程首页的A/B测试过程,其余页面的数据集会一并提供给大家作为练习。

Python 实战

数据读入

在这里插入图片描述

在这里插入图片描述

参数说明:

timestamp:浏览时间

id:用户 id

group:用户所属组别

action:用户行为,view--仅浏览;enroll--浏览并注册

duration:浏览界面时长(浏览越久,可能越感兴趣,就越有可能注册)

点击率分析

点击率 (CTR: click through rate)通常是点击数与浏览数的比例。因为网站页面会使用 cookies,所以我们可以确认单独用户,确保不重复统计同一个用户的点击率。为了进行该实验,我们对点击率作出如下定义:CTR: 单独用户点击数 / 单独用户浏览数,这一需要注意的点可以使用 pandas 中的 nunique() 函数来快捷完成

在这里插入图片描述

同理,实验组的计算方式相同,结果分析如下:

[图片上传失败...(image-de8716-1598879560241)]

根据已有数据,我们通常会猜测会不会是新界面更加能够吸引用户停留并浏览,从而达到用户浏览时间越长,就越有可能注册课程。

浏览时长分析

可视化分析

这里的我们将使用 seaborn 结合 markdown 公式的方式来实现快捷又强大的数据可视化:

在这里插入图片描述

在这里插入图片描述

结果分析

新界面的注册率有所提高,而浏览时长方面均呈现轻微的右偏

实验组的浏览时长平均值比控制组高 15mins 左右,方差差别不大

所以我们可以初步判断新改版的课程首页更吸引用户,后续将进行假设检验来进一步验证我们的猜想。

假设检验

我们将从控制组和实验组中各抽取一定数量的样本来进行假设检验,下面是置信水平 α 的选择经验:

在这里插入图片描述

样本量过大,α-level 就没什么意义了。为了使假设检验的数据样本更加合理,我们可以使用分层抽样。Python 没有现成的库或函数,可以使用前人的轮子。

from mysampling import get_sample

# df: 输入的数据框 pandas.dataframe 对象

# sampling:抽样方法 str

## 可选值有 ["simple_random","stratified","systematic"]

## 按顺序分别为: 简单随机抽样、分层抽样、系统抽样

# stratified_col: 需要分层的列名的列表 list,只有在分层抽样时才生效

# k: 抽样个数或抽样比例 int or float

## (int, 则必须大于0; float,则必须在区间(0,1)中)

## 如果 0< k <1, 则 k 表示抽样对于总体的比例

## 如果 k >=1, 则 k 表示抽样的个数;当为分层抽样时,代表每层的样本量

data =get_sample(df=course, sampling='stratified',

stratified_col=['group'], k=300)

data.sample(4); data.info()

因为总体未知,所以我们可以使用两独立样本 T 检验,其实双样本 Z 检验也能达到类似的效果:

不难发现,有时双样本 Z 检验同样可以达到两独立样本 T 检验的效果。

综述,我们将拒绝零假设,接受 “ 新界面的浏览时长显著不同于(高于)旧界面 ” 的这个假设。

AB 测试的不足

但 A/B 测试也有不足之处。虽然测试能帮你比较两种选择,但无法告诉你你还没想到的选择,在对老用户进行测试时,抗拒改变心理、新奇效应等因素都可能使测试结果出现偏差。

抗拒改变心理:老用户可能会因为纯粹不喜欢改变而偏爱旧版本,哪怕从长远来看新版本更好。

新奇效应:老用户可能会觉得变化很新鲜,受变化吸引而偏爱新版本,哪怕从长远看来新版本并无益处。

所以在设计 A/B 测试、基于测试结果得出结论时都需要考虑诸多因素。下面总结了一些常见考虑因素:

老用户第一次体验改动会有新奇效应和改变抗拒心理;

要得到可靠的显著结果,需要有足够的流量和转化率;

要做出最佳决策,需选用最佳指标(如营收 vs 点击率);

应进行足够的实验时长,以便解释天/周/季度事件引起的行为变化;

转化率需具备现实指导意义(推出新元素的开支 vs 转化率提高带来的效益);

对照组和实验组的测试对象要有一致性(两组样本数失衡会造成辛普森悖论等现象的发生)。

今天的案例就到这里,相关代码和数据集,可私聊我获取~~

后续会不断更新常见场景下的 Python 实践

在这里插入图片描述

python 数据逐个验证_案例实战 | Python 实现 AB 测试中常见的分层抽样与假设检验 (附代码和数据集)...相关推荐

  1. python 数据逐个验证_在python中验证数据的最佳方法是什么?

    我是Python的新手,我试图找到验证数据的最佳方法.在 我有一个"well"类型的对象,它具有其他对象的属性.也可以通过XML文件来获取数据.下面是一个例子.在class Wel ...

  2. python数据科学手册_小白入门Python数据科学

    前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...

  3. python数据类型转换原因_浅谈Python数据类型之间的转换

    Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 compl ...

  4. python视频网站项目_[项目实战] Python Flask构建微电影视频网站

    注:本站源码仅做学术研究,自娱自乐使用,不得用于任何的非法商业用途 由于版权原因.本站将无限期停止微擎模块资源下载如果有任何侵犯您权益的内容请联系小站删除哦.小站一定会积极配合的. 课程目录: (下载 ...

  5. python 指定证书验证_如何在python中验证SSL证书?

    我需要验证我的自定义CA签署了证书.使用OpenSSL命令行实用程序很容易做到: # Custom CA file: ca-cert.pem # Cert signed by above CA: bo ...

  6. python 代理服务器 身份验证_如何使用Python+Selenium设置代理身份验证(用户和密码)...

    有一个Firefox+Python的例子,但是没有身份验证here.然后可以在源代码中找到其他可用参数here.所以看起来你需要以下几点:socksUsername socksPassword 例如: ...

  7. 案例实战 | Python 玩转 AB 测试中的分层抽样与假设检验!(附代码和数据集)...

    今天由优秀的萝卜同学给大家分享一篇AB测试干货~ 本文会将原理知识穿插于代码段中,相关代码和数据集空降文末可以获取. 前言 在电商网站 AB 测试非常常见,是将统计学与程序代码结合的经典案例之一.尽管 ...

  8. python金融量化书籍_超强干货 | Python金融数据量化分析教程+机器学习电子书

    如今Python语言的学习已经上升到了国家战略的层面上.Python语言是人工智能的基础语言,国家相关教育部门对于"人工智能普及"格外重视,不仅将Python列入到小学.中学和高中 ...

  9. 视频教程-跟着王进老师学开发Python篇:基础入门案例讲解-Python

    跟着王进老师学开发Python篇:基础入门案例讲解 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ¥ ...

最新文章

  1. vray渲染出图尺寸_Vray渲染出图该如何正确保存
  2. 机器人砂型铸造_安诺伊智能机器人丨助力压铸厂铸造工艺提升
  3. Effective Java第七条:避免使用终结方法
  4. 初级程序员需要接触好的架构代码
  5. 前端学习(2944):前一天回顾
  6. nginx禁止访问目录中可执行文件
  7. Nagios添加主机监控失败-故障小结
  8. win11更新特别慢怎么办 windows11更新缓慢的解决方法
  9. win10调整计算机字体大小,主编教您win10下怎么调整字体大小
  10. 易达园林注册机_科创易达园林绿化插件免费版
  11. 路由器当ap用虚拟服务器不能用,解决用TPLINK路由器配置模拟AP时Internet连接共享是空白的问题...
  12. [swift] UIImage NSImage PNG透明区域填充自定义颜色实现
  13. [P4]p4 integrate/resolve/copy
  14. linux怎么强制解挂,linux下强制卸载挂接点——umount+Fuser命令详解
  15. 全球及中国留学咨询服务行业运营形势与发展前景分析报告2022版
  16. 单片机工程师笔试题目归纳汇总
  17. SQL Server备份、完整备份,差异备份、日志备份
  18. json字符串转化为map
  19. Redis有事务冲突吗
  20. 重磅:2018逐浪字库样本发布

热门文章

  1. Daily Scrum 11.6
  2. 从零打造 Vue 聊天组件
  3. 前端基础牢记的一些操作-Github仓库管理
  4. 去除网页上图片的虚框和a文字链接上的虚框
  5. 计算机视觉中的牛人贡献及其主页
  6. java获取运行时对象,java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构...
  7. java 输出字符串的所有排列_JAVA 输出指定字符串所有排列组合
  8. toCharArray()和 charAt()的用法
  9. 期末项目设计图-教务管理系统
  10. Python爬虫基础(三)urllib2库的高级使用