/projects/name-analytics

What's in a Name?

Type a first name, choose female or male, and estimate the probability mass over birth years using the Social Security national baby names data.

Estimate a birth cohort

Exact first-name matches, separated by sex, from SSA national counts.

Sex

Enter a name and choose female or male.

In plain English, it answers two questions: is this name mostly old, new, making a comeback, or going out of style? And how popular is it compared with other names in any given birth year?

Two handy use-cases. First, if you get an email, resume, or other note from someone, it can give you a sense of their likely age based on their first name. For example, Harold reads older and Logan reads younger. Second, if you're hunting for baby names, it helps separate names that are on the rise from names that are already hot, declining, or outdated. For example, Wells is on the rise; Harvey is an old name making a comeback; Aiden was hot but has peaked and is going out of style, much like Cody peaked in the early 90s.

How it works

Intuitively, the birth-year chart tells the age story of a name. A name concentrated far in the past reads older; one concentrated recently reads newer; one with both an older wave and a newer rise is making a comeback; and one with a recent peak that is fading is going out of style. The popularity chart tells a different story: how common the name was compared with other names given in the same years.

The Social Security Administration publishes national baby-name counts by first name, sex, and birth year. For a selected name and sex, this app filters the data to those records and normalizes the counts across birth years.

The calculation is done separately after choosing female or male. Holding sex fixed without loss of generality, write Y for birth year, N for first name, and Cn,y for the SSA count for name n and year y. Bayes rule gives:

P(Y=yN=n)=P(N=nY=y)P(Y=y)tP(N=nY=t)P(Y=t)=P(N=n,Y=y)tP(N=n,Y=t)Cn,y/C,tCn,t/C,=Cn,ytCn,t. \begin{aligned} P(Y = y \mid N = n) &= \frac{P(N = n \mid Y = y)P(Y = y)} {\sum_t P(N = n \mid Y = t)P(Y = t)} \\ &= \frac{P(N = n, Y = y)} {\sum_t P(N = n, Y = t)} \\ &\approx \frac{C_{n,y} / C_{\cdot,\cdot}} {\sum_t C_{n,t} / C_{\cdot,\cdot}} \\ &= \frac{C_{n,y}}{\sum_t C_{n,t}}. \end{aligned}

The joint probabilities are estimated by the corresponding SSA name-year count divided by the total count in the fixed-sex data. That common denominator cancels, so the app only needs the selected name's counts by year.

The chart is therefore a birth-cohort distribution. It is not adjusted for mortality, immigration, or emigration, so it should not be read as the exact age distribution of living people with that name today.

The popularity chart uses a birth-weighted percentile. In a given year, a percentile of 75% means that 75% of babies in the selected sex group had names that were as rare or rarer, while 25% had more common names. This is weighted by births rather than by distinct name labels, so very rare names do not dominate the scale.

SSA suppresses low-count records for privacy. Names with fewer than five births in a year/sex cell can be missing, and very rare names may have no usable data.

Tech note: the app runs entirely client-side. It downloads a compressed SSA CSV, loads it into DuckDB-Wasm in a web worker, and runs the estimates in your browser, so there is no server-side database or API behind the tool.

Data source: Baby Names from Social Security Card Applications - National Data .

Keyboard

gh
go to home
gw
go to writing
gb
go to bits
gp
go to projects
j/k
move focus down/up in list
o
open focused item
t
toggle light/dark theme
?
show this help