Bayesian Cycle Modeling Explained: Why We Show Sigma, Not a Date

Most cycle apps show you a confident date. "Period: March 14." It looks like a fact. It is a UX choice that hides a probability distribution behind a single number. Bayesian cycle modeling does the same math but shows you the spread.

This post explains how the math actually works, why Soulwise surfaces sigma instead of pretending certainty, and what that looks like in the daily UI.

What "Bayesian" actually means here

Bayesian inference combines two things:

  • A prior: your starting belief about cycle length before you have data from this specific user.
  • A likelihood: what each newly logged cycle tells you.

Multiply them, normalize, and you get a posterior: your updated belief. That posterior becomes the prior for the next cycle. The model gets sharper as more cycles arrive.

Soulwise starts with a Gaussian prior centered at mu = 28 days with a standard deviation of sigma = 5 days. That is the rough shape of cycle length across the wider population. As your own cycles get logged, the model shifts the center toward your personal mean and tightens (or loosens) the sigma based on your variability.

The conjugate update, in one paragraph

For a Gaussian prior and a Gaussian likelihood, the math collapses nicely. If your prior says cycle ~ N(mu_0, sigma_0) and you observe cycles x_1, x_2, ..., x_n, the posterior is also Gaussian:

posterior_mean = (mu_0 / sigma_0^2 + sum(x_i) / sigma_observed^2) / (1 / sigma_0^2 + n / sigma_observed^2)
posterior_sigma = sqrt(1 / (1 / sigma_0^2 + n / sigma_observed^2))

Translation: the more cycles you log, the less the prior matters and the more your personal data dominates. After ~3 logged cycles, the population prior is a small contributor; after ~10, it is noise.

What the user sees

The posterior is a curve. The UI cannot show a curve in a notification. So Soulwise compresses it into two things:

  • A likely range. The window where the posterior puts most of its mass (e.g., the central 68% interval, roughly +/- 1 sigma).
  • A confidence label. One of three plain-English tags:
    • "Likely correlation" when sigma is tight and the data is recent.
    • "Weak signal" when sigma is wide or data is sparse.
    • "Not enough data" when fewer than the model's minimum logged cycles are available.

So instead of "Period: March 14," the user sees "Likely March 12-16, weak signal." That is the actual output of the model, not a UX flourish.

Why hide nothing

Three reasons.

Honesty. A pattern tracker cannot promise a date it does not know. Surfacing sigma is the only way the user can calibrate trust.

Safety. A confident-looking date encourages people to plan around it for things the app cannot support, including conception, contraception, and clinical decisions. A confidence label says "this is an estimate," which is what it is.

Robustness to irregular cycles. PCOS, perimenopause, post-pill cycles, and hormone therapy all widen sigma. A traditional tracker either misses badly or quietly drops the user. A Bayesian tracker just labels the estimate "weak signal" and keeps working.

What the model is not

A few hard limits, written down so they cannot drift:

  • It does not estimate specific cycle events beyond the next period date range.
  • It does not output a family-planning window.
  • It is not designed for conception or contraception use cases.
  • It is not clinically validated and does not replace clinical advice for missed periods, irregular bleeding, or persistent symptoms.

These limits are not the model being conservative. They are the model being correctly scoped. Period estimation and family-planning estimation are different problems with different data needs and different regulatory bars.

Where the math meets the daily ritual

In Soulwise, the Bayesian output feeds the cycle-phase context used in the daily check-in. The 20-second ritual asks how you feel; the response uses cycle phase as one of five inputs. When sigma is wide, the response card weights cycle phase less. When sigma is tight, it weights cycle phase more. The math earns its weight by being honest about how confident it is.

The shorter version: a real Bayesian tracker surfaces sigma. If your app shows a single confident date, the model under the hood may be the same, but the framing is hiding what it actually knows.

Try Our Free Tools

Get personalized insights based on your birth chart

Share this article