从0开始学习R语言--Day25--A/B测试 vs 多臂老虎机

        通常在比较两个不同的方案对数据的影响时,我们会各拿50%的数据去进行对照试验,这样观测到的结果会最大程度地保留统计学上的特点。但实际上,并不是所有对比不同方案都要这样做,一来,我们需要等到两组实验都完全结束后,才能知道结果如何,等待时间周期较长;二来,在很多场景中,差的方案会在落地测试时不可避免地对用户造成不好的体验。

        后者对应的一般是在用户的实时反馈和广告的点击率上,那么这种情况,我们会采用动态规划的方式,随着实验的进行,不断地减少差方案的数据,通过这种迭代的方式来降低额外的损失,从而实现快速地聚焦到优质方案。当然,这样做会在一定程度上破坏数据的分布,统计显著性会减弱。

以下是一个例子:        

library(bayesAB)
# 生成模拟数据集:3个广告版本(A/B/C)的点击率
# 生成模拟数据集:每天随机选一个广告测试
set.seed(123)
n_days <- 25  # 测试5天
true_rates <- c(A = 0.1, B = 0.15, C = 0.2)  # 真实点击率generate_data <- function(day) {chosen_ad <- sample(c("A", "B", "C"), 1)  # 每天随机选一个广告impressions <- sample(100:500, 1)clicks <- rbinom(1, size = impressions, prob = true_rates[chosen_ad])data.frame(day = day,ad_version = chosen_ad,impressions = impressions,clicks = clicks)
}ad_data <- do.call(rbind, lapply(1:n_days, generate_data))
head(ad_data)# 多臂老虎机算法(Epsilon-Greedy)
run_bandit <- function(data, epsilon = 0.1) {total_rewards <- c(A = 0, B = 0, C = 0)total_trials <- c(A = 0, B = 0, C = 0)choices <- character(n_days)for (day in 1:n_days) {day_data <- subset(data, day == day)if (nrow(day_data) == 0) nextif (runif(1) < epsilon) {chosen_ad <- sample(day_data$ad_version, 1)  # 从当天实际广告中随机选} else {ctr <- ifelse(total_trials > 0, total_rewards / total_trials, 0)chosen_ad <- names(which.max(ctr))}# 只取第一个匹配项(避免多行问题)ad_data <- subset(day_data, ad_version == chosen_ad)[1, ]if (!is.na(ad_data$ad_version)) {total_rewards[chosen_ad] <- total_rewards[chosen_ad] + ad_data$clickstotal_trials[chosen_ad] <- total_trials[chosen_ad] + ad_data$impressionschoices[day] <- chosen_ad}}prop.table(table(choices[choices != ""]))
}result <- run_bandit(ad_data)
print(paste("最终选择比例:", round(result * 100, 1), "%"))

输出:

[1] "最终选择比例: 24 %" "最终选择比例: 76 %"

结果显示,在25天的模拟中,多臂老虎机算法最终分配了24%的流量给某个广告版本(可能是A或B),76%给另一个版本,符合原理的表现,同时24%的数据给另一个方案则保留了可能万一真的忽略了潜在方案的可能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85582.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功耗高?加密弱?爱普特APT32F1023H8S6单片机 2μA待机+AES硬件加密破局

爱普特APT32F1023H8S6单片机深度解析 1. 产品定位 APT32F1023H8S6 是爱普特半导体&#xff08;APT&#xff09;推出的 32位高性能单片机&#xff0c;基于 ARM Cortex-M0内核&#xff0c;主打 高集成度、低功耗、高性价比&#xff0c;面向消费电子、工业控制和物联网领域。 2. …

【MFC】绘制自定义控件-显示图片(支持放大操作)

目录 一、CDC类&#xff08;二级缓存&#xff09;二、计算视口三、放大操作代码中初始化操作&#xff08;方便以后cv&#xff09; 一、CDC类&#xff08;二级缓存&#xff09; CDC类是设备上下文的核心类&#xff0c;它的作用是抽象化对图形输出设备&#xff08;像屏幕、打印机…

在Proteus新工程中放置基本元器件

视频教程&#xff1a; [最详细]Proteus新建第一个工程与快捷键设置 操作步骤 1选择这个黄色的三角&#xff0c;然后点击旁边的P,开始找元件。 2点开P后&#xff0c;呈现如下图界面&#xff0c;我们在Keyword栏中&#xff0c;输入stm32&#xff0c;然后他会自动出现对应的元件&…

PRUD币推动健康数据资产化,开启Web3隐私金融新时代

在全球健康科技与数据主权浪潮下&#xff0c;PRUD币&#xff08;Prudential Utility & Data Token&#xff09;正成为Web3健康金融领域中的重要通证。项目通过链上身份绑定、健康行为证明、隐私计算与NFT机制&#xff0c;为用户打造了“健康数据资产化”的创新路径&#xf…

Mac 安装 finalshell

1.下载 地址&#xff1a;FinalShell官网 第一个进入选择对应的 mac 版本下载。 下一步下一步完成安装。 2.链接虚拟机&#xff0c;点击图示文件夹 点击新建链接&#xff0c;新建 SSH 链接 3.去 vmware 中查询 Linux 系统的 IP,使用 ip addr 命令或者 ifconfig 命令皆可。 ip…

Javaweb - 2 HTML

目录 HTML 入门 1. HTML & CSS & JavaScript 的作用 2. 什么是 HTML 3. 什么是超文本 4. 什么是标记语言 5. HTML 基本结构 6. HTML 概念词汇解释 7. HTML 的一些语法规则 8. 开发工具 VsCode 安装插件&#xff1a; 常见设置&#xff1a; HTML 常见标签 …

CWGAN-GP 增强型 CAE 在非 IID 数据集中用于 5G-NR 干扰检测

抽象 在不断扩大的 5G-NR 无线蜂窝网络领域中&#xff0c;无线干扰攻击作为安全攻击普遍存在&#xff0c;损害了接收信号的质量。我们通过将加性高斯白噪声 &#xff08;AWGN&#xff09; 合并到真实世界的同相和正交 &#xff08;I/Q&#xff09; OFDM 数据集中来模拟干扰环境…

JavaEE-Spring-Web-Mvc

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为"Spring MVC". Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲Serv…

Linux从入门到入门

系统教程学习类 Ubuntu 从入门到精通 系统页面/基本操作类 Ubuntu20.04终端固定终端到左边的导航栏_ubuntu20.04设置菜单固定-CSDN博客Ubuntu 20.04 系统5分钟后老是自动锁屏_修改锁屏时间-CSDN博客 命令类 拷贝&#xff1a;将 下载 文件夹里的.sh文件 复制到opt目录下 sudo cp…

AI自动生成Git提交信息-git AI Commit

在现代软件开发中&#xff0c;编写清晰且一致的Git提交信息对于维护项目历史和促进团队协作至关重要。然而&#xff0c;为每次变更手动撰写描述性提交信息可能耗时&#xff0c;尤其是处理复杂差异或大型项目时。AI Commit 是一个利用AI分析Git差异并生成符合Conventional Commi…

【三大前端语言之一】样式:CSS详解

【三大前端语言之一】样式&#xff1a;CSS详解 在了解完HTML的有关知识后&#xff0c;我们应该知道&#xff0c;一个网页光有框架还不行&#xff0c;必须还得有装饰它的样式。就好比房子的结构搭好了&#xff0c;但如果没有油漆、没有窗帘、没有家具&#xff0c;就无法真正展现…

Spring AI 聊天记忆功能实战(一):从接口设计到生产实践

Spring AI 聊天记忆功能实战&#xff08;一&#xff09;&#xff1a;从接口设计到生产实践 在构建AI对话应用时&#xff0c;聊天记忆管理及存储是实现连贯上下文交互的关键组件。而大模型&#xff08;LLM&#xff09;本质上是无状态的&#xff0c;这意味着它们不会保留历史交互…

Element Plus 对话框 el-dialog 和 抽屉 el-drawer 的使用注意项(使用 div 包裹)

总结&#xff1a;使用 div 包裹&#xff01;&#xff01;&#xff01; 详细说明&#xff1a; 对话框 el-dialog 或 抽屉 el-drawer 样式的设置说明&#xff1a; 要想有效设置 el-dialog 或 el-drawer 的样式&#xff0c;需确保 el-dialog 或 el-drawer 的上层不是template&am…

【python】简单演示 gateway、service、client的工作原理

gateway 看起来主要是做协议转换的A gateway is a network node that acts as an entrance and exit point, connecting two networks that use different protocols. It allows data to flow between these networks, essentially acting as a translator between different c…

数据仓库面试题合集⑥

实时指标体系设计 + Flink 优化实战:面试高频问题 + 项目答题模板 面试中不仅会问“你做过实时处理吗?”,更会追问:“实时指标体系是怎么搭建的?”、“你们的 Flink 稳定性怎么保证?” 本篇聚焦实时指标体系设计与 Flink 优化场景,帮你答出架构设计力,也答出调优实战感…

Vue + AbortController 请求取消弹窗 hook 封装

背景 实际业务开发场景中&#xff0c;往往存在有些大数据请求的需求&#xff0c;一旦请求发起加载遮罩后用户就无法操作了&#xff0c;直接尬住&#xff0c;所以提供一个支持取消查询的功能还是很有必要的&#xff0c;为了在全业务接口都能使用封装一个hook。 ✋为什么要用 A…

数据结构相关

1 问题 如何辨析数据对象和数据结构&#xff1f;如何设计多种储存结构以及他们特性有什么&#xff1f;内存条和硬盘的区别&#xff1f; 2 方法 明晰俩者的定义数据对象是性质相同的有限个数据元素的集合&#xff0c;他是数据的一个子集。数据结构是指所涉及的数据元素的集合以及…

MacOS内存管理-删除冗余系统数据System Data

文章目录 一、问题复现二、解决思路三、解决流程四、附录 一、问题复现 以题主的的 Mac 为例&#xff0c;我们可以看到System Data所占数据高达77.08GB&#xff0c;远远超出系统所占内存 二、解决思路 占据大量空间的是分散在系统中各个位置Cache数据&#xff1b; 其中容量最…

纯视觉SOTA!华科小米推出ReCogDrive:结合VLM和强化学习的端到端自动驾驶框架

摘要 端到端自动驾驶的研究目前越来越火热&#xff0c;现有方法通过视觉语言模型&#xff08;VLM&#xff09;来解决其在长尾场景中性能降低的问题&#xff0c;但是仍然存在一些局限性。本文提出了ReCogDrive&#xff0c;它将VLM与基于扩散的轨迹规划器相结合&#xff0c;并且采…

MySQL慢SQL优化全攻略:从诊断到调优

目录 慢SQL日志分析与诊断 开启慢查询日志 慢查询日志分析工具 慢SQL优化策略 1. 避免SELECT * 查询 2. 创建高效索引 索引选择原则 索引使用注意事项 3. 使用EXPLAIN分析执行计划 4. 优化排序操作 5. 解决深分页问题 6. 避免全表扫描 7. 优化JOIN操作 8. 合理使用…