Probability of five children in the same class having the same given name On baby-naming forums, prospective parents repeat some version of their Fear of Jennifer all the time: "I don't want my child to be one of 5 in his class with his name." Thing is, no name comes even close to that sort of popularity any more, and even at the height of the Jennifer craze, you didn't get five of them in a class. I would like some sort of answer for these parents of just how unlikely such a coincidence of name repetition would be. 
Using the Social Security Administration's extensive baby-name data (https://www.ssa.gov/oact/babynames/limits.html), can someone tell me how to figure out the chances of an elementary school class in the U.S. having five children with the same name? (For simplicity, by "same name" I mean same spelling, and by "school class" I mean all the kids were born in the same year.) I'm not specifying a class size, but it should definitely be greater than 4. :-)
 A: All data can be found here.  Each value in the table represents the probability that given a 25-person sample from that location and birth year, 5 of them will share a name.
Method: I used the Binomial PDF on on each name to find the probability that any given 25-person class would have 5 people who shared a name:
n = class size
k = 5,6,...,n 
p_i = (# of name[i]'s) / (total # of kids)

$$P_n(5+\ kids\ share\ name) = \sum_{\forall\ names}\sum_{k=5}^n{n \choose k}p_i^k(1-p_i)^{n-k} $$
For example, if there are 4,000,000 total kids, and 21,393 Emily's, then the probability that there are 5 Emily's in any given class with 25 students is Binomial(25, 5, 0.0053) = 0.0000002.  Summing over all names does not give an exact answer, because by the Inclusion/Exclusion Principle, we must also account for the possibility of having multiple groups of 5 people who share names.  However, since these probabilities are for all practical purposes nearly zero, I've assumed them to be negligible, and thus $P(\bigcup A_i) \approx \sum P(A_i)$.
Update: As many people pointed out, there is considerable variance over time, and between states.  So I ran the same program, on a STATE BY STATE basis, and over time.  Here are the results (nation-wide probability is red, individual states are black):

Interestingly, Vermont (my home state) has been consistently one of the most likely places for this to happen for the past several decades. 
A: please see the following Python-script for Python2.
Answer is inspired by David C's answer.
My final answer would be, the probability of finding at least five Jacobs in one class, with Jacob being the most probable name according to the data from https://www.ssa.gov/oact/babynames/limits.html "National Data" from 2006.
The probability is calculated according to a binomial distribution with Jacob-Probability being the probability of success. 
import pandas as pd
from scipy.stats import binom

data = pd.read_csv(r"yob2006.txt", header=None, names=["Name", "Sex", "Count"])

# count of children in the dataset:
sumCount = data.Count.sum()

# do calculation for every name:
for i, row in data.iterrows():
    # relative counts of each name being interpreted as probabily of occurrence
    data.loc[i, "probability"] = data.loc[i, "Count"]/float(sumCount)

    # Probabilites being five or more children with that name in a class of size n=25,50 or 100
    data.loc[i, "atleast5_class25"] = 1 - binom.cdf(4,25,data.loc[i, "probability"])
    data.loc[i, "atleast5_class50"] = 1 - binom.cdf(4,50,data.loc[i, "probability"])
    data.loc[i, "atleast5_class100"] = 1 - binom.cdf(4,100,data.loc[i, "probability"])

maxP25 = data["atleast5_class25"].max()
maxP50 = data["atleast5_class50"].max()
maxP100 = data["atleast5_class100"].max()

print ("""Max. probability for at least five kids with same name out of 25: {:.2} for name {}"""
   .format(maxP25, data.loc[data.atleast5_class25==maxP25,"Name"].values[0]))
print
print ("""Max. probability for at least five kids with same name out of 50: {:.2} for name {}, of course."""
   .format(maxP50, data.loc[data.atleast5_class50==maxP50,"Name"].values[0]))
print
print ("""Max. probability for at least five kids with same name out of 100: {:.2} for name {}, of course."""
   .format(maxP100, data.loc[data.atleast5_class100==maxP100,"Name"].values[0]))

Max. probability for at least five 
kids with same name out of 25: 4.7e-07 for name Jacob
Max. probability for at least five
kids with same name out of 50: 1.6e-05 for name Jacob, of course.
Max. probability for at least five 
kids with same name out of 100: 0.00045 for name Jacob, of course.
By a factor of 10 same result as David C's. Thanks.
(My answer does not sum all the names, should may be discussed)
