생일 역설을 2 명 이상으로 확대


29

전통적인 생일 역설에서 문제는 " 명 그룹의 둘 이상의 사람들 이 생일을 공유 할 가능성은 무엇인가 "입니다. 나는 이것의 확장 인 문제에 갇혀있다.n

두 사람이 생일을 공유 할 확률을 아는 대신, 명 이상의 사람들이 생일을 공유 할 확률을 알기 위해 질문을 확장해야합니다 . 를 사용하면 두 사람이 생일을 공유 하지 않고 에서 빼는 확률을 계산 하여이 작업을 수행 할 수 있지만이 논리를 더 많은 수의 로 확장 할 수는 없다고 생각 합니다.x = 2 1 xxx=21x

이것을 더 복잡하게 만들려면 (수백만)과 (수천)에 대해 매우 많은 수의 솔루션이 필요합니다 .xnx


1
나는 그것이 생물 정보학 문제라고 생각합니다
csgillespie

3
실제로 생물 정보학 문제이지만 생일 역설과 같은 개념으로 요약되었으므로 관련이없는 세부 사항을 저장한다고 생각했습니다!
Simon Andrews

4
일반적으로 나는 당신에게 동의하지만,이 경우에 당신이 요구하는 것을 수행하는 생물 전도체 패키지가 이미있을 수 있기 때문에 세부 사항이 중요 할 수 있습니다.
csgillespie

정말로 알고 싶다면 큰 시퀀스 세트 내에서 서브 시퀀스의 주어진 수준의 강화 가능성을 정확하게 추정하려고하는 패턴 찾기 문제입니다. 따라서 관련된 수를 가진 일련의 하위 시퀀스가 ​​있으며 관찰 한 하위 시퀀스 수와 이론적으로 관찰 가능한 시퀀스 수를 알고 있습니다. 10,000 번의 관측치 중 10 번의 특정 순서를 본다면 이것이 우연히 일어날 가능성을 알아야합니다.
Simon Andrews

거의 8 년 후에이 문제에 대한 답변을 stats.stackexchange.com/questions/333471에 게시했습니다 . 코드는 대형에 대한 작업이하지 않는 가에 차 시간이 필요하기 때문에, 비록 N . n,n
whuber

답변:


17

이것은 계산 문제 : 거기에 의 가능한 할당 에 생일 n 개의 사람들이. 그 중 q ( k ; n , b )k 명 이상이 생일을 공유하지 않지만 실제로는 k 명이 공유하는 생일이 하나 이상인 과제의 수로 지정하십시오 . 우리가 찾는 확률 은 적절한 k 값에 대해 q ( k ; n , b ) 를 더하고 결과에 b - n을 곱하여 구할 수 있습니다 .bnbnq(k;n,b)kkq(k;n,b)kbn

이 계수는 수백 미만 의 값에 대해 정확하게 찾을 수 있습니다 . 그러나 그들은 어떤 간단한 공식도 따르지 않을 것입니다 : 우리는 생일을 할당 할 수있는 방법의 패턴을 고려해야합니다 . 나는 일반적인 데모를 제공하는 대신 이것을 설명 할 것이다. n = 4라고 하자 (이것은 가장 흥미로운 흥미로운 상황이다) 가능성은 다음과 같습니다.nn=4

  • 각 사람마다 독특한 생일이 있습니다. 코드는 {4}입니다.
  • 정확히 두 사람이 생일을 공유합니다. 코드는 {2,1}입니다.
  • 두 사람은 생일이 하나 있고 다른 두 사람은 다른 생일이 있습니다. 코드는 {0,2}입니다.
  • 세 사람이 생일을 공유합니다. 코드는 {1,0,1}입니다.
  • 4 명이 생일을 공유합니다. 코드는 {0,0,0,1}입니다.

일반적으로 코드 k 번째 요소가 정확히 k 명의 사람들 이 공유하는 별개의 생년월일을 규정하는 수의 튜플입니다 . 따라서 특히{a[1],a[2],}kthk

1a[1]+2a[2]+...+ka[k]+=n.

이 간단한 경우에도 생일 당 최대 두 사람이 달성 할 수있는 두 가지 방법이 있습니다. 하나는 코드 이고 다른 하나는 코드 { 2 , 1 } 입니다.{0,2}{2,1}

지정된 코드에 해당하는 생일 할당 횟수를 직접 계산할 수 있습니다. 이 숫자는 세 항의 곱입니다. 하나는 다항식 계수입니다. 이것은 분할 방식의 숫자 카운트 에 명 [ 1 ] 그룹 1 , [ 2 ] 의 그룹 (2) 등을. 그룹의 순서는 중요하지 않기 때문에, 우리는이 다항 계수로 분할 할 [ 1 ] ! [ 2 ] ! na[1]1a[2]2a[1]!a[2]!; 그 역수는 두 번째 용어입니다. 마지막으로, 그룹을 구성하고 생일마다 할당 하십시오. 첫 번째 그룹 에는 후보가 있고 두 번째 그룹에는 b - 1 이 있습니다. 이 값을 곱하면 세 번째 항이됩니다. "인수 곱" b ( a [ 1 ] + a [ 2 ] + )와 같습니다. 여기서 b ( m )b ( b - 1 ) ( b m + 1을 의미합니다.bb1b(a[1]+a[2]+)b(m) .b(b1)(bm+1)

패턴의 카운트 관련된 명백한 및 아주 간단한 재귀있다 패턴의 카운트에 { [ 1 ] , ... , [ K - 1 ] } . 이를 통해 n의 적당한 값에 대한 카운트를 빠르게 계산할 수 있습니다 . 구체적 [ k는 ] 나타낸다 [ K를 ] 정확하게 공유 생년월일 K{a[1],,a[k]}{a[1],,a[k1]}na[k]a[k]k사람들 각자. 이 후 [ K가 ] 그룹 K의 사람들로부터 인출 된 N 개의 수행 될 수있는 사람들, X 별개의 방법 (예를 들어), 그 패턴을 실현하는 방법의 수를 계산하기 위해 여전히 { [ 1 ] , ... , [ K - 1 ] } , 나머지 사람들 중. 이것을 x로 곱하면 재귀를 제공합니다.a[k]knx{a[1],,a[k1]}x

대한 닫힌 형식 공식이 의심 되는데 , 최대 항이 k 와 같은 n 의 모든 파티션에 대한 개수를 합산하여 얻습니다 . 몇 가지 예를 들어 보겠습니다.q(k;n,b)nk

(다섯 가지 생일) 및 N = 4 (사명) 우리 수득b=5n=4

q(1)=q(1;4,5)=120q(2)=360+60=420q(3)=80q(4)=5.

Whence, for example, the chance that three or more people out of four share the same "birthday" (out of 5 possible dates) equals (80+5)/625=0.136.

다른 예로, n = 23을 사용하십시오 . 가장 작은 k에 대한 q ( k ; 23 , 365 ) 의 값은 다음과 같습니다 (6 시그 만).b=365n=23q(k;23,365)k

k=1:0.49270k=2:0.494592k=3:0.0125308k=4:0.000172844k=5:1.80449E6k=6:1.48722E8k=7:9.92255E11k=8:5.45195E13.

Using this technique, we can readily compute that there is about a 50% chance of (at least) a three-way birthday collision among 87 people, a 50% chance of a four-way collision among 187, and a 50% chance of a five-way collision among 310 people. That last calculation starts taking a few seconds (in Mathematica, anyway) because the number of partitions to consider starts getting large. For substantially larger n we need an approximation.

One approximation is obtained by means of the Poisson distribution with expectation n/b, because we can view a birthday assignment as arising from b almost (but not quite) independent Poisson variables each with expectation n/b: the variable for any given possible birthday describes how many of the n people have that birthday. The distribution of the maximum is therefore approximately F(k)b where F is the Poisson CDF. This is not a rigorous argument, so let's do a little testing. The approximation for n=23, b=365 gives

k=1:0.498783k=2:0.496803k=3:0.014187k=4:0.000225115.

By comparing with the preceding you can see that the relative probabilities can be poor when they are small, but the absolute probabilities are reasonably well approximated to about 0.5%. Testing with a wide range of n and b suggests the approximation is usually about this good.

To wrap up, let's consider the original question: take n=10,000 (the number of observations) and b=1000000 (the number of possible "structures," approximately). The approximate distribution for the maximum number of "shared birthdays" is

k=1:0k=2:0.8475+k=3:0.1520+k=4:0.0004+k>4:<1E6.

(This is a fast calculation.) Clearly, observing one structure 10 times out of 10,000 would be highly significant. Because n and b are both large, I expect the approximation to work quite well here.

Incidentally, as Shane intimated, simulations can provide useful checks. A Mathematica simulation is created with a function like

simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];

which is then iterated and summarized, as in this example which runs 10,000 iterations of the n=10000, b=1000000 case:

Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm

Its output is

2 8503

3 1493

4 4

These frequencies closely agree with those predicted by the Poisson approximation.


What a fantastic answer, thank you very much @whuber.
JKnight

"There is an obvious and fairly simple recursion" — Namely?
Kodiologist

1
@Kodiologist I inserted a brief description of the idea.
whuber

+1 but where in the original question did you see that n=10000 and b=1mln? The OP looks like it is asking about n=1mln and k=10000, with b unspecified (presumably b=365). Not that it matters at this point :)
amoeba says Reinstate Monica

1
@amoeba After all this time (six years, 1600 answers, and closely reading tens of thousands of posts) I cannot recall, but most likely I misinterpreted the last line. In my defense, note that if we read it literally the answer is immediate (upon applying a version of the Pigeonhole Principle): it is certain that among n=millions of people there will be at least one birthday that is shared among at least x=thousands of them!
whuber

2

It is always possible to solve this problem with a monte-carlo solution, although that's far from the most efficient. Here's a simple example of the 2 person problem in R (from a presentation I gave last year; I used this as an example of inefficient code), which could be easily adjusted to account for more than 2:

birthday.paradox <- function(n.people, n.trials) {
    matches <- 0
    for (trial in 1:n.trials) {
        birthdays <- cbind(as.matrix(1:365), rep(0, 365))
        for (person in 1:n.people) {
            day <- sample(1:365, 1, replace = TRUE)
            if (birthdays[birthdays[, 1] == day, 2] == 1) {
                matches <- matches + 1
                break
            }
            birthdays[birthdays[, 1] == day, 2] <- 1
        }
        birthdays <- NULL
    }
    print(paste("Probability of birthday matches = ", matches/n.trials))
}

I am not sure if the multiple types solution will work here.

I think that generalisation still only works for 2 or more people sharing a birthday - just that you can have different sub-classes of people.
Simon Andrews

1

This is an attempt at a general solution. There may be some mistakes so use with caution!

First some notation:

P(x,n) be the probability that x or more people share a birthday among n people,

P(y|n) be the probability that exactly y people share a birthday among n people.

Notes:

  1. Abuse of notation as P(.) is being used in two different ways.

  2. By definition y cannot take the value of 1 as it does not make any sense and y = 0 can be interpreted to mean that no one shares a common birthday.

Then the required probability is given by:

P(x,n)=1P(0|n)P(2|n)P(3|n)....P(x1|n)

Now,

P(y|n)=(ny)(365365)y k=1k=ny(1k365)

Here is the logic: You need the probability that exactly y people share a birthday.

Step 1: You can pick y people in (ny) ways.

Step 2: Since they share a birthday it can be any of the 365 days in a year. So, we basically have 365 choices which gives us (365365)y.

Step 3: The remaining ny people should not share a birthday with the first y people or with each other. This reasoning gives us k=1k=ny(1k365).

You can check that for x = 2 the above collapses to the standard birthday paradox solution.


Will this solution suffer from the curse of dimensionality? If instead of n=365, n=10^6 is this solution still feasible?
csgillespie

Some approximations may have to be used to deal with high dimensions. Perhaps, use Stirling's approximation for factorials in the binomial coefficient. To deal with the product terms you could take logs and compute the sums instead of the products and then take the anti-log of the sum.

There are also several other forms of approximations possible using for example the Taylor series expansion for the exponential function. See the wiki page for these approximations: en.wikipedia.org/wiki/Birthday_problem#Approximations

Suppose y=2, n=4, and there are just two birthdays. Your formula, adapted by replacing 365 by 2, seems to say the probability that exactly 2 people share a birthday is Comb(4,2)*(2/2)^2*(1-1/2)*(1-2/2) = 0. (In fact, it's easy to see--by brute force enumeration if you like--that the probabilities that 2, 3, or 4 people share a "birthday" are 6/16, 8/16, and 2/16, respectively.) Indeed, whenever n-y >= 365, your formula yields 0, whereas as n gets large and y is fixed the probability should increase to a non-zero maximum before n reaches 365*y and then decrease, but never down to 0.
whuber

Why you are replacing 365 by n? The probability that 2 people share a birthday is computed as: 1 - Prob(they have unique birthday). Prob(that they have unique birthday) = (364/365). The logic is as follows: Pick a person. This person can have any day of the 365 days as a birthday. The second person can then only have a birthday on one of the remaining 364 days. Thus, the prob that they have a unique birthday is 364/365. I am not sure how you are calculating 6/16.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.