73,049 dates through a numerology rule: mostly mod 9, and 33's rarity depends on when you reduce
The usual headline is that 33 is the rarest Life Path, about half a percent. Half a percent of what, reduced in which order?
Change the order, to another convention inside the same master-preserving school, and 33 turns up 2,186 times instead of 393. Same rule, same dates, 5.6x.
Life Path is a digit-reduction rule mapping a birth date to a small integer. It predicts nothing. But it is a deterministic function over a finite domain, which means you never have to sample it. You can just run the whole thing. We did: every date from 1900-01-01 to 2099-12-31, exactly 73,049 dates.
The other result is duller and it goes first, because it disarms most of what gets written about this distribution. Six of the twelve values land within four dates of each other, near one ninth apiece. That is not a discovery. That is mod 9.
Disclosure: we are not a neutral party. Znakai builds the numerology apps at numeroai.me and ai-numerolog.ru, which have a paid tier. We publish the arithmetic openly because the arithmetic is the only part of numerology that can be checked.
The rule "Reduce" means repeatedly replacing n with the sum of its digits until a single digit remains - with one exception: 11, 22, and 33 ("master numbers") are kept whole at every step. That exception is the source of all the structure below. This is the Pythagorean school; schools that reduce 11/22/33 down to 2/4/6 produce a different table entirely.
The code is the spec:
from collections import Counter
from datetime import date, timedelta
MASTERS = {11, 22, 33}
def reduce_digits(n: int) -> int:
"""Digit-sum n down to a single digit, but keep 11, 22, 33 whole."""
while n > 9 and n not in MASTERS:
n = sum(int(c) for c in str(n))
return n
def life_path(d: date) -> int:
day = reduce_digits(d.day)
month = reduce_digits(d.month)
year = reduce_digits(sum(int(c) for c in str(d.year)))
return reduce_digits(day + month + year)
counts: Counter[int] = Counter()
d, end = date(1900, 1, 1), date(2099, 12, 31)
while d <= end:
counts[life_path(d)] += 1
d += timedelta(days=1)
The distribution
The full census over all 73,049 dates:
| Life Path | Dates | Share |
|---|---|---|
| 1 | 8,114 | 11.11% |
| 2 | 3,650 | 5.00% |
| 3 | 8,116 | 11.11% |
| 4 | 5,656 | 7.74% |
| 5 | 8,118 | 11.11% |
| 6 | 7,725 | 10.58% |
| 7 | 8,117 | 11.11% |
| 8 | 8,117 | 11.11% |
| 9 | 8,116 | 11.11% |
| 11 | 4,464 | 6.11% |
| 22 | 2,463 | 3.37% |
| 33 | 393 | 0.54% |
The most screenshot-able line in that table - 33 is the rarest outcome at 0.54% - comes with two asterisks. That figure is a share of calendar dates, not of people: real birthdays are not uniform over the calendar. And it is a fact about one particular reduction order, not about numerology as such - compute the same school's rule in a different order and 33's share more than quintuples.
The flat part is forced
Digit-summing preserves a number's value mod 9, and the master-number exception doesn't change the residue either: 11 โก 2, 22 โก 4, 33 โก 6 (mod 9). So the whole pipeline collapses, mod 9, to life_path(d) โก (day + month + year) mod 9, verified across all 73,049 dates with zero exceptions.
Residues spread nearly evenly over the 200-year window, so each class collects close to one ninth of the calendar. The six values with no master in their residue class (1, 3, 5, 7, 8, 9) simply keep their ninth: 8,114 to 8,118 dates each. A perfect tie is impossible to begin with: 73,049 = 9 ร 8,116 + 5, so the residues cannot split evenly. But the remainder alone would allow a spread of one; the actual spread of four comes from the calendar itself being slightly uneven across residues: month lengths and the leap cycle. The nine classes hold 8,114 / 8,114 / 8,116 / 8,116 / 8,117 / 8,117 / 8,118 / 8,118 / 8,119 dates.
The residue classes of 2, 4, and 6 do have masters competing, and the masters create no mass - they relabel it. Add each pair back and the ninth reappears: 2 + 11 = 8,114; 4 + 22 = 8,119; 6 + 33 = 8,118. As a group the masters cover 7,320 dates, 10.02% of the calendar. Life Path 2, at 5.00%, is rarer than the master number 11 (6.11%) that is supposed to be the special one. 11 wins more than half of their shared residue class. And within this convention, 33 at 0.54% is 20.65 times rarer than the flat values. "An order of magnitude" undersells it.
How rare 33 is depends on when you reduce
Our own earlier draft of this article had this defect: it printed 0.54% as the rarity of 33, flat, with no order attached. We caught it in review, re-deriving every number in the draft from a fresh computation - which is the argument for doing that.
Two conventions circulate inside the same master-preserving Pythagorean school:
- Components first (what the table above uses): reduce day, month, and year separately, then add the three parts and reduce.
- All digits at once: sum all eight digits of YYYYMMDD, then reduce.
They sound interchangeable. Over the same 73,049 dates:
| Life Path | Components first | All digits at once |
|---|---|---|
| 2 | 3,650 | 3,302 |
| 4 | 5,656 | 4,337 |
| 6 | 7,725 | 5,932 |
| 11 | 4,464 | 4,812 |
| 22 | 2,463 | 3,782 |
| 33 | 393 (0.54%) | 2,186 (2.99%) |
The counts for 1, 3, 5, 7, 8, and 9 are identical under both orders; mod 9 fixes each date's residue class, and those classes have no master to defect to. But inside the master-sharing classes the split moves hard, and 33 is the extreme case: 393 versus 2,186, a 5.56x difference in "rarity" from the same rule over the same dates. The two orders disagree on 10,374 of the 73,049 dates, 14.2%.
So: if you cite a rarity figure for a master number, name the reduction order, or the figure means little. The dataset ships both orders in life-path-by-reduction-order.csv, and the row-level table carries both columns per date.
Where the 393 dates of 33 come from
Under the components-first order, every one of the 393 dates falls into exactly one of three families. The families are provably disjoint: satisfying any two of the conditions already commits 33 or 44 before the third component is added, and the third is at least 1.
- A 22nd in a surge year gives 22 + 22 + month.
- A 22nd in November gives 22 + 11 + year.
- November in a surge year gives 11 + 22 + day.
None of those totals reduces back to 33, so the counts add with nothing double-counted:
- 180 fall on the 22nd of a month - a day that is itself the master 22.
- 189 fall in a "surge year" - a year whose digit-sum reduces to 22.
- 24 fall in November, the month that is itself a master (11).
The surge years are 1939, 1948, 1957, 1966, 1975, 1984, 1993 - each holding exactly 27 dates, 7 ร 27 = 189; no single year is special. All seven sit in the 20th century, necessarily: a 20xx year digit-sums to at most 20, short of 22. That skew makes 33's share a property of the window you choose - 0.775% of 20th-century dates but only 0.301% of 21st-century ones.
The November family splits evenly: of its 24 dates, 12 are November 11 and 12 are November 29 (day 29 โ 2 + 9 โ 11). November 11 carries a Life Path of 33 in exactly twelve years of the window: 1901, 1910, and every ninth year from 2009 through 2090.
What this dataset is not
This counts dates, not people. Real birthdays clump - seasonality, weekday effects from scheduled deliveries - so the share of living humans carrying each number is some other figure, and we do not have it. And obviously the meanings pinned to 11 or 33 are folklore. What is published here is the arithmetic of a reduction rule. A tidy distribution is evidence of mod 9. That is all it is evidence of.
Reproduce it yourself
Everything is published under CC BY 4.0 at vk0dev/life-path-number-distribution: the row-level table (life-path-dates.csv, one row per date with date, day_reduced, month_reduced, year_reduced, parts_sum, life_path, life_path_all_digits), the aggregate table, the reduction-order comparison, a Frictionless Data datapackage.json, and a zero-dependency reproduce.py.
That last file is the point. It recomputes all 73,049 dates from scratch and asserts, against the shipped files: every row of the row-level table across all seven columns; the aggregate counts and shares; the counts under both reduction orders and the 14.2% disagreement rate; the 2 + 11, 4 + 22, and 6 + 33 pair sums; the 10.02% master-group share; the full decomposition of the 393 including disjointness and the surge-year list; the 27-per-surge-year and November 12 + 12 splits; the two century shares; the 20.65x and 5.56x ratios; and the mod-9 identity on every date. Every figure quoted in this article is covered by one of those assertions; if any were wrong, the script would exit non-zero. A claim we cannot assert is a claim we do not print.
The same files are archived with a permanent DOI at 10.5281/zenodo.21570149, and mirrored on Hugging Face and Kaggle if you would rather load it there. The canonical write-up lives at numeroai.me/articles/life-path-number-distribution. If you spot an off-by-one or a nicer decomposition of the 393: issues and PRs are open.
Comments
No comments yet. Start the discussion.