行业新闻
现在位置: 首页 > 行业新闻 > 正文

微信究竟怎么设计的抢微信红包?

时间:2021-4-04 作者:微信 分享到:
按照正常的套路,抢微信红包最简单的办法不就是把微信红包的总钱数随机分给几个人么……但是微信偏不这么搞,就是一定要让第一个人抽到的钱只能在0.01元到20元之间。
 
 
 
 
  
  对于5个人抢50块微信红包而言,20元是个什么数?
  
  在一篇《微信红包的架构设计简介》的文章中提到这可能是“平均值的2倍”(也就是说,每个能抢到的钱最多是当前剩余金额的平均值的2倍)
  
  虽然不明白微信为什么要搞这套规则,但是我们不妨拿数据检验一下这个规则对不对!(以下为理论推导,文科生可快进)
  
  (1)检验第一个人抢到的金额是否服从均匀分布
  
  简化:抢微信红包问题本身是(¥0.01,¥0.02,…)的离散分布,在此为检验均匀分布,将其作为连续分布近似处理。
  
  首先对每个人作为首抢时的数据分析,进行Kolmogorov-Smirnov检验,利用累积分布函数检验第一个人抽到的金额是否服从均匀分布。假设检验均通过,得到类似“毕导第一个抢时,毕导抢到的金额确定是均匀分布”的结论。
  
  (2)检验是否有人品因素的干扰
  
  看五人分别作为首抢时是否有个人因素导致抢到金额有分布上的差异,进行Anderson-Darling k-样本检验,发现其实没有。所以抢微信红包次数足够多的前提下,不存在脸帝光环。
  
  (3)抢到的金额是多少到多少的均匀分布?
  
  最小值肯定是0了,因为实际中已经知道有人不管微信红包金额多大都只能抢到1分钱。
  
  根据统计推断的点估计理论中的极大似然估计知道,参数的极大似然估计是最大值。我们的210组抢微信红包数据中,第一个人最大就抢到过19.88元。
  
  但是极大似然估计往往低估了,采用贝叶斯估计的方法。先验分布选共轭的帕累托分布,后验均值是mN/(N-1)=210/(210-1)*19.88=19.975。
  
  基本可以在统计学意义上断定,均匀分布的右端点是20。
  
  (4)后面抢的人也服从0.01~剩余均值2倍的均匀分布吗?
  
  根据第一个人的均匀分布可以递推出第二个人的分布密度函数,进一步用类似方法检验第二个人抢的金额是否符合这个密度函数。检验同样通过,第二个人的金额服从0.01~剩余均值2倍的均匀分布。当然从算法的简洁性上来说,微信也不太可能给第一个抢和后抢设置不同的算法规则。因此我们有一定的理由相信微信红包是按这个规则设计的。
  
  至此基本可以给出微信设计的抢微信红包规则了:
  
  每个人能抢到的金额服从0.01到2倍剩余均值之间的均匀分布。
  
  我们5个人抢50块:
  
  第一个人最多能抢到2*50/5=20元,比如他抢了5元,此时剩下45元。
  
  第二个人最多能抢到2*45/4=22.5元,比如他抢了12元,此时剩下33元。
  
  第三个人最多能抢到2*33/3=22元,比如他抢了17元,此时剩下16元。
  
  第四个人最多能抢到2*16/2=16元,他和第五个人分这16元。
  
  下面要考虑的问题是:这种规则产生的微信红包,是否会导致先抢后抢均值相等,而后抢的方差更大?(以下是一大段的理论推导,文科生可快进)
  
  将问题抽象为n个人抢一个S元的微信红包
  
  证毕,在微信红包的“0.01~2倍剩余均值均匀分布”算法下,先抢后抢的均值相同,越往后抢方差越大。最后两个人同分布。