aadya-m1
The full model. 256M parameters, open weights, and the best accuracy among open-source models for forecasting the next period.
At a glance
Built for laptops, desktops and servers you control.
256M
parameters
open weights
~1 GB
weights in fp32
about 512 MB in fp16
1 to 120
days, a probability for each
the full forecast distribution
Apache-2.0
licence
code and weights
Use it for
- Apps and tools that show when a period is likely to start, with honest uncertainty
- Research and education on probabilistic forecasting of cycle timing
- Fine-tuning, when you have far more real data than we did
Not for
- Diagnosis, treatment decisions or screening
- Contraception, conception planning or “safe days”
- Anything that sends a person’s cycle data to a server
Accuracy
First on all three public benchmarks.
Error is CRPS on AadyaBench. Lower is better. The usual tracker method is a rolling median of recent cycles.
aadya-m1 against the usual tracker method
Mean CRPS on each track.
Simulated users, all cases539 users
Hard case: life-stage mix (S4)simulated
Real data: all public users (pooled)364 users
Real data: Creighton (cross-fitted)251 users
Real data: Marquette113 users
Mid-cycle on real data, no marker (mcPHASES)110 cycles
With an ovulation-test marker (mcPHASES)110 cycles, 41 people
20% of period logs missed (simulated)simulated
No history, Marquette (cold start)113 users
Usual tracker method (rolling median; 28-day for cold start)aadya-m1Error aadya-m1 removes
View the numbers
| Track | Data | Usual | aadya-m1 | Lower by | Against the strongest comparison |
|---|---|---|---|---|---|
| Simulated users, all cases | 539 users | 3.70 | 2.92 | 21% | slightly ahead of the best competitor (LSTM) |
| Hard case: life-stage mix (S4) | simulated | 6.83 | 4.78 | 30% | better than the Bayes reference |
| Real data: all public users (pooled) | 364 users | 2.35 | 1.93 | 18% | slightly ahead of the Bayes reference (small but clear) |
| Real data: Creighton (cross-fitted) | 251 users | 2.54 | 2.09 | 17.6% | slightly ahead of the Bayes reference (small but clear) |
| Real data: Marquette | 113 users | 1.95 | 1.57 | 19.4% | on par with the Bayes reference |
| Mid-cycle on real data, no marker (mcPHASES) | 110 cycles | 3.49 | 2.43 | 30.2% | Poisson-with-skips slightly ahead (2.34 vs 2.43; significance not tested) |
| With an ovulation-test marker (mcPHASES) | 110 cycles, 41 people | 3.49 | 1.70 | 51.2% | better than the best competitor (Poisson-with-skips) |
| 20% of period logs missed (simulated) | simulated | 12.45 | 9.55 | 23.3% | on par with the Bayes reference |
| No history, Marquette (cold start) | 113 users | 2.13 | 2.18 | -2.3% | on par with the 28-day baseline |
The lead over the classical Bayes reference is small on real users, about 1% of the error. Full tables and intervals are on Benchmarks.
Against the strongest comparison
Mean CRPS on the three public boards. Lower is better.
Zoomed: the axis starts at 1.400, not 0.
Simulated: aadya-m1
2.925
Simulated: Bayes ref.
3.026
Creighton: aadya-m1
2.091
Creighton: Bayes ref.
2.119
Marquette: aadya-m1
1.572 · level
Marquette: Bayes ref.
1.580
1.4001.9002.4002.9003.400
View the numbers
| Method | Value | 95% interval |
|---|---|---|
| Simulated: aadya-m1 | 2.925 | - |
| Simulated: Bayes ref. | 3.026 | - |
| Creighton: aadya-m1 | 2.091 | - |
| Creighton: Bayes ref. | 2.119 | - |
| Marquette: aadya-m1 | 1.572 | - |
| Marquette: Bayes ref. | 1.580 | - |
Simulated users stand in for real people. The two real boards are Creighton (251 users, cross-fitted) and Marquette (113 users).
Inputs and outputs
Four inputs in, one distribution out.
| Input | Meaning |
|---|---|
| Past cycle lengths | Days, oldest first. May be empty. |
| Days since last period | 0 right after a period starts, then increasing. |
| Age group | Optional: 18-24, 25-34, 35-44, 45+. |
| Ovulation-test day | Optional and experimental. |
| Output | 120 probabilities, one per cycle length from 1 to 120 days. |
# Python 3.10+. Weights are downloaded once, then everything runs offline.
pip install numpy scipy torch safetensors huggingface_hubOptional input
With an ovulation test, the window narrows.
12 → 7
days, the 80% window
without and with the test
1.70
error with the test
against 3.49 for the usual method
41
people, 110 cycles
one small study
Experimental. Studied on one small dataset and never presented as an ovulation date. See the case study.