R语言:集卡活动概率测算模拟

news/2024/10/30 23:14:13/

背景:以支付宝集五福活动为代表的集卡类营销活动背后,每张卡出现的概率测算是非常重要的,假设我们可以预估有多少人参与活动以及大致每人能抽多少次,且限定一共有多少人能够集齐,在这些限定条件下,每张卡出现的概率应该如何计算呢?

R语言中提供的抽样函数和循环语句可以帮助我们实现这个计算过程

一、基本语句学习

1、循环语句:for、while

*for循环和while循环的区别,while循环的启示和终止状态是符合或不符合条件,for循环是到次数就停。

#for循环
for(i in 1:10) print("hello")##变量var在序列seq中,就一直重复执行statement#while循环
i <- 10
while (i>0){print("hello");i <- i-1}##重复执行语句,直到条件不为真

对比r 和python的循环语句基本上是一样的思路

 三、Python 循环_格勒王的博客-CSDN博客循环语句汇总https://blog.csdn.net/weixin_47198715/article/details/129188876

2、抽样函数:sample

参数介绍

  • sample(待抽取序列,抽取数量,replace=TRUE,prob=c(每个样本出现的概率)
  • replace=TRUE|FALSE有放回|无放回抽样

示例

x <- sample(c(1,2,3,4,5,6,7,8),3,replace=TRUE)#在1-8个数字中有放回的抽3个数,每个数字出现的概率默认一致
x
#结果
[1] 8 7 1x <- sample(c(1,2,3,4,5,6,7,8),3,replace=TRUE,prob=c(0.5,0.5,0,0,0,0,0,0))#在上面的例子中配置每个数字出现的概率
x
[1] 2 2 1

3、包含判断:%in%

B%in%A:判断B是否包含A

示例:

x <- sample(c(1,2,3,4,5,6,7,8),8,replace=TRUE)
x
[1] 2 7 6 3 1 1 1 6
c(1:4)
win<-c(1:4) %in% x
win
[1]  TRUE  TRUE  TRUE FALSE
sum(win)#sum(向量名称)向量中的值加总,如果是布尔值(true=1,false=0)
[1] 3

4、向量赋值

示例

prize <-c()##建立一个空向量
prize[1]=2##给第1个值赋值为2
prize

二、实操计算抽卡概率

问题:如何在已知预估参与用户和预估人均抽卡次数的情况下,限制集齐人数,反推每张卡的概率

一万个人,每人在1-8张卡片中有放回的随机抽取15张卡

每张卡的概率是:4张普通卡(概率16%),3张高级卡(概率10%),1张稀有卡(概率6%)

计算出有多少人集齐1-8张卡

步骤:

  • 循环抽卡次数10000次
for (i in 1:10000) {抽卡参数}
  • 在1-8中随机抽15次,有放回,把抽卡结果记录在向量x1里
x1<-sample(c(1,2,3,4,5,6,7,8),15,replace = TRUE,prob = c(0.16,0.16,0.16,0.16,0.1,0.1,0.1,0.06))
  • 判断1-8张卡的集合是否包含在抽卡结果里,即全部抽中
win<-c(1:8) %in% x1
  • 得到这1万个用户每个人分别抽中了几张卡(去重),并统计分布
prize[i]=sum(win)
table(prize)

完整代码

prize<-c()##建立一个空向量
for (i in 1:10000) {x1<-sample(c(1,2,3,4,5,6,7,8),15,replace = TRUE,prob = c(0.16,0.16,0.16,0.16,0.1,0.1,0.1,0.06))win<-c(1:8) %in% x1prize[i]=sum(win) #(等于8,集齐8张不同的卡)
}
table(prize)
##结果如下
prize3    4    5    6    7    8 1   71  749 3181 4258 1740 

优化上面的逻辑,为了让用户刚开始抽取的时候有成就感,前4次卡需要保证是不一样的,从第5次开始允许卡掉落重复,每张卡的概率是:4张普通卡(概率16%),3张高级卡(概率10%),1张稀有卡(概率6%)。计算出有多少人集齐1-8张卡

prize<-c()##建立一个空向量
for (i in 1:10000) {x1<-sample(c(1,2,3,4,5,6,7,8),11,replace = TRUE,prob = c(0.16,0.16,0.16,0.16,0.1,0.1,0.1,0.06))win<-c(1:4) %in% x1prize[i]=sum(win) 
}
table(prize)
##结果如下
prize1    2    3    4 31  788 4221 4960 
> 


http://www.ppmy.cn/news/133166.html

相关文章

浅谈高等学校能源监控管理体系建设

摘要&#xff1a;现代高校担当着人才培养&#xff0c;社会服务和文化传承与创新的光荣使命。高校低碳节能工作是加快建设“和谐社会”、“绿色校园”的重要举措 。当前高校以“数字化能源监测平台”为重心 &#xff0c;积极推动能源管理的转型 。该文总结高校能源监管平台建设的…

今天不讨论技术

-- 今天不讨论技术&#xff0c;写写更高尚的东西&#xff0c;什么是生活 &#xff0c;什么会影响人生&#xff0c;什么是人生意义&#xff0c;什么是爱情&#xff0c;什么是选择。 -- 入行这么多年&#xff0c;依稀记得当时在某个大城市因为写代码不太好&#xff0c;身为小白的…

Excel 电子表格运用技巧汇总

Excel电子表格运用技巧汇总 Leo 2005-4-2513:53 Excel XP的八则快速输入技巧  如果我们在用Excel XP处理庞大的数据信息时&#xff0c;不注意讲究技巧和方法的话&#xff0c;很可能会花费很大的精力。因此如何巧用Excel XP&#xff0c;来快速输入信息就成为各个Excel XP用户…

Moto Z6 手机 联通GSM卡上网设置, 使用技巧及疑难问题解决

本篇主要内容 一. Moto Z6 手机 联通GSM卡 上网设置二. 联通GPRS业务相关三. 联通活动四. UP新势力使用常识五.“新势力”相关使用规则六. 实用功能介绍七. 使用技巧及疑难问题解决 获取Motorola手机最新软件: http://direct.motorola.com/CHI/SoftwareUpdateSelect.asp?count…

[技术] 【技术支持】深度解剖S60内部资料,6600为例

S60资料大全之一诺基亚字符串计世网智能手机俱乐部2 _" F3 B; [& v. J% P- B7 i *#06#&#xff1a;显示IMEI码。  手机,智能手机,手机软件,手机游戏,铃声,主题,图片,电子书,手机报价,下载,智能手机测评,使用心得,N95,N73,N76,E61i3 Y* Y% B5 n% {" ^* M* H! U…

Excel操作大全

【一投行哥哥的Excel操作大全】 快捷键之在工作表中移动和滚动向上、下、左或右移动单元格箭头键 移动到当前数据区域的边缘&#xff1a;CTRL 箭头键 移动到行首&#xff1a;HOME 移动到工作表的开头&#xff1a;CTRLHOME 移动到工作表的最后一个单元格。&#xff1a;CTRL…

MTK总结(一)

1、短信的执行 在短信这边&#xff0c;与下层的消息交互都是通过action队列去做操作的&#xff0c;首先都会通过mmi_frm_sms_write_action(PsFuncPtrU16 callback, module_type mod_src, void *data, PsFuncPtr function)把要做的操作写进mmi_frm_sms_action队列里去&#xff…

MTK总结

1、短信的执行 在短信这边&#xff0c;与下层的消息交互都是通过action队列去做操作的&#xff0c;首先都会通过mmi_frm_sms_write_action(PsFuncPtrU16 callback, module_type mod_src, void *data, PsFuncPtr function)把要做的操作写进mmi_frm_sms_action队列里去&#xff0…