数据分析入门经典问题:你两个朋友同一天过生日的概率有多大?

大数据 数据分析
假如把N个人分成一组,至少有两个人是同一天生日的概率是多少?现在来猜一猜:假设这一组有N=30个人。那么有两个人在同一天吃生日蛋糕的概率是多少呢?我们换个说法:你敢不敢用10美元赌里面有两个同月同日生的人?

 假如把N个人分成一组,至少有两个人是同一天生日的概率是多少?

现在来猜一猜:假设这一组有N=30个人。那么有两个人在同一天吃生日蛋糕的概率是多少呢?我们换个说法:你敢不敢用10美元赌里面有两个同月同日生的人?

 

我们会以这个例子收尾,但首先我们需要收集所有的元件(也就是下文标题部分),才能解开生日谜题。

基础中的基础

为了充分“卖弄学问”,我们就略去惹人白眼的引言部分:概率的数值在0和1 之间(如果喜欢的话,你还可以说它在0%到100%之间)。好的。现在你明白为什么“我1000%确定他们会迟到”一类句子会让数据猿急得跳脚。

分析概率的三种方式

人们在分析概率时,常用三种方法:

  • 基于事件的概率(包括列举事件,计算事件数量)
  • 基于频率的概率(包括用代表事物在平行宇宙中的收束方式的分布)
  • 主观概率(包括代表人对于可能发生情况的信念的分布,尤指通过赌注的方式……毕竟不空口说白话可以避免胡说八道)

假如你的统计课老师没有一字一句地强调基础要点,那笔者告诉你,课本将提到以下内容:

基于事件的概率

概率=[分子]/[分母]

前几章会从基于事件的概率分析方法开始。因为通过这种方法人们能很容易地就获取到基本信息,而且或许大部分人(你懂的)已经有这方面的直觉。举个例子:投掷一枚硬币背面朝上的概率是?1/2. 投掷骰子出现6点的概率是多少?1/6.为什么会这样?

分子:所考察的事件可能发生的次数

分母:任何(有关)事件发生的次数

就一枚硬币来说,分母即所有相关事件是正面朝上和背面朝上。这就是分母2的来源。很简单。

细数事件

要想处理基于事件的概率问题,我们首先需要列举出所有的事件并记录事件的数量。这也就是为什么教材很可能会不停地讲如何组合分析,直到你彻底看烦。组合分析能教你掌握计算(针对所求分子和分母的)事件数量的方法。

回顾在作业中出现无数遍的问题,无非是关于:“从100名候选人中选出19名委员有多少种方式?”(17310309456440种)或者是“一组4位数密码共有多少种组合可能?”(1000种)。

在基于事件的世界里,所有的时间群发生的概率相等,因而它们在算法中不受各个层的凌乱的调节器影响。在这个世界里,抛出去的每枚硬币的正反面朝上的概率相当,所有投掷的骰子出现的数字平衡,所有的卡牌都无需重排,所有的人的出生日期的分布均等。

对于生日问题,我们需要快速了解什么是计数:

“AND”要求对(x)计数进行吃乘积。 “OR”要求对(+)计数进行叠加。

你可以去查找证据……或者快速阅读这个例子,满足自己的求知欲:如果有2种素食套餐和3种肉食套餐可供我选择,那么一共有多少种选择呢?答案是2+3=5种可能。假如我确定会选择一个主餐,要从2份甜品之中选择一样,这种情况下会有多少种套餐组合呢?答案是共有5x2=10种。不信吗?你可以找几道菜,把所有组合一一写出来。

随机组合的套餐是素食的概率是多少?

分子= 2x2=4;;分母=10

答案=4/10=40%

超越事件

现在看了三章,但突然教材中有关组合分析的内容全部消失了。当你入门排列组合的时候,它们就销声匿迹了。与此同时,分布变得无处不在。发生了什么?

可以思考如下问题:“你需要至少等待十分钟才能上公交车的概率是多少?”这会是一个很难“数”出来的问题(到底需要多少秒呢?),计数在这里甚至会变得有些棘手,因为你不能用计数的方式分割时间这个连续的介质。更糟的是,有些公交车司机可能会根据公交车的延迟程度,考虑是否停下来抽烟休息。你怎么能列举这种情况?不可能做到的。也许计数在这里根本不适用…..

学习基于频率的概率定义时,将遇到这种说法:“如果上文事件在无限平行宇宙中发生(限定,或者假设这一事件受某些规则制约),有多少公交车会在超过十分钟以后到?”(平行宇宙?!难怪我们数据猿总是眼光清奇)

然后(通常是很久之后),当到达课本贝叶斯数据的主观概率定义章节时,你将可能根据你自己的感受建立分布。看见没有,在你被剥夺列举事件的能力后,剩下的是不是方法是不是很复杂?不过对于生日问题来说,假设所有366个生日出现的概率相同,我们还可以继续数数。

什么,你不喜欢我的假设?想开点吧,所有的统计数据都关乎假设——否则宇宙会陷入一片混乱。如果不喜欢我的假设,觉得我的方案不是你期待的,那就提出一套新的方案来。。我们可以随心所欲提出假设,数据也因此富有创造性。在这里我想不恰当地引用George Box的一句名言:“所有的解决方案都是错误的,但一旦某一个方案符合你一直以来的假设,那它就可能对你有用。”

没有称赞之意

解决生日问题的最后组件是补数,另一方面它也被称为NOT。

P(not A)= 1- P(A)

这个公式读作:“某一事件的概率(由于创造力有限,我们将其称为事件A)不发生的概率等于100%的概率减去该事件发生的概率。”

所以投掷骰子不出现点6的概率是多少呢?

答案是1-1/6=5/6

好的,这就是所有内容。现在准备解决生日问题了!

 

生日问题

问题是什么来着?

如果一组有N个人,至少出现两个人是同一天生日的概率是多少?

那就来搭建“乐高块”吧…..

生日问题的分母

一个人有多少种生日的可能呢,366种(上文提过)。

所以N=30时会有多少生日数量吗?

第一个人有366种可能,第二个人也有366种,第三个人也是366种……然后第N个人也是366种情况。把这N个366相乘就是结果了!

分母=366^ N,苍天好大一个数! N为30,结果就是一个76位数,比1000后面再跟24组“000” 的数还大(给事物命名不好玩吗?)

生日问题的分子

准备迎接令你晕头转向的部分吧。这里需要记录所有不同的可能,保证至少有两个人是同一天过生日。所以如果第一个人有366中选项,而第29个人有1个选项,因为需要和第一个人相符,但可能是第二个人或者第十七个人,抑或有三个人的生日在同一天,或者……不,试图将所有的可能选项记在脑海里会变得很乱。

……这就是为什么生日问题会成为一项很有趣的工程。在看诀窍之前需要绞尽脑汁(或者到网上跪求解题攻略。你是这样找到这条博文的吗?很好,我懂你了)。

解决生日问题的窍门

与其列举所有的两个以上的人在同一天生日的可能,不如将问题转化为一个更简单的切入角度:寻找问题对立面!

P(至少有两个人是同一天生日)=1-P(所有人都不是同一天生日)

所以我们只需要求以下问题的答案:“没有任何一个人与另一个人是同一天生日的概率是多少?”也就是说,所有人都不是同一天生日的概率是多少?

“所有人都不是同一天生日”的分母

答案仍然是366^ N。通过对问题的补数进行转化,我们将重点放到分子上,让分母保持不变。

“所有人都不是同一天生日”的分子

这就是神奇之处!

第一个人的生日有366种可能(贪婪的家伙)然而第二个人只有365种可能因为我们要求他们的生日不在同一天。如果第一个人的生日在10月8日,我们就把所有在10月8日过生日的人排除在外。这样每个样本中的成员的可能生日数量将越来越少。

所以366是第一个人的可能数量,而365是第一个人的可能数量而364是第三个人的可能数量……而(367-N)是第N个人的可能数量。

如果N 是30,将各个数相乘,见证奇迹!

366 x 365 x 364 x 363 x 362 x 361 x 360 x 359 x 358 x 357 x 356 x 355 x 354 x 353 x 352 x 351 x 350 x 349 x 348 x 347 x 346 x 345 x 344 x 343 x 342 x 341 x 340 x 339 x 338 x 337 = …

啊,又是一个76位数的数字。

但是,幸运的是,计算机会帮我们处理除法问题,如果操作得当的话。

也许这不是我们需要的

P(所有39个人的生日都不在同一天)=(366 x 365 x 364 x 363 x 362 x 361 x 360 x 359 x 358 x 357 x 356 x 355 x 354 x 353 x 352 x 351 x 350 x 349 x 348 x 347 x 346 x 345 x 344 x 343 x 342 x 341 x 340 x 339 x 338 x 337) / (366 ^ 30)

=0.3

最后,就是我们需要的数值!

P(30个人有人是同一天生日) = 1-0.3 =70%

在30个人的组中,有人是同一天的生日的概率是~70%。

我希望你没有赌10美元说,有人的生日在同一天的概率小于每个人的生日都不在同一天的概率……但是如果你真的赌了,我不反对把钱捐给维基百科。

赌错结果很可能是因为你低估了一组数据不重复的难度——如果你是在门口负责拦截所有与室内的人同一天生日的人的保镖,不久之后想进入房内的人就会失望。

这取决于你有多少个朋友……

我可以用两分钟,通过电脑上的R程序得出每一个N的概率。如果你好奇具体数值是什么(N等于23时概率为50%,N等于55时概率为99%),可以来体验我编写的代码串。可能不太好看,但绝对好用。无需下载,就可以在浏览器上运行。

  1. # Initialize settings for N = 1: 
  2. probability <- 0 
  3. numerator <- 366 
  4. denominator <- 366# Loops are terrible in R, let's make one anyways: 
  5. for (N in 2:80) { 
  6.   numerator <- numerator * (366 + 1 - N) 
  7.   denominator <- denominator * 366 
  8.   p <- 1 - (numerator / denominator) 
  9.   probability <- c(probability, p) 
  10. }# Look at the answer to 2 decimal places: 
  11. paste("For N =", 1:80, "prob is", round(probability, 2))# Plot! 
  12. plot(1:80, probability, xlab = "Group Size", ylab = "P(Shared birthdays)", type = "l", col = "red", main = "The Birthday Solution"

我们学到了什么?

除了一些基本概率知识(处理概率问题的不同方法,分子和分母的计算方法),以及计数原则(加法原则和乘法原则)以外,这篇文章的主旨是,为什么需要以特定顺序解决特定问题。

 

为什么在教材开始,计数是重中之重,而在后续内容中,计数会淡出我们的视野,留下愤愤不平的我们?结果貌似说明每一种方法都对应着一种目的,每一种事件发生的概率相等这一前提对于专业人员来说,过于浅显,无法消化……即使在生日问题上也是如此。当业余人士想象数据分析猿每一天都在干什么的时候,他们首先想到的是数牌和抛硬币,这不是很好玩吗?辟谣跑断腿啊!

生日问题之所以是数据分析入门的经典问题,是因为这个问题上所需的脑力刚刚好:数据分析员需要学习如何转化问题,以使转化后的问题更便于解题。采取简单粗暴的办法将难以计算,因此需要另辟蹊径。如果你选择了数据分析的生活,时刻准备迎接一系列抛掷硬币和转化的问题。

责任编辑:武晓燕 来源: 读芯术
相关推荐

2010-11-19 09:27:33

2018-11-20 10:58:19

CIOITIT人

2022-12-13 18:09:25

连接状态客户端

2021-01-27 05:17:27

数据分析指标

2023-11-02 11:55:37

工具网站开发

2024-11-26 14:45:29

2023-11-03 11:51:31

2018-11-20 14:24:46

数据分析数据库统计

2023-11-03 12:05:43

2015-05-27 14:07:36

2017-03-21 21:17:50

大数据数据互联网

2018-12-09 14:55:07

区块链加密货币比特币

2020-04-03 12:08:24

美股时间GMT

2009-06-25 09:10:25

很牛的程序员

2018-07-28 15:15:58

破产逆袭数据分析

2019-12-05 18:04:38

大数据技术算法

2021-02-07 21:59:39

Java回调机制

2012-05-16 11:47:40

Gmail邮件

2014-11-17 10:29:50

亚马逊云存储

2021-01-22 09:56:50

微信微信8.0移动应用
点赞
收藏

51CTO技术栈公众号