关于年会抢红包游戏的一个思考
1. 游戏介绍
0x1:游戏规则
该游戏名叫红包接龙,规则如下:
年会会场内所有人都通过钉钉群的方式参与该游戏,会场人数一般为200~300人(大部分能时候是超过红包最大拆分份数):
1. 由老板发出第一个种子红包,金额 b = 500,红包分成100份,每份金额是随机的,红包发到钉钉群后,大家可以由两种选择:抢 or 不抢; 2. 如果选择不抢,则本轮无损失也没有收益。 3. 如果选择了抢,还需要拼手速,因为大部分时候选择抢的同学个数依然大于红包最大拆分份数; 4. 所有红包拆分份数都被抢完之后,由本轮抢的最大金额的同学发下轮的红包,每轮的红包金额需要在之前的基础上增加200; 5. 游戏循环进行,直到达到5000元上限结束;
0x2:游戏策略分析
1. 伯努利实验抽象建模
先抛开影响是否能抢到的网速问题,每次抢红包只有两种结果:
p=0.99:不是抢到最大的那份红包; p=0.01:抢到最大的那份红包;
按照伯努利实验的三准则,这个游戏可以抽象为伯努利实验。因此我们可以二项分布或者泊松分布来对是否抢到那份最大红包进行数学建模。
但是问题没有这么简单,玩家还需要思考一个最重要的问题,这个游戏有”前景“吗?我们知道,赌博是一个”没有前景“的游戏,这是从数学期望的角度分析得到的。
2. 基于数学期望分析游戏的损失风险
从收益的角度来看,单次红包游戏的收益期望为:
(抢到非最大那份红包的概率 * 收益 - 抢到最大那份红包的概率 * 损失 )* 本轮的红包金额 = (99 / 100 * 1 / 100 - 1 / 100)* (500 + 200n)= 1 / 10000 * (500 + 200n)
因为红包是被分成100份的,因此收益要 * 1/100;同时,随着轮数的增大,越到后面,n越多,本轮的红包金额就越多。
从上述公式可以看到,从期望角度来看,玩的越多,损失的就越多。
但是!!有一点要注意,就是函数的导数趋势是很低的,我们将公式在图像中表示:
换句话说,这个公式主要受到 1/10000 的影响,后面的乘积因子受到了压制。再换一个通俗的说法就是,玩1次和玩100次,最终的损失期望在绝对数值上不会差很多(0.07 ~ 2.05),尽管翻了100倍。
所以,从期望的角度看,多玩几轮损失也还好,当然不能无限扩大n次数,毕竟从期望上看,玩的越多,亏的就越多,当满足大数定理的时候,亏就成为必然的了。
3. 基于几何分布的角度分析游戏的损失风险
从上个小节分析数学期望的过程中,我们其实发现这个游戏隐藏了一个很大的策略前提,在这场游戏中,只要抽中一次最大的红包份,基本上整场游戏就是亏本了,即一次失败,就前功尽弃。
所以,我们要分析的是,玩的游戏轮数和首次出现负结果的概率的关系。显然,几何分布是最适合对这个场景进行数学建模的工具。
几何分布(Geometric distribution)是离散型概率分布。它定义为:在n次伯努利试验中,试验k次才得到第一次成功的机率。详细地说,是:前k-1次皆失败,第k次成功的概率。
这里我们定义n为参与游戏的次数,成功概率定义为抽中最大红包的概率。
p = 1/100:出现负结果,即抽中最大红包; k=随机变量,表示参与游戏的次数;
P(X = k)= ,k=1,2,3...N.
这个函数是一个单调递减的函数,最大值是当k=1时,P(x=1)= 0.01,随着x的增加,概率逐渐减小。
通俗地说就是,随着你玩的次数k增多,”玩了k次才碰到前功尽弃的最大红包的概率是逐渐下降的“,玩的次数越多,危险也就越大,玩的次数越少,危险越小,最小的危险就是只玩1次,风险为1%。
4. 基于泊松分布的角度分析游戏的收益风险
前两小节分析了游戏的风险,接下来来分析下游戏的收益前景。
我们将问题转化为泊松分布的框架内进行思考和计算:
1. n:游戏的次数; 2. p=99/100:盈利的概率; 3. λ = np = 0.99n:泊松分布参数;
从上图可以看到,n越大,λ也就越大,整体泊松分布的均值中心就越大,收益的整体期望也就越大。
所以从这个角度来说,单纯看抢到红包的收益,肯定是玩的次数越多,收益越多。
0x3:从极值角度得到一个理论最优策略
如果我们将收益函数和损失函数整合起来,得到一个最终的成果函数,对其求极值,会发现最优点是k=1的时候,因为越往后玩,损失的整体风险是不断提高的。
也就说,只玩一次就收手!!
这可以看成是一个理论最优值,可惜这不符合我们的”赌徒心理“,而且在实际生活中,我们也没必要这么保守,毕竟红包也没几个钱,就算真的抽中了要发,损失也还好,这种情况下,人们常常倾向于冒一定的风险,去获得更高的收益。但问题是具体要玩多少次呢?
0x4:画出泊松分布累计概率分布图
画出泊松分布的概率分布图:
# -*- coding:utf-8 -*-
from scipy.stats import poisson
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
N = 20
p = 0.99
# mu = N * p
data = poisson.rvs(mu=p*N, loc=0, size=N)
print "Mean: %f" % np.mean(data)
print "SD: %f" % np.std(data, ddof=1)
plt.figure()
plt.hist(data, bins=1, normed=True, histtype='stepfilled')
plt.xlim(0, N * 1)
plt.xlabel("Rounds")
plt.title("Rea Packge Game")
plt.show()
从图中可以看出,13次左右的时候(其实也就是靠近期望均值中心的次数),我们已经能够获得”大部分“的收益了,再往后的收益成本比就会越来越低。而且,次数越多,风险也在不断提高。
因此,选择参与13次游戏,是一个比较明智的选择。
同时,我们也可以计算一下此时的损失风险:
1. P(参与了13次,一次都没有抽中最大红包)= 0.99^13 = 0.877521022999:概率还是相比比较高的; 2. E(损失)= 1 / 10000 * (500 + 200 * 13)= 0.31;
2. 红包游戏该怎么玩呢?
经过上面的分析,读者朋友可能要蒙了,这个游戏看起来是一个风险与收益并存的游戏,那我们到底应该采取什么样的策略呢?是尽量多的参与抢,还是尽量少的参与抢呢?
首先一点笔者要强调,世界上的所有事情都这样的,没有非黑即白的分界线,我们所要做的是,在黑白之间的灰色地带,找到一个最佳的平衡点,在尽可能少的损失情况下,得到尽可能多的收益。另一方面,每个人对风险的承受能力都是不同的,有的人可以接受高风险高回报,有的人是低风险低回报。
贝叶斯推断要做的就是将所有未知因素柔和起来,得出一个风险与收益的综合概率分布函数,接下来就是推断的环节,至于如何进行决策,就看使用者自己的策略和选择了。
0x1:最终的策略
这里笔者给出几点建设性建议:
1. 首先,根据大老板给出的种子金额以及封顶金额进行一个估算,得到 N 的最大值,例如本文的20; 2. 然后,计算【0,N】之间的95%正态区间的负区间,也就是左区间的整数MIN值,例如本文的13; 3. 将13作为我们整晚游戏的参与上限,同时建立止损机制,如果在13轮内都没有抽中最大红包,则继续,但是最多只参与13次,如果在这之前不小心抽总了一次最大红包,立即停止,及时止损;
笔者需要强调的是,上述的策略是一种偏向保守的策略,即:在尽可能多获得收益情况下,尽可能少损失。
在实际的生活中,我们可以继续提高风险,来获得更高的收益,这取决于你对风险的承受能力,其实贝叶斯推断的核心思想也就在这里,损失的函数的计算不只是纯数学上的计算,对风险的承受能力也应该被考虑在损失函数的计算之中。
关于这个思想的讨论,读者朋友可以参阅我另一篇博文。
that's it!!