专栏名称: 大数据挖掘DT数据分析
实战数据资源提供。数据实力派社区,手把手带你玩各种数据分析,涵盖数据分析工具使用,数据挖掘算法原理与案例,机器学习,R语言,Python编程,爬虫。如需发布广告请联系: hai299014
目录
相关文章推荐
InfoTech  ·  DeepSeek更新了! ·  2 天前  
人工智能与大数据技术  ·  AI编程新王Claude ... ·  2 天前  
51好读  ›  专栏  ›  大数据挖掘DT数据分析

绝对公平?用数据分析破解北京机动车摇号的秘密

大数据挖掘DT数据分析  · 公众号  · 大数据  · 2017-02-05 17:48

正文

请到「今天看啥」查看全文


那么,那些摇到号的人,总共摇了多少次呢?下面这张图回答你:

有接近九万人第一次就摇到号了,还有190人摇了整整51次才拿到号,这个曲线非常地光滑,几个凸起点正好是调整中签率的门限,非常符合数学的美感。


有14201人,51次摇号没有一次成功。真正的幸运儿是这些人:在最近的这一期,以1/1000的概率第一次抽签就拿到了号,一共90人。


摇号程序是否公平?

作为程序员,被激发了昂扬的斗志,我们来验证一下摇号程序是否公平。

通过使用自己开发的 Hawk爬虫程序 (见备注),采集了从2011年到2016年51期每期的摇号池列表和随机种子。同时,我还下载了它的摇号程序,用于分析其摇号算法。程序使用C#编写,沙漠君破解它的源代码简直不要太容易。


为了能让不懂程序的读者也能理解,我用尽量简明的语言描述其摇号方法:假设有5人摇号,每个人都有唯一的ID,1-5,用户2,4有两倍中签率,用户3有3倍中签率,那么摇号池排列如下:

  • 第一轮,把所有人都按次序排列,即上面的序号1-5;

  • 第二轮,把所有中签率大于等于2倍的按次序排列,即上面的6-8

  • 第三轮,把大于等于三倍的按次序排列,上面只有9

现要求从池中随机抽取三个序号。计算机能通过一个种子,可以生成一串看似随机的伪随机序列。在一般程序中,种子通常是当前运行的时间。因每次运行时间不同,所以结果也不一同。


而摇号程序有趣的地方就在这里, 种子是事先提供好的一串6位数字,一旦你知道它,那么你在摇号前就能预测哪些人被抽中。 每个人的中签倍率和ID都是确定的,因此分析6位的随机数种子是如何产生的,成了解决问题的关键。


6位随机种子是如何产生的?

研究首都之窗上用于公示随机数的2013年某期的视频。

公证人员事先从市民中选出12位代表人。主持人在鱼缸中随机抽出6个球,每个球都是一个市民代表人的号码。之后,6个代表人会依次敲击键盘,随机产生出0-9的随机数作为随机数种子。有趣的地方就在这里!!


主持人说,请每一位代表 出号码,我一帧帧地分析了视频,从市民代表在键盘上的操作位置来猜测,点击的多半是是回车键,但代表按键盘都是背对摄影机的。你可以简单理解为,每按一次回车,电脑产生出一个新的0-9的数字,总计6个。


网站提供了随机产生摇号号码的程序,却没有提供随机产生六位种子的程序。 这个随机数种子本身,会不会事先保存,一定能保证随机吗? 。看下面这张图:







请到「今天看啥」查看全文