数据分析实战 | A/B测试探寻哪种广告点击率更高?

Udacity数据分析(入门)-对网页点击率分析A/B测试结果 对网页点击率分析A/B测试结果 阅读详情

大家好,我是丁小杰。

本篇是《数据分析实战》系列第三篇,案例来源为《数据分析实战》一书,书中使用的是 R 语言,接下来一段时间,我会用 Python + Tableau/Pyecharts 尽可能的将案例复现出来,以供大家学习。

场景描述

某个促销活动每个月都会开展一次,但和公司其他类似的促销活动相比,该促销活动的用户购买率比较低。通过调查用户购买率低的原因,发现问题可能出在促销广告上。

于是我们准备了两个不同的广告,来验证哪种广告能够带来更高的用户购买率。

A/B测试

A/B 测试能够在多个选项中找出那个能够带来最佳结果的选项。在本例中,我们只要同时投放广告 A 和广告 B,就可以排除其他外部因素的干扰,但要注意用户分组必须遵循随机原则。

在测试过程中,我们收集到了两组广告的曝光数据和点击数据,接下来就可以开始数据分析!

数据描述

ab_test_imp

广告曝光次数信息,87924 行。

字段类型含义
log_datestr广告曝光日期
app_namestr应用名
test_namestr测试名
test_casestr测试用例(A/B)
user_idnumpy.int64用户 ID
transaction_idnumpy.int64事务 ID
ab_test_goal

广告点击次数信息,8598 行。

字段类型含义
log_date.gstr广告点击日期
app_namestr应用名
test_name.gstr测试名
test_case.gstr测试用例(A/B)
user_id.gnumpy.int64用户 ID
transaction_idnumpy.int64事务 ID

数据分析

数据读取

读取两个数据集。

import pandas as pd

imp_df = pd.read_csv('ab_test_imp.csv')
goal_df = pd.read_csv('ab_test_goal.csv')

修改两个数据集的列名。

imp_df.columns = ['广告曝光日期', '应用名', '测试名', '测试用例(A/B)', '用户ID', '事务ID']
goal_df.columns = ['广告点击日期', '应用名', '测试名', '测试用例(A/B)', '用户ID', '事务ID']

显示 ab_test_imp 数据集后五行。

imp_df.tail()

显示 ab_test_goal 数据集后五行。

goal_df.tail()

在这里插入图片描述

以曝光数据作为主数据集,连接两个数据集。

all_df = imp_df.merge(goal_df, how='left', on='事务ID', suffixes=('', '_goal'))
all_df.tail()

在这里插入图片描述

增加标记列,判断用户是否点击

all_df['是否点击'] = all_df['用户ID_goal'].apply(lambda x:0 if pd.isnull(x) else 1)

提取分析所需的列数据。

all_df = all_df.loc[:, ['广告曝光日期', '测试用例(A/B)', '用户ID',  '事务ID', '是否点击']]
all_df.tail()

在这里插入图片描述

A/B点击率

数据处理好后,接下来统计一下 A/B 两个广告的点击率。

pivot = all_df.pivot_table(index='测试用例(A/B)',
                           columns=None,
                           values='是否点击',
                           aggfunc=(lambda x: sum(x)/len(x))).reset_index()
pivot

在这里插入图片描述

A 的点击率为 是 8% 左右,而 B 的点击率 11.5%。

卡方检验

在讨论二者的差异时,一般采用卡方检验,我们先获取 A/B 广告的点击次数。

import numpy as np

pivot = all_df.pivot_table(index='测试用例(A/B)',
                           columns='是否点击',
                           values='用户ID',
                           aggfunc=np.count_nonzero)
pivot

在这里插入图片描述

chi2_contingency 用于列联表中变量独立性的卡方检验。
chi2_contingency(observed, correction=True, lambda_=None)

参数

  • observed:列联表,本例中为二维数组。
  • correction :如果为True,并且自由度为1,则应用Yates校正以保持连续性。校正的效果是将每个观察值向相应的期望值调整0.5
  • lambda_ :float或str,可选。默认情况下,此测试中计算的统计量是Pearson的卡方统计量。 lambda_允许使用Cressie-Read功率散度族的统计量来代替。

返回值

  • chi2:float,卡方值

  • p:float,p值

  • dof:int,自由程度

  • expected:ndarray,预期频率,基于表的边际总和

from scipy.stats import chi2_contingency

kf = chi2_contingency(np.array(pivot))
kf

在这里插入图片描述

根据上面结果,p值为 $ 4.04×10^{-69} $ ,
是一个非常小的数值。p 值越接近于 0 差异性越大。通常来说,当 p 值 小于 0.05 时,称为“存在显著性差异”。因此我们可以说:在将两种广告分为 A/B 并 同时投放后,所得到的点击率存在显著性差异。

A/B广告点击时间序列

计算两个广告每日的点击率。

res = all_df.pivot_table(index='广告曝光日期',
                  columns='测试用例(A/B)',
                  values='是否点击',
                  aggfunc=(lambda x: sum(x)/len(x))).reset_index()
res.head()

在这里插入图片描述

绘制A/B广告点击率时间序列折线图。

from pyecharts.charts import *
import pyecharts.options as opts
from pyecharts.globals import ThemeType

line_style = {
    'normal': {
        'width': 4,
        'shadowColor': 'rgba(155, 18, 184, .3)', 
        'shadowBlur': 10,
        'shadowOffsetY': 10,
        'shadowOffsetX': 10,
        'curve': 0.5  
    }
}

line = (Line(init_opts=opts.InitOpts(theme='ThemeType.CHALK', width='900px')))

line.add_xaxis(res['广告曝光日期'].tolist())
line.add_yaxis('A 广告',
        res['A'].tolist(),
        yaxis_index=0,
        is_smooth=True,
        is_symbol_show=False,
        linestyle_opts=line_style
    )
line.add_yaxis('B 广告',
        res['B'].tolist(),
        is_smooth=True,
        is_symbol_show=False,
        linestyle_opts=line_style
    )
line.set_series_opts(
        label_opts=opts.LabelOpts(
            is_show = False,
        )
    )
line.set_global_opts(
        title_opts=opts.TitleOpts(
            title = 'A / B 广告点击率时间序列变化折线图',
            pos_left = 'center',
            pos_top = '2%'
        ),
        legend_opts=opts.LegendOpts(
            pos_top = '12%',
            legend_icon = 'circle'
        ),
        xaxis_opts=opts.AxisOpts(
            axislabel_opts={'rotate':90},
            axisline_opts=opts.AxisLineOpts(
                is_show=False
            ),
        ),
        yaxis_opts=opts.AxisOpts(
            name='点击率 %',
            axisline_opts=opts.AxisLineOpts(
                is_show=False
            ),
            splitline_opts=opts.SplitLineOpts(
                is_show=True
            )
        ),
        tooltip_opts=opts.TooltipOpts(
            is_show = True,
            trigger = 'axis',
            trigger_on = 'mousemove|click',
            axis_pointer_type = 'shadow'
        )
    )

line.render_notebook()


通过上图可知,广告 B 的点击率在大多数时候都优于广告A。所以,分析结果是,广告B比广告A更容易被用户点击。

这就是今天要分享的内容,记得点赞哦!

案例参考

[1]《数据分析实战》 [日] 酒卷隆志 里洋平/著 肖峰/译


对于刚入门 Python 或是想要入门 Python 的小伙伴,可以通过下方小卡片联系作者,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!

👇🏻 关注公众号卡片,回复“交流群”,一起学习Python👇🏻
《数据分析实战》--用R做A/B测试 《数据分析实战》—用R做A/B测试 本文参考的是《数据分析实战》的第五章。 背景:在某公司中,对与某些产品做促销活动,但是其中有个产品相对于其他产品来说购买率低下,希望通过数据分析找出购买率偏低的原因。 现状:和其他产品相比购买率偏低。 预期:希望能够提升到其他应用相同的购买率 明确问题:经过一系列的沟通,很有可能是由于该应用展示的问题而导致的(不同应用对应不同UI) 不同产品的购买率... 阅读详情

相关推荐

商业数据分析实战(酒卷隆志/里洋平)——第五章案例 C—A/B 测试哪种广告的效果更好

商业数据分析实战(酒卷隆志/里洋平)——第五章案例 C—A/B 测试哪种广告的效果更好 广告的A/B测试 某个促销活动每个月都会开展一次,但和公司其他类似的促销活动相比,该促销活动的用户购买率比较低。通过调查用户购买率低的原因,发现问题可能出在促销广告上。于是我们准备了两个不同的广告,来验证那种广告能够带来更高的用户购买率,那么我们应该如何来比较呢? 文章目录商业数据分析实战(酒卷隆志/里洋平)—...

HuanXiang1235的博客 1150

用a/b test衡量广告效果的举例

背景 为了衡量广告是否能提高销量检验广告的作用,我们分别对广告有触达和没触达的人群的购买率进行对比,由于人群太大所以只能抽样进行,需要有方法能够证明抽样是具有代表性的。 目标 我们通过抽样test组(有广告曝光)和control组(无广告曝光)做ab test来对比有无广告曝光对购买率的影响,为了确保结果是具有代表性的--即有显著性(significance),我们要对test vs control两组间的差异进行假设检验。 现实场景中我们避不开几个问题: 1. A/B test两组人群的转化

weixin_43102230的博客 1711

电商数据分析14——电商行业中点击率(CTR)优化的数据分析方法

在电商平台中,点击率(CTR)作为衡量广告和产品展示效果的关键指标,对于提升广告和产品的曝光效果至关重要。本文将介绍如何利用数据分析方法来优化CTR,提高广告和产品的点击率。

theskylife的博客 3804

网页点击率AB测试

目录 简介 I - 概率 II - A/B 测试 III - 回归 简介 本项目是一家电子商务网站运行 A/B 测试。分析和决定是否应该使用新的页面,保留旧的页面,或者应该将测试时间延长,之后再做出决定。 I - 概率 先导入数据。 import pandas as pd import numpy as np import random import matplotlib.pyplot as plt %matplotlib inline #We are setting the seed to ass

Nothingnessdosink的博客 1718

每天五分钟机器学习:A/B测试在人工智能领域中的应用

A/B测试是互联网公司中常用的测试方式,A/B测试可以有效的验证新模块、新功能是否有效。用在机器学习中,可以有效的验证新模型是否有性能的提升。在人工智能领域发挥着越来越重要的作用。

huanfeng_AI的博客 1177

A/B测试与Yandex广告的优化策略

本文介绍了如何在Yandex平台进行A/B测试以及如何设置和分析实验结果。通过创建两个相等份额的目标受众细分市场,并在Yandex.DIRECT中运行两个不同策略的广告系列来测试优化效果。文章强调了使用实验标签绑定实验与活动的重要性,并建议利用Yandex Metrica进行结果评估,使用计算器工具确定实验的可靠性。

weixin_35829279的博客 454

Tableau实战 A/B测试分析

关注微信公共号:小程在线 关注优快云博客:程志伟的博客 数据集见微信公共号链接 导入数据集:全部销售数据和测试分组信息; 将第三列改为周销售额,第五列改为测试店标识,第六列改为测试组。 a.创建计算字段:测试时期标志。 b. ...

程志伟的博客 678

DroidGuard虚拟机逆向解析:指令集、密钥派生与反调试机制

DroidGuard是Google在Android生态中部署的轻量级定制虚拟机,用于设备完整性校验。其核心原理是通过自解释字节码、多层混淆指令集与动态密钥派生机制,在ART运行时构建静默安全沙箱。技术价值在于规避传统API检测盲区,实现高鲁棒性环境感知;典型应用场景包括金融SDK风控、Play Services可信启动及合规性审计。本文深入拆解其4字节指令编码规则、基于设备指纹的三阶段密钥派生(SHA256→Feistel→AES)、以及五层反调试体系(ptrace快照、时间差分、内存页探测、指令流校验、服

weixin_32736961的博客 587

支付宝营销策略效果分析(AB测试原理与流程)

案例文件与代码下载地址:DataScience 目标:以支付宝某次营销活动的数据为例,通过分析广告点击率,比较两组营销策略的广告投放效果 数据准备 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns 数据描述 dmp_id:营销策略编号(源数据文档未作说明,这里根据数据情况设定为1:对照组,2:营销策略一,3:营销策略二) user_id:支付宝用户ID label:.

weixin_43822124的博客 1797

【小宁学习日记6 PCB】电路原理图

本文系统讲解了电子硬件设计中原理图的阅读与绘制技巧。首先剖析原理图的四大核心要素(元件符号、连接线、结点、注释),强调注释对可读性的重要性。然后提出三步读懂法:查看图纸信息、分模块分析、结合芯片手册验证,并列举5个典型芯片案例(CH224K、CH343P等)进行实战解析。最后给出6条绘制规范:模块化布局、详细标注、规范命名、信号流布局、符号封装匹配、版本管理。文章指出原理图是电子设计的"地基",掌握规范阅读与绘制方法能大幅提升设计效率,避免常见错误。新手应从开源项目分析和简单电路绘制入手

qq_74376834的博客 2352

RISC-V嵌入式开发实战:手把手教你读懂并修改CH32V103的链接脚本(.ld)

本文深入解析RISC-V嵌入式开发中CH32V103链接脚本(.ld)的编写与优化技巧。从内存布局、段分配到实战调试,详细讲解如何解决程序跑飞、变量异常等典型问题,特别针对RISC-V架构的gp寄存器优化、中断向量表处理等特性提供专业指导,帮助开发者充分利用64KB Flash和20KB RAM资源。

weixin_33704234的博客 175

chapter5.哪种广告的效果更好

商业数据分析实战(酒卷隆志/里洋平) 第五章 案例3——A/B测试:哪种广告的效果更好 5.1现状和预期 本月黑猫游戏的销售额减少 5.2发现问题 待续。。。 5.3数据的收集和加工 5.4数据分析 5.5解决对策 5.6小结 ...

xueruixuan的专栏 274

SMART200如何实现多次调用子程序带定时器功能

1、西门子200PLC的子程序由于很多限制条件,如果希望建立一个可以多次调用的子程序,那么这个子程序里是不能含有定时器指令的,所以我们只能退而求其次了。建议将沿指令(上升沿、下降沿)放在多次调用子程序的外面。 2、可以提供不同的时基,提供不同时间的定时 3、实现秒定时 5、子程序内部: STL代码: 1、时基信号由外部提供、 可以提供不同的时基信号 2、实现循环定时开关 LD #Start:L0....

RXXW_Dor的博客 1万+

优化IAA广告策略:通过A/B测试和实时反馈提高广告效果

本文将介绍如何使用数据分析技术,特别是A/B测试和实时反馈机制,来改进移动应用内的广告策略。我们将展示一个实际案例,包括如何设置实验、收集数据、分析结果,并根据这些结果调整广告策略以实现更好的用户参与度和收入增长。

乘风之行 1225

OpenClaw 股票自动化交易实践指南:从原理到实战的完整技术路径

量化交易策略的开发是一个系统工程,需要综合运用金融知识、编程技能和数据分析能力。OpenClaw通过引入提示词工程技术,大大降低了策略开发的技术门槛,使得更多投资者能够参与到量化交易中来。但技术只是工具,真正决定策略成败的是对市场的深刻理解和严格的风险管理。本章系统介绍了OpenClaw环境下的策略开发方法,从提示词驱动到传统代码实现,从参数优化到回测验证,涵盖了策略开发的完整流程。提示词驱动方式适合快速验证交易想法,传统代码方式适合实现复杂的定制逻辑,两种方式可以协同使用,发挥各自的优势。

lovely_yoshino的博客 5990

家用扫地机器人研发技术路线-第四部分:如何一步步做出来 | 4阶段 · 从原型到量产

摘要:本文详细介绍了扫地机器人从原型到量产的研发流程,分为4个关键阶段。首先聚焦四大技术难点:SLAM定位、AI视觉识别、仿生机械臂和静音风机系统。研发过程包括实验室原型验证、工程样机测试、小批量真实场景测试和量产导入四个阶段,每个阶段设有严格评审标准。特别强调测试贯穿全程,包括模块单元测试、整机集成测试、长期可靠性测试和多样化场景模拟,确保产品在上市前完成数百次真实环境验证。整个流程体现了从技术攻关到产品落地的系统性工程思维。

智能硬件研发,欢迎交流 191

【大模型与机器学习解惑】什么是A/B测试,为何进行A/B测试?

机器学习的 A/B 测试

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 1998

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知 文章目录Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知1.实现思路2.新增钉钉机器人并测试消息的发送2.1.新增钉钉机器人2.2.测试发送消息到钉钉3.在Jenkins中新建一个构建任务3.1.新建任务3.2.配置任务时增加参数化构建过程3.3.配置任务添加git地址3.4.配置构建触发器生成gitlab webhook使用的token3.5.配置任务构建过程中执行的She

江晓龙的博客 3809

虾皮广告数据分析:如何在虾皮(Shopee)平台上进行广告推广

关键词广告是根据用户搜索关键词进行定向广告投放,关联广告则是在用户的浏览路径中展示,商店广告是将店铺信息展示在搜索结果的顶部。了解这些广告类型的特点和适用场景,可以帮助卖家选择合适的广告类型来推广产品。优质的广告创意可以提高广告的点击率和转化率,从而提高广告的效果。在进行A/B测试时,需要确保测试的变量具有明显的差异,并进行足够的测试周期来获取可靠的数据。选择合适的关键词可以提高广告的曝光率和点击率,从而带来更多的潜在买家。根据关键词的竞争程度和预算,设定合适的出价是关键词广告的重要步骤。

duoduocanmou的博客 1089

美的集团-数据挖掘工程师面试分享

美的集团-数据挖掘工程师面试分享

510

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

简单,用 Python 实现 A/B 测试

A/B测试,通过分析两种不同的营销策略,以此来选择最佳的营销策略,可以高效地将流量转化为销售额(或转化为你的预期目标)。 有助于找到更好的方法来寻找客户、营销产品、扩大影响范围或将目标客户转化为实际客户。

人生不怕起点低,就怕没追求 1056

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数字内容体验A/B测试的有效应用与提升策略

本文将探讨“数字内容体验的A/B测试”,分析其有效应用和提升策略。通过具体案例和数据分析,阐述如何利用A/B测试优化用户体验,提高转化率,并提升品牌认知度。读者将了解实施A/B测试的最佳实践,掌握提升数字内容效果的实用方法,从而推动企业成长。

liju_yang的博客 458

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

A/B测试全解析:原理、流程与实战案例

A/B测试是一种数据驱动的实验方法,通过随机分组比较不同版本的效果差异,广泛应用于互联网产品优化。文章从原理、流程、统计学基础到实践案例全面解析A/B测试:核心是通过假设检验验证改动有效性,需注意显著性水平、p值等统计指标;完整流程包括目标设定、实验设计、实施测试和数据分析;实践中需避免样本污染等陷阱,可采用多变量测试等进阶方法。典型案例显示专业摄影使Airbnb订单量提升2-3倍。A/B测试将决策从主观臆断转向科学验证,是数据驱动决策的重要工具。

long1973m的博客 2665

图片中的暖色或冷色滤色片是否会带来更多点击? —机器学习A / B测试

A/B test on ads is the art of choosing the best advertisement that optimizes your goal (number of clicks, likes, etc). For example, if you change a simple thing like a filter in your pictures you will...

weixin_26713521的博客 275

【A/B测试】深度解析:从理论到实践Python实现详解(含源码)

A/B测试(也称分流测试)在数据分析和产品优化中扮演重要角色。无论是在网站优化、营销活动还是产品改进中,A/B测试都帮助通过数据驱动决策、测试和验证论文提出了实际操作的基本概念,详细讲解了如何实施A/B测试,并通过Python代码示例演示了整个过程。

weixin_53575943的博客 1162

A/B 测试:让数据替你说话

摘要:A/B测试是数据驱动决策的关键工具,通过将用户随机分配到不同产品版本并对比数据,找出最优方案。文章介绍了A/B测试的核心概念、两类常见测试(界面设计和算法策略)及注意事项,强调单一变量、前期指标设计和数据观察周期的重要性。通过Netflix等案例展示了A/B测试的实际价值,建议产品、设计和数据分析师都应重视这一方法。A/B测试能降低风险,实现持续优化,是产品迭代的必备环节。

AI悦创·编程私教1v1 976
上一篇: 4K壁纸批量采集,张张精品,全程自动化
下一篇: pathlib一个优雅的路径操作模块,碾压os
Dream丶Killer
Dream丶Killer 优质创作者: python技术领域 优质创作者: python技术领域
博客等级 码龄8年 7万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream丶Killer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值