抽奖概率有哪些算法?(说明两种常见的抽奖概率的算法)

qinzhiqiang 12-19 15:59 6,870次浏览

积分转盘抽奖很常见,那么如何合理设计抽奖次数、每次抽奖消耗积分达到运营目的?

一、背景

大家在各类产品中很常见积分转盘抽奖,比如天猫积分抽奖等、常见的积分抽奖都是奖品价值大小不等,中奖概率不等。

二、随机概率抽奖算法

抽奖主要有以下几种做法,我们不考虑纯前端控制的方法。采用客户端+服务端方式,这是比较科学的。

以下说明两种常见的抽奖概率的算法:

(1)随机抽奖概率算法设计

奖项数组是一个二维数组,记录本次抽奖的奖项信息:

  1. 假设产品有n项、分别是:平板电脑、数码相机、音箱设备、4G优盘.、10积分、下次没准就能中哦。
  2. id表示中奖等级,prize表示奖品,v表示中奖权重,v必须为整数,v可以为0意味着该奖项抽中的几率是0。
  3. 假设数组中v的总和为Sv(基数越大越能体现概率的准确性),那么每个奖品中奖概率就是v/Sv=(v1+v2+…+Am)(假设总和为100,平板电脑的中奖概率为1,中奖概率为百分之一,如果总和为100,中奖概率为万分之一)。
  4. 每次前端请求,后台循环奖项设置数组,通过概率计算获取抽奖的奖项,输出数据给前端页面 。

经典的概率算法:

预先设置一个数组,假设数组为:array(100,200,300,400)。

开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。

这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。

这个算法简单,而且效率非常高。

(2)根据概率和剩余奖品数量来分配一个空间,再在这个空间中取随机数,判断随机数落在哪个区块方法获得抽奖结果

  1. 设置总的概率区间;
  2. 存储每个奖品新的概率区间;
  3. 遍历每个奖品,设置概率区间,总的概率区间为每个概率区间的总和;
  4. 每个概率区间为奖品概率乘以1000(把三位小数转换为整),再乘以剩余奖品数量,获取总的概率区间中的随机数;
  5. 判断取到的随机数在哪个奖品的概率区间中。

eg.有5个奖品,分别是:苹果、香蕉、橙子、葡萄、柚子。

中奖机率如下:苹果:10%;香蕉:5%;橙子:60%;葡萄:10%;柚子:15%。

根据奖品个数和中奖机率定义一个奖品概率数组,总和为100,生成区间数组【0,10,15,75,85,100】,定义一个随机数,随机数落入哪个区间,就中哪个奖品。

三、等概率抽奖具体案例

因为之前这个项目RD没有给后台设置奖品时加概率的配置,所以整个抽奖体系只能靠控制奖品项、控制库存数量来控制抽奖结果,而且运营了一段数据,根据运营数据分析做出了一些调整,所以等概率中奖会说明的详细一些。

(1)抽奖页面的原型设计

(2)设置不同积分值

项目上线后,运营上线了积分可兑换的奖品,不同产品对应不同积分值兑换,设置了转盘可中奖的不同积分值。

但上线两周后,运营发现数据不是自己想要的,虽然拉新促活的目的达到了,用户抽奖参与度也很高,但因为每天设置的抽奖次数过多,每次抽奖消耗的积分过少,每个用户每日中奖的积分数量增长过高,奖品兑换率过高。

于是有了以下思考:应该设置用户每日抽奖几次、每次抽奖消耗多少积分才能合理达到运营想要效果。

(3)在此我们假设所有的奖项都是积分数值

讨论的前提是当前项目中每个奖品的中奖概率相等的情况,设奖品有m项、每项积分数分别为A1、A2、…、Am。

每日可抽奖次数为n,每次抽奖消耗的积分为a,根据数学知识我们知道抽奖次数样本足够大时,抽奖几率应该趋近于相等。所以每轮抽奖(n次为一轮)可获得的积分数:Sn=(A1+A2+…+Am)-n*a

【所有奖品抽到一次获得的总和-抽奖n次消耗的积分数】

显然易见:若想用户抽奖积分为负增长,只需Sn<0即可。若想用户抽奖积分为正增长,则只需Sn>0即可当每天可抽奖n次时,每天可获得的积分和平均值=Sn*n/m。

活动的最终目的还是促活、吸引更多的人来参与活动兑换奖品。那么假设兑换的奖品所需积分数为Y,想要用户兑换一个奖品的日活天数为d,使Y/d=(A1+A2+…+Am)*n/m即可。

【每个奖品需要的分数/想要用户获得的天数=用户每天可获得积分数量】

Y可根据奖品的平均积分数或最小积分数来计算,以此达到运营拉新促活的目的。

四、总结

以上是最近手头一个项目的经验及相关思考,积分转盘抽奖虽然常见,但是真正做起来需要考虑的点也很多,比如为了灵活运营,抽奖次数和消耗的积分后台可做成可配等等。

每一个看似常见的功能都要自己亲自去设计,去跟进开发测试,才会有新的理解和收获。

  • 暂无推荐