ArtaMatch · the deployed model · fourth edition · genderless · public leaderboard 0.64303

ArtaModel IV and the stack it sits in

The model that leads the public board is a stack of three members — a plain-plus-geography model and two ArtaModel IV constructions — combined by non-negative weights on their ranks, fitted per availability group, and scored in both orders of the pair so the answer is exactly symmetric. It runs in this page: enter two births and a start date below. Every piece is explained underneath, with what it turns out to read.

Try it — runs in your browser

Nothing leaves the page: the ephemeris, the three geography boosters and the ArtaModel stages load into Pyodide and are evaluated here. Births are cast at 09:00 local mean time at the birthplace (the fit used the zone clock; for the outer planets the model reads, the difference is under 0.01°). Dates may be day (1936-08-04), month (1936-08-00) or year (1936-00-00) precision — the start too: 1968-00-00 is "the year 1968", and 1 January is an ordinary day.

Partner 1
Partner 2
The relationship
Pyodide not started

Find the best matches — every capital, every birthday

Give one person's birth date and birthplace and the date the relationship would begin (today by default — the candidates' ages are counted from it), and the stack is evaluated for every day of birth in the range of people alive (18 to 100 years old at the start) in the capital of every country — about six million candidates — and the twenty highest are listed. It is the same model as above, run on its structure: the geography member depends on the candidate only through the birth year and the capital, the ArtaModel members only through the outer planets on the birth day (weekly ephemeris samples, interpolated; the capital's local hour shifts those bodies by under 0.006° and is ignored for the candidate). One entry per capital per year, so the list reads as twenty distinct matches. What it prefers is what the stack prefers — mostly where, then when — and the section below says why.

The person
The search

Find the best start day

For a pair, every day from a date (today by default) over a horizon is scored — the start day enters through the two ages, its weekday and month, and the outer planets of that day against each natal chart — and the twenty best options are listed: the best day of each month, ranked, so twenty consecutive Tuesdays count as one option, not twenty. Every calendar day is scored; "year only" is spelled YYYY-00-00. What the model prefers is, again, what it learned: later starts (older ages), certain weekdays, and the slow sky of the day.

Partner 1
Partner 2
The horizon

The stack

Three members, each even in the swap of the two partners:

memberwhat it readsheld out alone
GEO — plain + geographythe older and younger age at the start, their gap, the start year, the two birthplaces (older/younger), their great-circle distance, the order-free extremes of latitude and longitude, a same-place flag; three small gradient-boosted models averaged (larger ones overfit the era)0.6418
AM-G — ArtaModel IV, greedythe sidereal phase model below, boosted over split single-phasor fields, each stage's phasor chosen greedily0.6053
AM-F — ArtaModel IV, fixed cyclethe same construction with the phasors in a fixed cycle (a_uranus, t1/t2 Neptune, Pluto, Uranus) — the stable twin, the same model in every fold0.6186

Each member's score is turned into its rank among the rows it scores (a member that cannot speak for a pair casts no vote), and the ranks are combined with non-negative weights and a bias per availability group — group 0 when the wedding-sky clocks exist, 1 when only the synastry does, 2 when only the wedding sky is known — because the mix of groups in the training eras is not the mix in the test era. Non-negative weights make the stack monotone by construction: any subset of members is a feasible point of the full fit, so on the data the weights are fitted on the full pool can never lose to a subset. The weights were fitted on forward-chained out-of-fold scores (fit on every row before a cut, score the block after it; the test is the next era), recency-weighted, with a small ridge:

groupGEOAM-GAM-FbiasOOF rows
0 — wedding-sky clocks exist (t1/t2 Uranus)2.0580.1890.468+0.06710,620
1 — synastry only (a Uranus)1.5480.3350.000-0.5344,698
2 — wedding sky only1.7510.0000.426+0.26038,116

Both orders of the pair are scored and the logits averaged, so the probability is exactly the same whichever partner is entered first — the data itself carries every pair in both orders.

Symmetry and robustness, measured

Every member is even by construction — the geography model reads the older and younger partner with the tie between equal ages broken by coordinates, the phase model reads |Δθ|, the training rows carry every pair in both orders, and the train-side out-of-fold scores the stacker learns from are pair-averaged like the test-side ones. Then the whole thing is audited on 1,200 held-out pairs (robustness_audit_iv.py):

perturbationmean |Δ probability|AUC on the sample
swap the two partners0e+00 (max)
none (clean)0.7218
birthplaces ±0.5°0.00460.7187
birthplaces ±2°0.01570.7162
birth dates ±1 day0.00010.7216
birth dates ±7 days0.00020.7215
birth hour anywhere0.00000.7218

The geography member is fitted on the rows plus a copy with every birthplace jittered by ±0.3° (about 30 km), so no split hangs on a coordinate's third decimal; the phase members read the outer planets only, so the unknown birth hour — the thing no record carries — changes nothing. (The AUC in this table is on a sample the deployed members were fitted on; the honest held-out number is the 0.6456 above.)

What the stack scores — honestly

public leaderboard
0.64303
artamatch-genderless, 4,614 rows
held out, all test pairs
0.6456
7,631 pairs, both orders
the plain ages alone
0.6114
older, younger, |gap|, start year
what geography added
+0.030
held out; +0.013 on the board

Read plainly: the gain over the plain ages comes from where the two were born — a fact about people and eras, not about the sky. The astrology inside the stack (ArtaModel IV, below) reads the same two ages through the outer planets; every other tradition tried (twenty-one tropical traditions including numerology, fourteen Jyotiṣa and Zǐ Wēi Dǒu Shù families) scored 0.50–0.59 alone and added nothing beside geography. We say so because we measured it; the study is ARTAMODEL.md.

ArtaModel IV, term by term

The astrological member, a genderless sidereal phase model: two births and birthplaces — in no order — and the date it began, one logit out. Every term is written out below, with the weight the fitted model gave it — and with what the model turns out to be reading.

The formula

y = | b + Σᵢ  aᵢ ·e^{i|θ1ᵢ − θ2ᵢ|}     the absolute synastry angle          (even under the swap)
             + t1ᵢ·e^{i|θtᵢ − θ1ᵢ|}     the wedding sky to partner 1's chart
             + t2ᵢ·e^{i|θtᵢ − θ2ᵢ|}     the wedding sky to partner 2's chart
             + n1ᵢ·e^{i θ1ᵢ}            partner 1's own natal longitude
             + n2ᵢ·e^{i θ2ᵢ}            partner 2's own natal longitude
             + tnᵢ·e^{i θtᵢ} |²         the wedding sky itself

θ are sidereal longitudes (Lahiri, through Kerykeion and the Swiss Ephemeris) of fourteen bodies — Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, Rāhu, Ketu, Chiron, Lilith. Genderless: no sex is read; "partner 1" and "partner 2" are whichever order you give — every phase difference enters as its wrapped absolute value |Δθ| in [0°, 180°], so each term is an even function of the swap, the training data carries every pair in both orders, and the scorer averages the two orders so the answer is exactly the same either way. Every long-term relationship Wikidata records is in the data — marriages of every kind, unmarried partnerships, business and sporting partnerships. Nobody's birth time is recorded, so every birth is cast at 09:00 local time at the birthplace; the start at 12:00 UT. A term exists only when both of its phases exist — an unknown start day drops the wedding-sky terms, an unknown birth drops that partner's terms, and a missing phase contributes exactly zero.

The six terms

termphasormeaningbodies the deployed model uses
aa·ei|θ1−θ2|the absolute synastry angle between the two natal charts — even under the swap1/14
t1t1·ei|θt−θ1|the wedding sky to partner 1's natal longitude1/14
t2t2·ei|θt−θ2|the wedding sky to partner 2's natal longitude1/14
n1n1·eiθ1partner 1's own natal longitude0/14
n2n2·eiθ2partner 2's own natal longitude0/14
tntn·eiθtthe wedding-day longitude itself0/14

What the fitted model chose

The deployed model is gradient boosting over split single-sum fields: each stage is one field |b + w·e|² on one phasor, chosen at that stage as the phasor that best explains the current residual — so all 84 phasors of all six terms compete every time — and added to the logit. Fitted on all the data, 35,894 rows with both natal charts (every pair in both orders), for 8 stages. Of the 84 phasors offered it chose 3:

phasorbodytermstagesswing in the logitpeak at φmeaning
a_uranusUranusa·ei|θ1−θ2|40.151176°|θ1 − θ2|: the absolute synastry angle between the two natal charts (even under swap), for Uranus
t2_neptuneNeptunet2·ei|θt−θ2|20.099195°|θt − θ2|: the wedding sky to partner 2's natal longitude, for Neptune
t1_neptuneNeptunet1·ei|θt−θ1|20.081331°|θt − θ1|: the wedding sky to partner 1's natal longitude, for Neptune

Read plainly: a_uranus is the absolute gap between the two births measured by Uranus (4.3° a year); t1_neptune and t2_neptune are each partner's age at the start measured by Neptune (2.2° a year) — chosen as a pair, as a genderless model should. Never chosen at any stage: any natal phase (n1, n2), any wedding-sky phase (tn), or any of the fast bodies.

What it scores — honestly

ArtaModel IV, train-only fit, held out
0.6250
AUC on 7,631 pairs born after 1900 (both orders); public board 0.6101
the plain columns
0.6114
the two ages at the start, |gap|, the start year; public board 0.6000
ages held flat
0.5645
AUC within 3-year cells of (older age, younger age)
plain + ArtaModel IV
0.6286
equal-weight rank average; public board 0.6144

What ArtaModel IV reads is the two partners' ages at the start and the absolute gap between their births, through the outer planets as clocks — the same finding as every edition before it, now without a sex in the model: it is exactly invariant to the ayanāṁśa (a constant offset cancels in a phase difference), to the birth hour and to the birthplace, and its gain over the plain ages is small and mostly the ages read twice. The age-cell-matched figure is what is left once the two ages are held flat. We say so because we measured it — the study is ARTAMODEL.md.

Use it

The deployed weights, the scorer (predict(dob_1, lat, lon, dob_2, lat, lon, start) → probability + the stage-by-stage account of both orders; symmetric by construction), the code and the study: huggingface.co/artaquest/artamodel. The data: artamatch-genderless; the competition: artamatch-genderless. CC0.