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 an 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 to Remember

  • Bayesian cycle modeling starts with a Gaussian prior describing the typical cycle-related cycle length (Soulwise uses mu=28, sigma=5) and updates that prior with each newly logged cycle through a conjugate update.
  • The output is a probability distribution rather than a single date.
  • Soulwise surfaces this as a likely range plus one of three confidence labels: "Likely correlation," "Weak signal," or "Not enough data." Sigma is shown to the user, not hidden.
  • The model is for pattern tracking, not family planning or contraception.

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 an 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 practical decisions. A confidence label says "this is an estimate," which is what it is.

Robustness to irregular cycles. PCOS, midlife transition, post-pill cycles, and hormone reflective support 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 practical advice for missed periods, irregular bleeding, or persistent experiences.

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.

Common Questions

Why use a Bayesian model instead of a simple average?

A simple average ignores how confident the estimate is. Two users with the same 28-day average can have very different cycle variability. Bayesian models track the spread of your data, not just the midpoint, so the estimated range widens for irregular cycles and tightens for regular ones.

What does the sigma actually mean in practice?

Sigma is the standard deviation of the cycle-length distribution. A small sigma (under 2 days) means your cycles are tightly clustered; a likely range covers a few days. A large sigma (5+ days) means cycles spread across a week or more, and the app should say so.

Why not just give a single estimated date?

Because the model does not actually know one. A single date is an UX choice that hides uncertainty. Surfacing the range is more honest and matches how the math actually works.

Does this estimate specific cycle events?

No. Bayesian cycle modeling estimates when the next period is likely to occur. It is not a family-planning tool, not a contraception tool, and not a substitute for clinically validated methods.


Disclaimer: Astrology is for entertainment and personal-reflection purposes. While birth charts can offer valuable insight for self-understanding and growth, they are not a substitute for professional medical, legal, financial, or mental-health advice. Please consult qualified professionals for important life decisions.

Frequently Asked Questions

A simple average ignores how confident the estimate is. Two users with the same 28-day average can have very different cycle variability. Bayesian models track the spread of your data, not just the midpoint, so the estimated range widens for irregular cycles and tightens for regular ones.

Sigma is the standard deviation of the cycle-length distribution. A small sigma (under 2 days) means your cycles are tightly clustered; a likely range covers a few days. A large sigma (5+ days) means cycles spread across a week or more, and the app should say so.

Because the model does not actually know one. A single date is an UX choice that hides uncertainty. Surfacing the range is more honest and matches how the math actually works.

No. Bayesian cycle modeling estimates when the next period is likely to occur. It is not a family-planning tool, not a contraception tool, and not a substitute for clinically validated methods.

Try Our Free Tools

Get personalized insights based on your birth chart