Dochia
A small, auditable, on-device statistical model for menstrual-cycle forecasting: a calibrated next-onset distribution, a daily onset hazard, a corrected ovulation-variance identity, a heavy-tail allowance and explicit abstention.
This is not a Transformer or a neural network. It is ~50β200 effective parameters, <10 KB, with reference implementations in PHP, Python, R, Julia and JavaScript. It runs without a network, permissions or an ML runtime.
Intended use
Educational/research wellness forecasting: show a calibrated range and probability, a daily onset hazard, and abstain when the history is insufficient. Not a medical device, not contraception, not a fertility diagnostic.
Results (external research validation)
On 283 held-out women / 858 forecasts from the public Creighton cycle-length corpus (CC BY-NC 3.0; data not included):
- MAE 2.67 d; median AE 1.48 d; 3-in-4 within 3 days.
- 80% interval coverage 82.0%; 95% coverage 94.4%.
- Point accuracy is at parity with a standard normal hierarchical baseline; calibration is the improvement.
Full methods, synthetic stress results and limits: docs/VALIDATION.md and
docs/MODEL_CARD.md in this repo.
Files
params/dochia-v1.jsonβ ship-safe published priors (no fitted weights).src/β PHP reference (Dochia).python/dochia.pyβ Python reference.r/dochia.R,julia/dochia.jl,javascript/dochia.mjsβ R, Julia, JavaScript references.docs/MODEL_CARD.md,docs/VALIDATION.md,NOTICE,LICENSE.
Usage
$model = new \Dochia\MicroModel(
\Dochia\ModelParamsFactory::literature()
);
$f = $model->forecast([29, 28, 30, 27, 31, 29], currentDay: 12);
Citation
See CITATION.cff. Cite the primary sources listed in NOTICE.
Licence
Code MIT; documentation/model card CC BY 4.0. No real cycle data are included.